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

简介: 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]#
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
存储 Kubernetes 应用服务中间件
k8s 1.24.3版本使用nfs-provisioner4.0.0动态创建PV
k8s 1.24.3版本使用nfs-provisioner4.0.0动态创建PV
82 0
|
5月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes|ResourceQuota 资源与准入控制器
云原生|kubernetes|ResourceQuota 资源与准入控制器
64 0
|
9天前
|
Kubernetes 测试技术 Docker
K8S中Deployment控制器的概念、原理解读以及使用技巧
K8S中Deployment控制器的概念、原理解读以及使用技巧
|
14天前
|
Kubernetes Shell 网络安全
Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统
Shell脚本快速部署Kubernetes(K8S v1.1版本)集群系统
|
14天前
|
Kubernetes Ubuntu Docker
Kubernetes(K8S v1.1版本) 集群管理Docker容器之部署篇
Kubernetes(K8S v1.1版本) 集群管理Docker容器之部署篇
|
26天前
|
存储 Kubernetes 调度
|
1月前
|
Kubernetes 应用服务中间件 网络安全
CentOS7上二进制部署Kubernetes高可用集群(v1.18版本)
CentOS7上二进制部署Kubernetes高可用集群(v1.18版本)
138 0
|
1月前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
125 0
|
1月前
|
运维 Kubernetes 容灾
kubernetes核心技术之Controller控制器知识总结
kubernetes核心技术之Controller控制器知识总结
18 1
|
2月前
|
Kubernetes 应用服务中间件 nginx
K8S(05)核心插件-ingress(服务暴露)控制器-traefik
K8S(05)核心插件-ingress(服务暴露)控制器-traefik
37 0