可以看到Deployment Controller控制ReplicaSet将旧的Pod 副本数一个个减少,并创建一个新的ReplicaSet:nginx-deployment-dc46b5ffc,并将其控制的Pod副本数一个个增加 。
在这个“滚动更新”过程完成之后,你可以查看一下新、旧两个 ReplicaSet 的最终状态:
kubectl get rsNAMEDESIREDCURRENTREADYAGEnginx-deployment-9754ccbdf00057mnginx-deployment-dc46b5ffc4445m9s
默认的情况下,Deployment 会保至少有75%的Pod还是可用的,所以我们的例子中,会保证至少有3个Pod是出于可用的状态 。
这个策略,是 Deployment 对象的一个字段,名叫 RollingUpdateStrategy,如下所示:
kubectl describe deploymentName:nginx-deployment...Selector:app=nginxReplicas:4 desired | 4 updated | 4 total | 4 available | 0 unavailableStrategyType:RollingUpdateMinReadySeconds:0RollingUpdateStrategy:25% max unavailable, 25% max surge...
25% max unavailable表示最大25%不可用;25% max surge表示最多可以创建多少个新的Pod 。
版本控制与回滚在上面的操作中,我们将nginx的版本设置成了1.16.1,现在我们可以通过rollout undo来进行版本的回滚:
kubectl rollout undo deployment/nginx-deploymentdeployment.apps/nginx-deployment rolled back
当然除了这个命令以外由于我们使用了–record,所以我们可以通过kubectl rollout history 来查看版本信息:
kubectl rollout history deployment/nginx-deploymentdeployment.apps/nginx-deploymentREVISIONCHANGE-CAUSE2kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record=true3kubectl apply --filename=nginx-deployment.yaml --record=true
我们可以通过kubectl rollout history来看到相应版本的具体信息:
kubectl rollout history deployment/nginx-deployment --revision=2
通过kubectl rollout undo命令来回滚到相应的版本:
kubectl rollout undo deployment/nginx-deployment --to-revision=2
Pausing 和Resuming 一个Deployment我们在上面的操作中,每进行一步操作都会进行一次滚动更新,如果我们想一次性执行多条命令然后再一次性滚动更新,那么可以先pause Deployment然后操作完之后再resume 它 。
如下:
kubectl rollout pause deployment/nginx-deploymentdeployment.apps/nginx-deployment paused
然后就可以随意的修改这个 Deployment 的内容了 。由于此时 Deployment 正处于“暂停”状态,所以我们对 Deployment 的所有修改,都不会触发新的“滚动更新”,也不会创建新的 ReplicaSet 。
操作完之后再执行:
kubectl rollout resume deployment/nginx-deploymentdeployment.apps/nginx-deployment resumed
在 kubectl rollout pause 指令之后的这段时间里,我们对 Deployment 进行的所有修改,最后只会触发一次“滚动更新” 。
【深入kubernetes:K8s的Deployment控制器】
推荐阅读
- 深入理解DNS解析过程
- K8S 搭建一套带Dashboard的kubernetes集群
- Antrea 0.9.0 发布,Kubernetes 网络解决方案
- CentOS7 安装K8S的两种方案
- ansible部署k8s
- K8S常用命令
- 蚂蚁集团针对 K8s 中 Secret 安全防护的实践与探索
- K8S部署指导书
- 工程师进阶:深入TCP协议
- Istio+K8s,微服务的双剑合璧