Kubernetes实战之--Deployment升级和回滚

【Kubernetes】Pod学习(十五)Deployment部署的回滚、暂停和恢复 此文为学习《Kubernetes权威指南》的相关笔记 学习笔记: Deployment具备升级的功能,允许我们在运行过程中升级Deployment到新的运行版本,与之对应的是,在某些情况下(比如新的Deployment不稳定时)可能需要将Deployment回滚到旧版本。 在默认情况下,所有Deployment的发布历史都被保留在系统中,以便我们随时进行回滚。 值得注意的是,只有在Depl... 阅读详情

1 Deployment升级

1.1 现在环境中准备两个版本的nginx,并配置好yml文件

在这里插入图片描述
nginx-deployment.yml文件内容如下:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

1.2创建pod

kubectl create deployment-upgrade.yml

在这里插入图片描述
此时nginx的镜像版本的1.7.9,进行版本升级
在这里插入图片描述

1.3 升级Pod

kubectl set image deployment/nginx-deployment nginx=nginx:latest

在这里插入图片描述
我们可以使用kubectl describe deployments/nginx-deployment命令仔细观察Deployment的更新过程。初始创建Deployment时,系统创建了一个ReplicaSet(nginx-deployment-54f57cf6bf),并按用户的需求创建了3个Pod副本。当更新Deployment时,系统创建了一个新的ReplicaSet(nginx-deployment-786b576769),并将其副本数量扩展到1,然后将旧的ReplicaSet缩减为2。之后,系统继续按照相同的更新策略对新旧两个ReplicaSet进行逐个调整。最后,新的ReplicaSet运行了3个新版本Pod副本,旧的ReplicaSet副本数量则缩减为0
在这里插入图片描述
具体升级逻辑如下图所示:
在这里插入图片描述
在整个升级的过程中,系统会保证至少有两个Pod可用,并且最多同时运行4个Pod,这是Deployment通过复杂的算法完成的。Deployment需要确保在整个更新过程中只有一定数量的Pod可能处于不可用状态。在默认情况下,Deployment确保可用的Pod总数至少为所需的副本数量(DESIRED)减1,也就是最多1个不可用(maxUnavailable=1)。Deployment还需要确保在整个更新过程中Pod的总数量不会超过所需的副本数量太多。在默认情况下,Deployment确保Pod的总数最多比所需的Pod数多1个,也就是最多1个(maxSurge=1)。Kubernetes从1.6版本开始,maxUnavailable和maxSurge的默认值将从1、1更新为所需副本数量的25%、25%。这样,在升级过程中,Deployment就能够保证服务不中断,并且副本数量始终维持为用户指定的数量(DESIRED)。
在Deployment的定义中,可以通过spec.strategy指定Pod更新的策略,目前支持两种策略:Recreate(重建)和RollingUpdate(滚动更新),默认值为RollingUpdate。在前面的例子中使用的就是RollingUpdate策略。
① Recreate:设置spec.strategy.type=Recreate,表示Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod
② RollingUpdate:设置spec.strategy.type=RollingUpdate,表示Deployment会以滚动更新的方式来逐个更新Pod。同时,可以通过设置spec.strategy.rollingUpdate下的两个参数(maxUnavailable和maxSurge)来控制滚动更新的过程。

  1. spec.strategy.rollingUpdate.maxUnavailable:用于指定Deployment在更新过程中不可用状态的Pod数量的上限。该maxUnavailable的数值可以是绝对值(例如5)或Pod期望的副本数的百分比(例如10%),如果被设置为百分比,那么系统会先以向下取整的方式计算出绝对值(整数)。而当另一个参数maxSurge被设置为0时,maxUnavailable则必须被设置为绝对数值大于0(从Kubernetes 1.6开始,maxUnavailable的默认值从1改为25%)。举例来说,当maxUnavailable被设置为30%时,旧的ReplicaSet可以在滚动更新开始时立即将副本数缩小到所需副本总数的70%。一旦新的Pod创建并准备好,旧的ReplicaSet会进一步缩容,新的ReplicaSet又继续扩容,整个过程中系统在任意时刻都可以确保可用状态的Pod总数至少占Pod期望副本总数的70%
  2. spec.strategy.rollingUpdate.maxSurge:用于指定在Deployment更新Pod的过程中Pod总数超过Pod期望副本数部分的最大值。该maxSurge的数值可以是绝对值(例如5)或Pod期望副本数的百分比(例如10%)。如果设置为百分比,那么系统会先按照向上取整的方式计算出绝对数值(整数)。从Kubernetes 1.6开始,maxSurge的默认值从1改为25%。举例来说,当maxSurge的值被设置为30%时,新的ReplicaSet可以在滚动更新开始时立即进行副本数扩容,只需要保证新旧ReplicaSet的Pod副本数之和不超过期望副本数的130%即可。一旦旧的Pod被杀掉,新的ReplicaSet就会进一步扩容。在整个过程中系统在任意时刻都能确保新旧ReplicaSet的Pod副本总数之和不超过所需副本数的130%。

2 回滚Deployment

有时(例如新的Deployment不稳定时)我们可能需要将Deployment回滚到旧版本。在默认情况下,所有Deployment的发布历史记录都被保留在系统中,以便于我们随时进行回滚(可以配置历史记录数量)。假设在更新Deployment镜像时,将容器镜像名误设置成
Nginx:latset(一个不存在的镜像)

kubectl set image deployment/nginx-deployment nginx=nginx:latset

查看ReplicaSet,可以看到新建的ReplicaSet(nginx-deployment-54f57cf6bf):
再查看创建的Pod,会发现新的ReplicaSet创建的1个Pod被卡在镜像拉取过程中。
在这里插入图片描述
为了解决上面这个问题,我们需要回滚到之前稳定版本的Deployment。首先,用kubectl rollout history命令检查这个Deployment部署的历史记录:

kubectl rollout history deployment/nginx-deployment

在这里插入图片描述
撤销本次发布并回滚到上一个部署版本

kubectl rollout undo deployment/nginx-deployment

在这里插入图片描述
也可以使用–to-revision参数指定回滚到的部署版本号:

kubectl rollout undo deployment/nginx-deployment --to-revision=1

在这里插入图片描述
这样,该Deployment就回滚到之前的稳定版本了,可以从 Deployment的事件信息中查看到回滚到版本1的操作过程

kubectl describe deployment nginx-deployment

此时可以看到nginx-deployment具体的回滚过程,并可以看到当前镜像已回退到nginx:1.7.9版本。
在这里插入图片描述

K8S 快速实战 注意:Master Node 和 Worker Node 是分别安装了 K8S 的 Master 和 Woker 组件的实体服务器,每个 Node都对应了一台实体服务器(虽然 Master Node 可以和其中一个 Worker Node 安装在同一台服务器,但是建议Master Node 单独部署),所有 Master Node 和 Worker Node 组成了 K8S 集群,同一个集群可能存在多个Master Node 和 Worker Node。这里,我们从宏观架构上来学习 K8S 的设计思想。 阅读详情

相关推荐

Kubernetes实战(十)-升级和回滚(Deployment)

Kubernetes 提供了为容器升级和回滚的功能,当集群中的某个服务需要升级时,我们需要停止目前与该服务相关所有的 Pod,然后根据改动后的内容创建新的 Pod。如果集群规模较大,这个工作将变成一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用,Kubernetes 提供了滚动升级功能来解决上述问题,同时如果在升级过程中出现了差错,可以通过回滚功能回滚到之前部署的任意版本。

专注基础架构领域 1056

Kubernetes应用编排与管理 —— Deployment升级策略

Deployment升级策略是在Kubernetes中用于管理应用程序更新的重要机制。它允许在保证服务的可用性的同时,逐步将旧版本的Pod替换为新版本的Pod。Deployment提供了两种主要的升级策略:Recreate(重建)和RollingUpdate(滚动更新)。适用情况:适用于无状态应用或不需要保持持久连接的有状态应用;测试环境或者说资源比较缺乏的一些环境,使用Recreate策略升级应用可以临时节约集群资源。工作原理:在升级过程中,会先删除所有旧的Pod,然后创建新的Pod来替换它们。

2301_78834737的博客 1465

SAP子公司财务账套配置实战:从公司代码到记账期间变式的关键步骤

本文详细介绍了为SAP子公司快速配置财务账套的实战步骤。通过复用母公司成熟配置,重点阐述了从创建公司代码、关联控制范围到分配记账期间变式的核心流程,帮助顾问在一两个小时内完成核心骨架搭建,实现高效集团财务管控。

cake8的博客 166

kubernetes-pod的升级与回滚

当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有Pod,然后下载新版本镜像并创建新的Pod。如果集群规模比较大,则这个工作变成了一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用。Kubernetes提供了滚动升级功能来解决上述问题。如果Pod是通过Deployment创建的,则用户可以在运行时修改Deployment的Pod定义(spec.template)或镜像名称,并应用到Deployment对象上,系统即可完成Deployment的自动更新操作。如果在更新过程中发生

u_my_heart的博客 996

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

一名全栈小白的博客 1万+

wsl --install 不执行,显示帮助信息

在安装使用wsl的时候碰到了wsl --install 不执行,而显示帮助信息,提供了解决方案。

水滴爬呀爬 2775

k8s控制器之Deployment第三弹之更新Deployment

下面的yaml文件创建了一个deployment,并且该deployment 将创建一个有 3 个 nginx Pod 副本的 ReplicaSet(副本集)。

linus.lin的博客 1463

ANSYS MAXWELL内置式永磁同步电机(IPMSM)转矩最大时输入电流相位的确定

1.在转子转速为零时看一个周期内的转矩变化

qq_41752507的博客 6517

解析Kubernetes部署及更新Deployment

例如,假定你在创建一个 Deployment 以生成 nginx:1.14.2 的 5 个副本,但接下来 更新 Deployment 以创建 5 个 nginx:1.16.1 的副本,而此时只有 3 个 nginx:1.14.2 副本已创建。例如,如果仔细查看上述 Deployment ,将看到它首先创建了一个新的 Pod,然后删除旧的 Pod, 并创建了新的 Pod。Deployment 控制器每次注意到新的 Deployment 时,都会创建一个 ReplicaSet 以启动所需的 Pod。

weixin_44519337的博客 3019

Robocopy 参数进阶:/MIR 镜像同步与 /PURGE 删除操作的风险规避指南

本文深入解析Robocopy的/MIR镜像同步与/PURGE删除操作的高级用法及风险规避策略。通过实际案例和四重防护机制,指导用户安全实现目录同步,避免数据丢失风险,特别适用于远程主机间的数据复制与备份场景。

weixin_33462927的博客 357

26届数字IC秋招笔试面试全攻略-ASIC设计流程全解析

本文系统介绍了ASIC芯片设计的全流程。前端设计包括规格制定、架构设计、RTL编码和功能验证;后端设计完成物理实现,涵盖布局规划、时钟树综合、布线和物理验证等步骤;Tapeout阶段完成制造数据准备和交付。文章详细说明了各阶段的关键任务、验证方法和设计指标,并列举了典型工具链,为ASIC设计提供了全面的流程指导。通过严格的检查清单和验证步骤,确保芯片设计符合制造要求和性能目标。

2301_79143213的博客 365

【运维知识大神篇】运维界的超神器Kubernetes教程10(RS资源表达式筛选Pod的四大规则+Deployment资源结合RS资源做镜像升级和各种升级策略+coreDNS服务IP与A记录解析原理)

本篇文章继续介绍Kubernetes的内容,包括RS资源表达式筛选Pod的四大规则,Deployment资源结合RS资源进行镜像升级和各种升级策略,版本回滚,deployment部署redis实战,coreDNS的服务器与A记录解析原理,内容比较复杂,学透了才能实现K8s的蜕变!!!

吾日三省吾身,想出类拔萃,要把知识学牢,学全,学深,学广。 1408

在 MATLAB/Simulink 中构建一个固定地面站天线指向控制系统的完整仿真模型

在卫星通信系统中,地面站天线负责与在轨卫星建立高增益、高稳定性的通信链路。对于固定地面站(如卫星测控站、深空站、VSAT主站),天线必须具备高精度指向能力,以确保波束始终对准卫星。然而,卫星(尤其是低轨卫星)在天空中快速移动,地面站天线必须实时跟踪其轨迹。此外,环境扰动(风载、热变形、机械误差)也会导致指向偏差。因此,设计一个高精度、高鲁棒性的天线指向控制系统(Antenna Pointing Control System)至关重要。本文将手把手教你如何在中构建一个固定地面站天线指向控制系统。

amy_mhd的博客 133

30-37-k8s-controller-service

k8s-30-37

qq_37171694的博客 259

【微服务】Java 对接飞书多维表格使用详解

Java 对接飞书多维表格使用详解

congge_study的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Docker+K8s 集成部署实战

本文详细介绍了Docker与Kubernetes(K8s)在企业级生产环境中的集成部署实践。首先阐述了二者的互补关系:Docker负责容器打包与单机运行,K8s专注集群编排与自动化管理。重点讲解了4个核心落地要点:镜像标准化规范、容器运行时集成、资源配置映射和网络通信方案。通过电商订单系统迁移案例,展示了从Docker Compose到K8s集群的完整迁移过程,包括镜像重构、存储方案升级等优化措施。文章还提供了生产环境中的配置示例和避坑指南,如避免使用latest标签、采用多阶段构建减小镜像体积等实用技巧,

m0_52307083的博客 1372

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

KubeSphere——使用deployment文件部署实战(3)

摘要 如果没有KubeSphere可视化界面,同样也能保持部署的能力。因此使用deployment文件来部署的相关应用。Deployment对象,顾名思义,是用于部署应用的对象。它使Kubernetes中最常用的一个对象,它为ReplicaSet和Pod的创建提供了一种声明式的定义方法,从而无需像前两篇文章中那样手动创建ReplicaSet和Pod对象(使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚)。 一

庄小焱 2027

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

kubernetes之deployment滚动升级

参考:https://blog.51cto.com/wutengfei/2116663 创建和管理多个Pod--Deployment   Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。你只需要在 Deployment 中描述想要的目标状态是什么,Depl...

weixin_30475039的博客 470

kubernetes部署控制器Deployment

主要介绍deployment资源的发布创建,升级回滚,以及升级策略Recreate、RollingUpdate介绍,还有常用的应用部署策略,包括金丝雀部署、蓝绿部署、滚动部署

weixin_39941298的博客 1259

【4】 Deployment深入简出&实战演练

Kubernetes Deployment简介 Deployment是Kubernetes中管理Pod的核心组件,它解决了大规模Pod集群的管理难题。主要功能包括: 自愈能力:自动替换故障Pod 弹性伸缩:动态调整Pod数量 滚动更新:零停机更新服务版本 版本回滚:可快速恢复到历史版本 Deployment通过ReplicaSet实现底层控制,但用户只需与Deployment交互。其实战配置通过YAML文件定义,包含Pod模板、副本数等参数,支持精细化的更新策略控制。 典型工作流程包括:创建Deployme

zxnbmk的博客 1032

k8s创建资源(3)(负载均衡原理,回滚指定版本,label控制pod的位置)

Deployment介绍 Deployment是kubernetes 1.2引入的概念,用来解决Pod的编排问题。Deployment可以理解为RC的升级版(RC+Reolicat Set)。特点在于可以随时知道Pod的部署进度,即对Pod的创建、调度、绑定节点、启动容器完整过程的进度展示。 使用场景 创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程。 检查Deployment的状态来确认部署动作是否完成(Pod副本的数量是否达到预期值)。 更新Deployme

xgp666的博客 593

3-2-10、k8s学习-pod的升级和回滚

选择升级策略时,需综合考虑应用特性可用性要求资源限制和风险控制。大多数场景推荐使用,通过调整参数平衡升级速度与稳定性;仅在应用明确不支持多版本共存时使用Recreate。合理的策略配置是保障 Kubernetes 集群稳定运行的关键。

xuebo1129927648的博客 124

K8S学习之操作Deployment常用命令

介绍k8s客户端操作depoloyment常用指令

CharlesYan的博客 7159

Kubernetes实战课第二节 K8S各组件和命令详解

kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署命令格式如下 参数例如: flags:指定可选的参数,例如,可用 -s 或者 -server参数指定Kubernetes API server的地址和端口 常见命令 kubectl help 获取更多信息 通过 help命令,能够获取帮助信息 基础命令 常见的基础命令 2.Kubernetes集群YAML文件详解 概述 k8s 集群中对资源管理和资源对象编排部署都可以

fegus的博客 1523

7、kubernetes 核心技术-Controller 控制器

文章目录一、什么是Controller?二、Pod和Controller的关系三、Deployment控制器应用场景四、Deployment控制器部署应用导出yaml文件使用YAML创建Pod五、升级回滚和弹性伸缩应用升级和回滚应用升级查看升级状态应用回滚弹性伸缩 一、什么是Controller? Controller是在集群上管理和运行容器的对象,Controller是实际存在的,Pod是抽象的,主要创建管理pod 二、Pod和Controller的关系 Pod是通过Controller实现应用的运维,

路人甲的博客 757

K8s-service

K8s-service暴露端口的方式service的类型K8s-基础操作 暴露端口的方式 1.clusterIP 此类型会提供一个集群内部的虚拟IP(与pod不在同一网段),以供集群内部的pod之间通信使用。clusterIP也是kubernetes service的默认类型 主要需要以下几个组件的协同工作 apiservice:在创建service时,apiserver接收到请求以后将数据存储到etcd中。 kube-proxy:k8s的每个节点中都有该进程,负责实现service功能,这个进程负责感知s

W--\\_//的博客 278
上一篇: [Bug]Error from server (BadRequest): container “xx“ in pod “xx“ is waiting to start:trying and faili
下一篇: Centos 7 制作离线yum源
不以物喜2020
博客等级 码龄8年 85粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值