在kubernetes中使用deployment管理rs时,可以利用deployment滚动升级的特性,达到服务零停止升级的目的
命令行创建一个deploymen
1
| kubectl run nginx --image=nginx
|
多副本deployment
1
| kubectl run nginx --image=nginx --replicas=2 --record
|
滚动升级 (可以加上–record参数可以记录命令)
1 2 3 4 5 6 7 8
| kubectl set image deploy/nginx nginx=nginx:1.9.1
# 滚动策略: kubectl edit deployment nginx strategy: rollingUpdate: maxSurge: 1 # 升级过程中可以比预设的 pod 的数量多出的个数,默认值是25% maxUnavailable: 1 # 最多有几个 pod 处于无法工作的状态,默认值是25%
|
滚动升级状态查看
1
| kubectl rollout status deploy/nginx
|
查看升级历史
1 2 3
| kubectl rollout history deploy/nginx
kubectl rollout history deploy/nginx --revision=2
|
资源调整:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| kubectl set resources deploy/nginx -c=nginx --limits=cpu=100m,memory=200m
# 此时在查看历史状态: $ kubectl rollout history deploy/nginx deployments "nginx" REVISION CHANGE-CAUSE 1 <none> 2 <none> 3 <none>
# 查看revision 3 的内容,可以看出刚才调整了pod的资源记录了到了升级历史当中 $ kubectl rollout history deploy/nginx --revision=3 eployments "nginx" with revision #3 Pod Template: Labels: pod-template-hash=440294079 run=nginx Containers: nginx: Image: nginx:1.9.1 Port: <none> Limits: cpu: 100m memory: 200m Environment: <none> Mounts: <none> Volumes: <none>
|
回滚操作:
1 2 3
| $ kubectl rollout undo deploy nginx --to-revision=2 deployment "nginx"
|
应用弹性伸缩:
1 2
| $ kubectl scale deploy nginx --replicas=10 deployment "nginx" scaled
|
如果集群中对接了heapster,和HPA联动后,可以通过autoscale
自动弹性伸缩
1
| $ kubectl autoscale deployment nginx --min=10 --max=15 --cpu-percent=80
|
暂停和恢复Deployment
您可以在发出一次或多次更新前暂停一个 Deployment,然后再恢复它。这样您就能多次暂停和恢复 Deployment,在此期间进行一些更新,修复工作,而不会发出不必要的 rollout。
例如使用刚刚创建 Deployment:
1 2 3
| $ kubectl get deploy nginx NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx 3 3 3 3 27s
|
使用以下命令暂停 Deployment:
1 2
| $ kubectl rollout pause deployment/nginx deployment "nginx" paused
|
然后更新 Deplyment中的镜像:
1 2
| $ kubectl set image deploy/nginx nginx=nginx:1.9.1 deployment "nginx-deployment" image updated
|
您可以进行任意多次更新,例如更新使用的资源:
1 2
| $ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=256Mi deployment "nginx" resource requirements updated
|
Deployment 暂停前的初始状态将继续它的功能,而不会对 Deployment 的更新产生任何影响,只要 Deployment是暂停的。
那么新的更新或者改动的结果将是在暂停期间所有做的操作都是顺序生效取相同操作的最后一步,
比如,暂停后我做了以下操作:
1.更新了版本: 1.9.1
2.更新了资源: memory=222Mi
3.又更新了版本: 1.9.3
4.又调整了资源: memory=211Mi
最后,恢复这个 Deployment,观察完成更新的 ReplicaSet 已经创建出来了:
注意: 在恢复 Deployment 之前您无法回退一个已经暂停的 Deployment。