kjh00abc 2019-12-15
其中主要参数都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一样。
apiVersion: v1 kind: Deployment metadata: name: <deploy-name> namespace: <ns-name> labels: <key>: <value> spec: replicas: 2 selector: matchLabels: #管理的有该label 的pod <key>: <value> revisionHistoryLimit: 5 progressDeadlineSeconds: 600 #可选参数;deployment 卡住执行出现错误时,等待deployment 进行的时间秒数,deployment controller会继续重试。设置该值必须大于.spec.minReadySeconds。 minReadySeconds: 0 #可选参数,默认为0(pod 在ready后就被认为可用),pod中容器没有crash 并被认为可用状态的最小秒数。 strategy: #更新的策略,默认为rollingUpdate , 可选Recreate 在创建新pod之前会杀掉所有已经存在的pod rollingUpdate: maxUnavailable: 25% #最大不可用比例,可绝对值,可比例 maxSurge: 25% #最大更新pod量,可绝对值,可比例,按上取整 rollbackTo: #可选参数,用来配置deploy回退的配置,设置该参数将触发回退操作,每次回退完成会清楚该值 revision: 0 #默认为0,用来指定回退到的revision,0意味着回退到历史中最老的revision paused: false #可选参数 默认非paused,boolean值。用来指定暂停和恢复deploy,paused 和 非paused的唯一区别在于,paused后,所有对PodTemplateSpec的修改都不会触发新的rollout template: #和pod template中一样 metadata: name: <pod-name> labels: <key>: <value> #需要和sepc.selector.matchLabels 中的lable 匹配,否则rs 服务管理到该pod spec: containers: - name: image: imagePullPolicy: Alway # Alway,IfNotPresent,Never command: args: workingDir: #指定容器的工作目录 resources: #容器运行的资源申请和限制 requests: #申请 cpu: memory: limits: #最大限制 cpu: memory: ports: #容器应用运行暴露的port - name: containerPort: protocol: env: # 指定容器运行的环境变量 - name: value: volumeMounts: # 挂载外部文件到容器 - name: <volume-name> # volume 的 name mountPath: /home # 挂载到容器中的指定路径 livenessProbe: #存活探针 httpGet: #http检测形式 path: </path> #路径 port: <containerPort> #端口 httpHeaders: #需要设置请求头时的设置 - name: <key> value: <value> initialDelaySeconds: 20 #开始探针检测的等待秒数,根据业务需求具体启动时间来设置,过长会造成应用长时间无法提供服务,过短会杀死掉没有启动完全的应用 #exec: 探针的exec形式 # command: # - cmd 指令 # - args 参数 periodSeconds: 10 # 执行探测的间隔 timeoutSeconds: 3 # 探测超时的时间 successThreshold: 1 # 默认为1,失败状态后的服务检测成功1次后就识别为成功 failureThreshold: 3 # 成功状态后的服务,检测3次失败后为失败 readinessProbe: # 就绪探针 tcpSocket: #tcp 端口探测模式,kubelet 执行检测工作 port: <containerPort> #需要探测容器端口 terminationMessagePath: /dev/terminatino-log terminationMessagePolicy: File securityContext: {} #容器上下文权限 lifecycle: # 生命周期 postStart: exec: command: preStop: exec: command: stdin: true #标准输入,是否开启 stdinOnce: true #stdin 为true 后,可以有打开多个通道连接容器,当stdinOnce为true,只能有一个通道连接,并且关闭通道后,stdin也将关闭,直到容器重启 tty: true #是否开启交互窗口,加stdin 是docker -it 一样的功能 hostAliases: # 追加pod 中/etc/hosts 文件内容 - ip: "10.1.2.3" hostnames: - "foo.remote" - "bar.remote" shareProcessNamespace: true # 几乎不用参数,pod 中所有容器共享进程空间 nodeSelector: #指定调度节点标签,用节点label 匹配 <key>: <value> dnsPolicy: ClusterFirst # dns策略 restartPolicy: Always #Always,Never,Failure 重启策略,总是、永不、失败后重启 schedulerName: default-scheduler # 默认调度策略 securityContext: {} #pod上下文权限 terminatinoGracePeriodSeconds: 30 # 默认30 ,优雅关闭时间
securityContext Pod 权限
控制面 | 字段名称 |
---|---|
已授权容器的运行 | privileged |
为容器添加默认的一组能力 | defaultAddCapabilities |
为容器去掉某些能力 | requiredDropCapabilities |
容器能够请求添加某些能力 | allowedCapabilities |
控制卷类型的使用 | volumes |
主机网络的使用 | hostNetwork |
主机端口的使用 | hostPorts |
主机 PID namespace 的使用 | hostPID |
主机 IPC namespace 的使用 | hostIPC |
主机路径的使用 | allowedHostPaths |
容器的 SELinux 上下文 | seLinux |
用户 ID | runAsUser |
配置允许的补充组 | supplementalGroups |
分配拥有 Pod 数据卷的 FSGroup | fsGroup |
必须使用一个只读的 root 文件系统 | readOnlyRootFilesystem |
Pod 安全策略 由设置和策略组成,它们能够控制 Pod 访问的安全特征。这些设置分为如下三类:
range
。使用该范围内的第一个值作为默认值。验证是否不在配置的该范围内。runAsUser
值,或在镜像中定义了 USER
环境变量。不提供默认值。runAsUser
。seLinuxOptions
。默认使用 seLinuxOptions
。验证 seLinuxOptions
。seLinuxOptions
ID。supplementalGroups
ID。fsGroup
ID。通过设置 PSP 卷字段,能够控制具体卷类型的使用。当创建一个卷的时候,与该字段相关的已定义卷可以允许设置如下值:
对新的 PSP,推荐允许的卷的最小集合包括:configMap、downwardAPI、emptyDir、persistentVolumeClaim、secret 和 projected。
empty
。HostPortRange
列表通过 min
(包含) and max
(包含) 来定义,指定了被允许的主机端口。包含 PodSecurityPolicy
的 许可控制,允许控制集群资源的创建和修改,基于这些资源在集群范围内被许可的能力。
许可使用如下的方式为 Pod 创建最终的安全上下文: 1. 检索所有可用的 PSP。 1. 生成在请求中没有指定的安全上下文设置的字段值。 1. 基于可用的策略,验证最终的设置。
如果某个策略能够匹配上,该 Pod 就被接受。如果请求与 PSP 不匹配,则 Pod 被拒绝。
Pod 必须基于 PSP 验证每个字段。
后续补充...
后续补充...
后续补充...
后续补充...
后续补充...
后续补充...
后续补充...