暂停和恢复 Deployment 更新

更新 Deployment中演示的均为更改某一处的配置,更改后立即触发更新。大多数情况下可能需要针对一个资源文件更改多处地方,而并不需要多次触发更新,此时可以使用 Deployment 暂停功能,临时禁用更新操作,对 Deployment 进行多次修改后再进行更新

注意

如果使用的是 kubectl edit 命令,可以直接进行多次修改,无须暂停更新。

但 kubectl set 命令一般会集成在 CI/CD 流水线中,而 kubectl edit 是无法集成的。

1. 暂停 Deployment 更新

使用 kubectl rollout pause 命令即可暂停 Deployment 更新:

$ kubectl rollout pause deploy nginx-deploy
deployment.apps/nginx-deploy paused

2. 执行更新

然后对 Deployment 进行相关更新操作,比如先更新镜像,然后对其资源进行限制。

$ kubectl set image deploy nginx-deploy nginx=nginx:1.25.3
deployment.apps/nginx-deploy image updated

$ kubectl set resources deploy nginx-deploy --limits=cpu=200m,memory=512Mi -c nginx
deployment.apps/nginx-deploy resource requirements updated

3. 恢复 Deployment 更新

进行完最后一处配置更改后,使用 kubectl rollout resume 恢复 Deployment 更新:

$ kubectl rollout resume deploy nginx-deploy
deployment.apps/nginx-deploy resumed

可以看到恢复更新的 Deployment 创建了一个新的 ReplicaSet:

$ kubectl get rs -l app=nginx
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-585ff57b46   0         0         0       93m
nginx-deploy-68c574c9f    0         0         0       69m
nginx-deploy-798946d74d   0         0         0       36m
nginx-deploy-7c7b45cb47   5         5         5       4m12s
nginx-deploy-c86995cd6    0         0         0       59m
nginx-deploy-fcfc64c      0         0         0       40m

查看 deployment 的详细信息,可以看到 Deployment 的 image 已经变为 nginx:1.25.3,CPU 的 limit 变成了 200m:

$ kubectl describe deploy nginx-deploy
Name:                   nginx-deploy
Namespace:              default
CreationTimestamp:      Sun, 26 Nov 2023 10:32:16 +0800
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 11
                        kubernetes.io/change-cause: kubectl.exe set image deploy nginx-deploy nginx=nginx:1.25.3 --record=true
Selector:               app=nginx
Replicas:               5 desired | 5 updated | 5 total | 5 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:      nginx:1.25.3
    Port:       80/TCP
    Host Port:  0/TCP
    Limits:
      cpu:        200m
      memory:     512Mi
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>

最后更新于