deployment 控制升级和回滚

Deployment 中可以管理pod 和 ReplicaSets 的更新功能。

当我们的服务需要升级的时候,通过dockerFile 创建好新的升级包的镜像后。
修改deploy pod 模板中的镜像版本号,完成整个部署的滚动升级。
每次升级会有一个升级记录,通过记录可以执行回滚到某个版本。

deploy 更新

  1. 目前已有一个nginx部署实例

目前的nginx版本号是 1.14.2

  1. 目前要升级nginx版本 1.19
1
kubectl set image deploy/nginx-deployment nginx=nginx:1.19 --record

或者也可以直接编辑deploy 配置文件

  1. 可以看到pod正在变化中,完成pod的升级过程

  1. 查看更新上线状态
1
2
3
4
5

kubectl rollout status deployment/nginx-deployment

//输出
deployment "nginx-deployment" successfully rolled out

pod 如何滚动更新

会发现当修改了镜像信息后,pod是逐步进行更新的,是滚动更新的。

  1. 当更新了deploy后,会创建一个新的ReplicaSet。并将旧的rs 的副本数减少到1.

通过命令 kubectl get rs 也可以看到新生成的rs

  1. 最终当新的rs 执行到指定的副本数量的时候,旧的rs 缩减到0,完成滚动更新。

pod 的回滚

通过命令

1
2

kubectl rollout history deployment/nginx-deployment

可以看到更新的历史信息,有的有命令行显示有的没有是以为 在执行更新命令的时候有没有加 –record 参数的原因

查看某个版本的更新信息

1
2
kubectl rollout history deployment/nginx-deployment --revision=12

回滚到上一个版本

1
2
3
kubectl rollout undo deploy/nginx-deployment


回滚到指定版本

1
2
3
kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=12


暂停deploy

为了可能做多个更新操作而不每次都触发自动更新,可以先暂停deploy,再做一系列修改,最后恢复deploy

核心命令其实就2个

暂停

1
2
kubectl rollout pause deployment/nginx-deployment

恢复

1
kubectl rollout resume deployment/nginx-deployment

手动扩缩容

手动扩缩容可以指定数量或百分比的方式进行扩缩容;

手动指定副本数量

1
2
kubectl scale --replicas=3 deploy/xx

自动扩缩容

k8s 支持使用 Horizontal Pod Autoscaler(HPA)完成水平扩缩容操作。