概念
Deployment 所管理的 Pod 的 ownerReference 就是 ReplicaSet
Deployment 会拥有多个ReplicaSet, 不同的 ReplicaSet 代表不同的版本
关系图

Deployment 状态字段
- DESIRED:用户期望的 Pod 副本个数(spec.replicas 的值);
- CURRENT:当前处于 Running 状态的 Pod 的个数;
- UP-TO-DATE:当前处于最新版本的 Pod 的个数,所谓最新版本指的是 Pod 的 Spec 部分与 Deployment 里 Pod 模板里定义的完全一致;
- AVAILABLE:当前已经可用的 Pod 的个数,即:既是 Running 状态,又是最新版本,并且已经处于 Ready(健康检查正确)状态的 Pod 的个数。
ReplicaSet 状态字段 DESIRED、CURRENT 和 READY,与 Deployment 一致,Deployment 仅多出 UP-TO-DATE 状态
滚动更新 RollingUpdateStrategy 在“滚动更新”的过程中永远都会确保至少有 2 个 Pod 处于可用状态,至多只有 4 个 Pod 同时存在于集群中 旧版本RS的Pod数量递减,新版本RS的Pod数量递增
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginx spec: ... strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1金丝雀发布和蓝绿发布,示例: https://github.com/ContainerSolutions/k8s-deployment-strategies/tree/master/canary
命令
扩容
$ kubectl scale deployment nginx-deployment --replicas=4滚动更新
# --record 参数会记录下每次操作执行的命令 $ kubectl create -f nginx-deployment.yaml --record实时查看 Deployment 状态变化
$ kubectl rollout status deployment/nginx-deployment查看 ReplicaSet
$ kubectl get rs回滚 (有 –to-version=? 参数可选,回滚到指定版本)
$ kubectl rollout undo deployment/nginx-deployment查看 Deployment 每次的变更
$ kubectl rollout history deployment/nginx-deployment