为了方便理解 Deployment yml 各个参数含义,空闲时刻标注一二,如有不合理之处,望指明。
由于我这里是采用了阿里云的 arms中应用监控,故有下面配置
spec.template.metadata.annotations
apiVersion: apps/v1 kind: Deployment metadata: name: # 当前Deployment服务名 namespace: # 所在的命名空间 spec: minReadySeconds: 60 # k8s 等待设置的时间后才进行升级 progressDeadlineSeconds: 600 # 升级卡顿,比如权限,拉取镜像等,在 deadline 之内如果还卡着,那么就上报这个情况 , Deployment 状态就被标记为 False,并且注明原因 replicas: 1 # pod 副本数 selector: # 标签选择器 matchLabels: # 匹配的标签为 k8s-app: # 当前服务标签 template: # spec.selector.matchLabels 值 和 spec.template.metadata.lables值完全匹配,这样才不会报错 metadata: labels: k8s-app: # 和上面的 myapp要匹配 annotations: # 这里是阿里ARMS应用监控配置 armsPilotAutoEnable: 'on' # 开启 armsPilotCreateAppName: AppName # 应用名称 strategy: # 新旧的Pod的更换策略, rollingUpdate: # RollingUpdate可以指定maxUnavailable 和 maxSurge 来控制 rolling update 进程。 maxSurge: 25% maxUnavailable: 25% # maxSurge用来指定可以超过期望的Pod数量的最大个数, 当MaxUnavailable为0时, maxSurge不可以为0,通过百分比计算的绝对值向上取整。默认值是1。 # 例如,该值设置成30%,启动rolling update后新的ReplicatSet将会立即扩容,新老Pod的总数不能超过期望的Pod数量的130%。 # 旧的Pod被杀掉后,新的ReplicaSet将继续扩容,旧的ReplicaSet会进一步缩容,确保在升级的所有时刻所有的Pod数量和不会超过期望Pod数量的130%。 type: RollingUpdate # 可以是 Recreate / RollingUpdate, Recreate 先杀旧,再起新; spec: affinity: # 亲和性反亲和性 nodeAffinity: # 节点亲和性 requiredDuringSchedulingIgnoredDuringExecution: # pod必须部署到满足条件的节点上,如果没有满足条件的节点,就不停重试 nodeSelectorTerms: # 如果nodeAffinity中nodeSelector有多个选项,节点满足任何一个条件即可 - matchExpressions: # 如果matchExpressions有多个选项,则节点必须同时满足这些选项才能运行pod 。 - key: kubernetes.io/hostname # 同一个主机 operator: In # 取值包括 (节点亲和)In、NotIn、Exists、(反亲和性)DoesNotExist、Gt和Lt, values: - NodeName # 节点IP or HostName imagePullSecrets: # 拉取私有镜像 - name: registry # registry 认证信息 containers: - name: # 镜像名称 image: # 镜像及版本 imagePullPolicy: Always # 拉取镜像的策略- 总是拉取 securityContext: # 即安全上下文,它用于定义Pod或Container的权限和访问控制设置 privileged: true # 容器提权,是一个比较粗的权限,一般不建议如此 采用 capabilities 进行细分 capabilities: add: ["SYS_ADMIN"] # containers 提权 ports: # 容器端口 - containerPort: 8060 # 是容器内部的port name: # 对容器端口的命名 env: # 环境变量 - name: value: livenessProbe: # 探测指针 决定是否重启容器 failureThreshold: 3 # 连续3次失败后重启容器 httpGet: # 对指定的端口和路径进行 http get 请求 响应返回 2或3,则成功。反之,容器将重启。 path: /actuator/health # 探测路径 port: 8060 # 探测端口 scheme: HTTP # 协议 initialDelaySeconds: 75 # 容器创建后等待多久后才开始检测。 periodSeconds: 10 # 检测周期 每 10 s 一次 successThreshold: 1 # 健康阀值,探测失败后,最少连续探测成功多少次才被认定为成功,默认为1. timeoutSeconds: 10 # 超时时间 readinessProbe: # 探测指针 决定是否将请求转发给容器 failureThreshold: 3 # 连续3次失败后重启容器 httpGet: # 对指定的端口和路径进行 http get 请求 响应返回 2或3,则成功。反之,容器将重启。 path: /actuator/health # 探测路径 port: 8060 # 探测端口 scheme: HTTP # 协议 initialDelaySeconds: 60 # 容器创建后等待多久后才开始检测 periodSeconds: 10 # 检测周期 每 10 s 一次 successThreshold: 1 # 健康阀值,探测失败后,最少连续探测成功多少次才被认定为成功,默认为1 timeoutSeconds: 5 # 超时时间 startupProbe: # 判断容器内的应用程序是否已启动 failureThreshold: 3 # 连续3次失败后重启容器 httpGet: # 对指定的端口和路径进行 http get 请求 响应返回 2或3,则成功。反之,容器将重启 path: /actuator/health # 探测路径 port: 8060 # 探测端口 scheme: HTTP # 协议 periodSeconds: 10 # 检测周期 每 10 s 一次 successThreshold: 1 # 健康阀值,探测失败后,最少连续探测成功多少次才被认定为成功,默认为1 timeoutSeconds: 5 # 超时 resources: # 容器CPU及menory资源限制 limits: # 限制运行时容器占用的资源,当容器申请内存超过limits时会被终止,并根据重启策略进行重启。 cpu: '1' memory: 2048Mi requests: # 容器需要的最小资源 cpu: "0.6" memory: 1024Mi