Kubernetes----Deployment控制器实现版本回退

【原文链接】

一、版本升级过程的变化原理

编辑pc_deployment.yaml文件,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment
  namespace: dev
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1

使用如下命令创建资源,注意加–record参数,用于记录创建记录信息

[root@master pod_controller]# kubectl apply -f pc_deployment.yaml --record=true
namespace/dev created
deployment.apps/pc-deployment created
[root@master pod_controller]#

然后编辑yaml文件,将镜像版本升级到1.17.2,再次使用上述命令
然后编辑yaml文件,将镜像版本升级到1.17.3,再次使用上述命令
然后编辑yaml文件,将镜像版本升级到1.17.4,再次使用上述命令
此时,通过如下命令可以查看到,有四个ReplicaSet

[root@master pod_controller]# kubectl get rs -n dev
NAME                       DESIRED   CURRENT   READY   AGE
pc-deployment-5d9c9b97bb   0         0         0       4m9s
pc-deployment-6b575b9c45   3         3         3       47s
pc-deployment-76fd8c7f84   0         0         0       88s
pc-deployment-7c7477c7ff   0         0         0       118s

而通过监控ReplicaSet的变化过程如下看可以发现,在每次镜像升级的过程中,其实本质是每次都创建一个新的ReplicaSet,然后依次在新的ReplicaSet上创建pod

[root@master ~]# kubectl get rs -n dev -w
NAME                       DESIRED   CURRENT   READY   AGE
pc-deployment-5d9c9b97bb   3         3         3       2m7s
pc-deployment-7c7477c7ff   1         0         0       0s
pc-deployment-7c7477c7ff   1         0         0       0s
pc-deployment-7c7477c7ff   1         1         0       0s
pc-deployment-7c7477c7ff   1         1         1       1s
pc-deployment-5d9c9b97bb   2         3         3       2m12s
pc-deployment-5d9c9b97bb   2         3         3       2m12s
pc-deployment-7c7477c7ff   2         1         1       1s
pc-deployment-5d9c9b97bb   2         2         2       2m12s
pc-deployment-7c7477c7ff   2         1         1       1s
pc-deployment-7c7477c7ff   2         2         1       1s
pc-deployment-7c7477c7ff   2         2         2       2s
pc-deployment-5d9c9b97bb   1         2         2       2m13s
pc-deployment-5d9c9b97bb   1         2         2       2m13s
pc-deployment-7c7477c7ff   3         2         2       2s
pc-deployment-5d9c9b97bb   1         1         1       2m13s
pc-deployment-7c7477c7ff   3         2         2       2s
pc-deployment-7c7477c7ff   3         3         2       2s
pc-deployment-7c7477c7ff   3         3         3       24s
pc-deployment-5d9c9b97bb   0         1         1       2m35s
pc-deployment-5d9c9b97bb   0         1         1       2m35s
pc-deployment-5d9c9b97bb   0         0         0       2m35s
pc-deployment-76fd8c7f84   1         0         0       0s
pc-deployment-76fd8c7f84   1         0         0       0s
pc-deployment-76fd8c7f84   1         1         0       0s
pc-deployment-76fd8c7f84   1         1         1       1s
pc-deployment-7c7477c7ff   2         3         3       31s
pc-deployment-7c7477c7ff   2         3         3       31s
pc-deployment-76fd8c7f84   2         1         1       1s
pc-deployment-76fd8c7f84   2         1         1       1s
pc-deployment-7c7477c7ff   2         2         2       31s
pc-deployment-76fd8c7f84   2         2         1       1s
pc-deployment-76fd8c7f84   2         2         2       2s
pc-deployment-7c7477c7ff   1         2         2       32s
pc-deployment-7c7477c7ff   1         2         2       32s
pc-deployment-76fd8c7f84   3         2         2       2s
pc-deployment-7c7477c7ff   1         1         1       32s
pc-deployment-76fd8c7f84   3         2         2       2s
pc-deployment-76fd8c7f84   3         3         2       2s
pc-deployment-76fd8c7f84   3         3         3       3s
pc-deployment-7c7477c7ff   0         1         1       33s
pc-deployment-7c7477c7ff   0         1         1       33s
pc-deployment-7c7477c7ff   0         0         0       33s
pc-deployment-6b575b9c45   1         0         0       0s
pc-deployment-6b575b9c45   1         0         0       0s
pc-deployment-6b575b9c45   1         1         0       0s
pc-deployment-6b575b9c45   1         1         1       22s
pc-deployment-76fd8c7f84   2         3         3       63s
pc-deployment-6b575b9c45   2         1         1       22s
pc-deployment-76fd8c7f84   2         3         3       63s
pc-deployment-6b575b9c45   2         1         1       22s
pc-deployment-6b575b9c45   2         2         1       22s
pc-deployment-76fd8c7f84   2         2         2       63s
pc-deployment-6b575b9c45   2         2         2       45s
pc-deployment-76fd8c7f84   1         2         2       86s
pc-deployment-6b575b9c45   3         2         2       45s
pc-deployment-76fd8c7f84   1         2         2       86s
pc-deployment-76fd8c7f84   1         1         1       86s
pc-deployment-6b575b9c45   3         2         2       45s
pc-deployment-6b575b9c45   3         3         2       45s
pc-deployment-6b575b9c45   3         3         3       46s
pc-deployment-76fd8c7f84   0         1         1       87s
pc-deployment-76fd8c7f84   0         1         1       87s
pc-deployment-76fd8c7f84   0         0         0       87s

二、版本回退

2.1 版本回退简介

deployment控制器支持版本回退,因为在每次升级的时候deployment都是创建了一个新的ReplicaSet,依次,版本回退就是回退到旧的ReplicaSet上即可

deployment版本回退相关的命令是:kubectl rollout 命令,后跟如下选项

  • status 显示当前升级状态
  • history 显示升级历史记录
  • pause 暂停版本升级过程
  • resume 继续已经暂停的版本升级过程
  • restart 重启版本升级过程
  • undo 回滚到上一级版本(可以使用 --to-revision回滚到指定的版本)

2.2 版本回退

如下即查看当前升级状态

[root@master pod_controller]# kubectl rollout status deployment pc-deployment -n dev
deployment "pc-deployment" successfully rolled out
[root@master pod_controller]#

如下命令可以查看到升级历史记录

[root@master pod_controller]# kubectl rollout history deployment pc-deployment -n dev
deployment.apps/pc-deployment
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=pc_deployment.yaml --record=true
2         kubectl apply --filename=pc_deployment.yaml --record=true
3         kubectl apply --filename=pc_deployment.yaml --record=true
4         kubectl apply --filename=pc_deployment.yaml --record=true

[root@master pod_controller]#

通过如下命令即可回退到上个版本

[root@master pod_controller]# kubectl rollout undo deployment pc-deployment -n dev
deployment.apps/pc-deployment rolled back
[root@master pod_controller]#

此时查看历史版本如下,已经没有3了,而是多了一个5

[root@master pod_controller]# kubectl rollout history deployment pc-deployment -n dev
deployment.apps/pc-deployment
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=pc_deployment.yaml --record=true
2         kubectl apply --filename=pc_deployment.yaml --record=true
3         kubectl apply --filename=pc_deployment.yaml --record=true
4         kubectl apply --filename=pc_deployment.yaml --record=true

[root@master pod_controller]#

若直接回退到第一个版本,则使用如下命令即可

[root@master pod_controller]# kubectl rollout undo deployment pc-deployment --to-revision=1 -n dev
deployment.apps/pc-deployment rolled back
[root@master pod_controller]#

此时再次查看历史记录如下,此时1已经没有了,而多出来一个6

[root@master pod_controller]# kubectl rollout history deployment pc-deployment -n dev
deployment.apps/pc-deployment
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=pc_deployment.yaml --record=true
4         kubectl apply --filename=pc_deployment.yaml --record=true
5         kubectl apply --filename=pc_deployment.yaml --record=true
6         kubectl apply --filename=pc_deployment.yaml --record=true

[root@master pod_controller]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值