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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
11天前
|
Kubernetes 监控 调度
【赵渝强老师】K8s的DaemonSet控制器
DaemonSet控制器确保每个节点上运行一个Pod副本,适用于监控、日志收集等场景。通过示例创建DaemonSet并查看Pod信息,展示了其自动扩展和回收的能力。视频讲解和代码示例详细说明了DaemonSet的使用方法和调度机制。
|
11天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Job控制器单工作队列的串行方式
Kubernetes中的Job控制器用于管理一次性任务,确保任务完成后不再重启。本文介绍了Job的工作原理、运行方式及示例,包括创建Job、查看Job和Pod信息等步骤,并附有视频讲解。
|
11天前
|
Kubernetes 双11 容器
【赵渝强老师】Kubernetes中的控制器
Kubernetes通过控制器管理Pod的生命周期,以应对不同场景需求,如Deployment、DaemonSet、Job等。控制器可自动调整Pod数量和重启故障Pod,确保系统稳定运行。视频讲解和详细内容见下文。
|
11天前
|
Kubernetes 应用服务中间件 nginx
【赵渝强老师】K8s中的Deployment控制器
Kubernetes中的Deployment用于部署无状态应用程序,管理Pod的数量、更新方式和资源限制。通过创建和管理ReplicaSet,Deployment可以实现Pod的自动扩缩容、滚动更新和回滚。本文介绍了Deployment的基本概念,并通过一个具体的示例演示了如何使用Deployment创建、更新和管理Pod。
|
27天前
|
Kubernetes Linux 测试技术
|
11天前
|
存储 Kubernetes 调度
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
|
11天前
|
存储 Kubernetes 调度
【赵渝强老师】K8s的有状态控制器StatefulSet
在Kubernetes中,StatefulSets用于部署有状态应用程序,提供持久存储和唯一标识符。与Deployment不同,StatefulSets确保Pod的标识符在重新调度后保持不变,适用于需要稳定网络标识符和持久存储的场景。本文介绍了StatefulSets的创建、扩容与缩容、更新与回滚等操作,并提供了具体示例和视频讲解。
|
11天前
|
Kubernetes Linux 调度
【赵渝强老师】K8s的周期性任务控制器CronJob
本文介绍了K8s中的CronJob控制器,它类似于Linux的crontab命令,用于管理和调度定时作业。CronJob可以设置在未来某一时间运行作业一次或在指定时间点重复运行作业。文章通过一个示例展示了如何创建和使用CronJob控制器,包括创建配置文件、应用配置、查看Pod信息和日志等步骤。同时,还解释了CronJob的时间表示方式及其限制。
|
11天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s的Job控制器多工作队列的并行方式
Kubernetes Job 是一次性任务控制器,用于控制 Pod 中的容器执行特定任务。本文介绍了 Job 控制器的工作原理、运行方式及多工作队列并行执行的示例。示例中创建了 5 个作业,以 3 个队列并行执行,整个过程需 2 分钟。文中还提供了详细的 YAML 文件配置和执行命令。
|
1月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本