k8s的deployment回滚

公司k8s环境回滚支持两种方式:

(1)根据镜像版本号回滚。

(2)根据命令kubeclt rollout 进行回滚。

回滚到上一个版本

kubectl 部署是,加上--record=true方便记录版本和回退

kubectl rollout undo  deploy/deployment名称  -n 命令空间    
deployment历史记录
kubectl rollout history deployment/deployment名称   -n 命令空间
-- revision参数回滚到指定版本
kubectl rollout undo deployment/deployment名称 --to-revision=2   

查看指定版本的信息

kubctl rollout history deployment deployment名称 --revision=5

spec.revisionHistoryLimit: 设置保留 RS 旧的 revision 的个数,设置为0的话,不保留历史数据
spec.minReadySeconds: 可选参数,指定新创建的 Pod 在没有任何容器溃的情况下视为 Ready最小的秒数,默认为0,即一旦被创建就视为可用.

滚动更新的策略:
spec.strategy.type: 更新 deployment 的方式,默认是 RollingUpdates
RollingUpdate: 滚动更新,可以指定maxSurge和maxUnavailable
maxUnavailable: 指定在回滚或更新时最大不可用的 Pod 的数量,可选字段,默认25%,可以设置成数字或百分比,如果该值为0,那么maxSurge 就不能0
emaxSurge:可以超过期望值的最大 Pod数,可选字段,默认为25%,可以设置成数字或百分比,如果该值为0,那么maxUnavailable 不能为0

deployment的暂停与恢复

使用命令kubectl rollout pause暂停 Deployment 的更新操作:
$ kubectl rollout pause deployment/nginx-deployment
deployment.extensions/nginx-deployment paused
修改 Deployment 的镜像信息为 nginx:1.9.1:
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment.extensions/nginx-deployment image updated
查看更新历史记录,可以看到并没有触发对应的更新操作:
$ kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment
REVISION  CHANGE-CAUSE
1         kubectl create --filename=nginx-deployment.yaml --record=true
这里我们再一次更新 Deployment 配置,限制容器的资源使用:
$ kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
deployment.extensions/nginx-deployment resource requirements updated
恢复 Deployment 的部署操作:
$ kubectl rollout resume deploy nginx-deployment
deployment.extensions/nginx-deployment resumed

查看 RS 资源和 Deployment 的详细信息:

# 可以看到新创建的 RS(nginx-deployment-7576c67d77)
$ kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5754944d6c   0         0         0       6m40s
nginx-deployment-7576c67d77   3         3         3       58s

# 观察 nginx-deployment 的配置信息是否修改
$ kubectl describe deployment/nginx-deployment
...
Annotations:            deployment.kubernetes.io/revision: 2
                        kubernetes.io/change-cause: kubectl create --filename=nginx-deployment.yaml --record=true
...
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:      nginx:1.9.1 # 镜像已经更新
    Port:       80/TCP
    Host Port:  0/TCP
    Limits: # 容器资源的限制已经生效
      cpu:        200m
      memory:     512Mi

 

 

 
 
 
 
 
 
 
 
 
posted @ 2022-12-26 17:51  逆风飞翔的博客  阅读(911)  评论(0)    收藏  举报