Kubernetes----Deployment控制器实现版本滚动发布

简介: Kubernetes----Deployment控制器实现版本滚动发布

一、镜像更新策略简介

Deployment控制器支持两种镜像更新策略:重建更新和滚动更新(默认),可以通过strategy字段进行配置
配置资料如下:

strategy:  # 指定新的Pod替换旧的Pod的策略,支持两个属性
  type:   # 指定策略类型,支持两种策略
    Recreate:    # 在创建出新的额Pod之前会先杀掉所有已存在的Pod
    RollingUpdate:    # 滚动更新,就是杀死一部分,就启动一部分,在更新的过程中,存在两个版本的Pod,可以做到业务无中断
  rollingUpdate:   # 当type为RollingUpdate时生效,用于为RollingUpdate设置参数,支持如下两个属性
    maxUnavailable:  # 用来指定在升级过程中不可用Pod的最大数量,默认为25%
    maxSurge:    # 用来指定在升级过程中可以超过期望的Pod的最大数量,默认为25%

二、重建更新

编辑 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: Recreate
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1

然后使用如下命令创建资源

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

此时可在另外一个终端中使用如下命令监控pod变化过程

kubectl get pod -n dev -w

然后更新镜像版本,可以通过修改yaml文件,然后使用如下命令修改

kubectl apply -f pc_deployment.yaml

也可以不修改yaml文件,通过如下命令直接修改镜像版本,如修改为1.17.3

kubectl set image deploy pc-depoyment nginx=nginx:1.17.3 -n dev

此时监控窗口输出如下,可以看出此时是一次性将三个pod杀掉,然后重新创建了三个pod

[root@master ~]# kubectl get pod -n dev -w
NAME                             READY   STATUS    RESTARTS   AGE
pc-deployment-5d9c9b97bb-cxsrn   1/1     Running   0          8s
pc-deployment-5d9c9b97bb-j5vfn   1/1     Running   0          8s
pc-deployment-5d9c9b97bb-z4hjg   1/1     Running   0          8s
pc-deployment-5d9c9b97bb-z4hjg   1/1     Terminating   0          30s
pc-deployment-5d9c9b97bb-j5vfn   1/1     Terminating   0          30s
pc-deployment-5d9c9b97bb-cxsrn   1/1     Terminating   0          30s
pc-deployment-5d9c9b97bb-z4hjg   0/1     Terminating   0          30s
pc-deployment-5d9c9b97bb-j5vfn   0/1     Terminating   0          30s
pc-deployment-5d9c9b97bb-cxsrn   0/1     Terminating   0          30s
pc-deployment-5d9c9b97bb-z4hjg   0/1     Terminating   0          34s
pc-deployment-5d9c9b97bb-z4hjg   0/1     Terminating   0          34s
pc-deployment-5d9c9b97bb-j5vfn   0/1     Terminating   0          34s
pc-deployment-5d9c9b97bb-j5vfn   0/1     Terminating   0          34s
pc-deployment-5d9c9b97bb-cxsrn   0/1     Terminating   0          40s
pc-deployment-5d9c9b97bb-cxsrn   0/1     Terminating   0          40s
pc-deployment-76fd8c7f84-jjtxb   0/1     Pending       0          0s
pc-deployment-76fd8c7f84-z9bwm   0/1     Pending       0          0s
pc-deployment-76fd8c7f84-jjtxb   0/1     Pending       0          0s
pc-deployment-76fd8c7f84-lwwjb   0/1     Pending       0          0s
pc-deployment-76fd8c7f84-z9bwm   0/1     Pending       0          0s
pc-deployment-76fd8c7f84-lwwjb   0/1     Pending       0          0s
pc-deployment-76fd8c7f84-jjtxb   0/1     ContainerCreating   0          0s
pc-deployment-76fd8c7f84-z9bwm   0/1     ContainerCreating   0          0s
pc-deployment-76fd8c7f84-lwwjb   0/1     ContainerCreating   0          0s
pc-deployment-76fd8c7f84-z9bwm   1/1     Running             0          1s
pc-deployment-76fd8c7f84-lwwjb   1/1     Running             0          1s
pc-deployment-76fd8c7f84-jjtxb   1/1     Running             0          1s

三、滚动更新

编写pc_deployment.yaml文件,内容如下,为了演示滚动效果,这里设置3个副本,初始化镜像设置为1.17.1的版本,滚动更新比例设置为25%,如下:

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

然后使用如下命令创建资源

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

这里同样打开一个窗口使用如下命令监视pod的状态

kubectl get pod -n dev -w

这里同样也可以通过修改yaml文件中镜像的版本号和使用kubectl apply -f pc_deployment.yaml命令的方式,或者可以直接通过使用如下命令设置镜像版本号

[root@master pod_controller]# kubectl set image deploy pc-deployment nginx=nginx:1.17.3 -n dev
deployment.apps/pc-deployment image updated
[root@master pod_controller]#

此时通过监视窗口可以看到pod的变化过程,即先创建一个pod,然后停一个pod,再创建一个pod,在停一个pod,再创建一个pod,再停一个pod

[root@master ~]# kubectl get pod -n dev -w
NAME                             READY   STATUS    RESTARTS   AGE
pc-deployment-5d9c9b97bb-pqm9j   1/1     Running   0          59s
pc-deployment-5d9c9b97bb-ql5ps   1/1     Running   0          60s
pc-deployment-5d9c9b97bb-w49wz   1/1     Running   0          61s
pc-deployment-76fd8c7f84-w4pw7   0/1     Pending   0          0s
pc-deployment-76fd8c7f84-w4pw7   0/1     Pending   0          0s
pc-deployment-76fd8c7f84-w4pw7   0/1     ContainerCreating   0          0s
pc-deployment-76fd8c7f84-w4pw7   1/1     Running             0          1s
pc-deployment-5d9c9b97bb-pqm9j   1/1     Terminating         0          67s
pc-deployment-76fd8c7f84-kmrb7   0/1     Pending             0          0s
pc-deployment-76fd8c7f84-kmrb7   0/1     Pending             0          0s
pc-deployment-76fd8c7f84-kmrb7   0/1     ContainerCreating   0          0s
pc-deployment-5d9c9b97bb-pqm9j   0/1     Terminating         0          67s
pc-deployment-5d9c9b97bb-pqm9j   0/1     Terminating         0          68s
pc-deployment-5d9c9b97bb-pqm9j   0/1     Terminating         0          68s
pc-deployment-76fd8c7f84-kmrb7   1/1     Running             0          1s
pc-deployment-5d9c9b97bb-ql5ps   1/1     Terminating         0          69s
pc-deployment-76fd8c7f84-h4d87   0/1     Pending             0          0s
pc-deployment-76fd8c7f84-h4d87   0/1     Pending             0          0s
pc-deployment-76fd8c7f84-h4d87   0/1     ContainerCreating   0          0s
pc-deployment-5d9c9b97bb-ql5ps   0/1     Terminating         0          70s
pc-deployment-76fd8c7f84-h4d87   1/1     Running             0          1s
pc-deployment-5d9c9b97bb-w49wz   1/1     Terminating         0          71s
pc-deployment-5d9c9b97bb-ql5ps   0/1     Terminating         0          71s
pc-deployment-5d9c9b97bb-ql5ps   0/1     Terminating         0          71s
pc-deployment-5d9c9b97bb-w49wz   0/1     Terminating         0          72s
pc-deployment-5d9c9b97bb-w49wz   0/1     Terminating         0          84s
pc-deployment-5d9c9b97bb-w49wz   0/1     Terminating         0          84s

滚动更新过程如下图所示
在这里插入图片描述

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 监控 调度
【赵渝强老师】K8s的DaemonSet控制器
DaemonSet控制器确保每个节点上运行一个Pod副本,适用于监控、日志收集等场景。通过示例创建DaemonSet并查看Pod信息,展示了其自动扩展和回收的能力。视频讲解和代码示例详细说明了DaemonSet的使用方法和调度机制。
186 1
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Job控制器单工作队列的串行方式
Kubernetes中的Job控制器用于管理一次性任务,确保任务完成后不再重启。本文介绍了Job的工作原理、运行方式及示例,包括创建Job、查看Job和Pod信息等步骤,并附有视频讲解。
183 0
|
Kubernetes 双11 容器
【赵渝强老师】Kubernetes中的控制器
Kubernetes通过控制器管理Pod的生命周期,以应对不同场景需求,如Deployment、DaemonSet、Job等。控制器可自动调整Pod数量和重启故障Pod,确保系统稳定运行。视频讲解和详细内容见下文。
162 0
|
运维 Kubernetes 监控
Kubernetes详解(十九)——Kubernetes Pod控制器
Kubernetes详解(十九)——Kubernetes Pod控制器
292 3
|
Kubernetes 应用服务中间件 nginx
【赵渝强老师】K8s中的Deployment控制器
Kubernetes中的Deployment用于部署无状态应用程序,管理Pod的数量、更新方式和资源限制。通过创建和管理ReplicaSet,Deployment可以实现Pod的自动扩缩容、滚动更新和回滚。本文介绍了Deployment的基本概念,并通过一个具体的示例演示了如何使用Deployment创建、更新和管理Pod。
231 1
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
644 4
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
Kubernetes Linux 测试技术
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
存储 Kubernetes 调度
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
427 0
|
存储 Kubernetes 调度
【赵渝强老师】K8s的有状态控制器StatefulSet
在Kubernetes中,StatefulSets用于部署有状态应用程序,提供持久存储和唯一标识符。与Deployment不同,StatefulSets确保Pod的标识符在重新调度后保持不变,适用于需要稳定网络标识符和持久存储的场景。本文介绍了StatefulSets的创建、扩容与缩容、更新与回滚等操作,并提供了具体示例和视频讲解。
478 0

推荐镜像

更多