K8s 滚动升级与回退

news2025/3/4 3:35:01

k8s-cert


目录

    • 前言
    • 一、升级
    • 二、回滚


前言

Rolling Update 即滚动更新,先更新一部分副本,成功后再继续更新更多副本,最终完成所有的副本更新。前面说到动态伸缩容并不会触发上线,仅当 Deployment Pod 模板(即 .spec.template)发生改变时才会触发上线。且上线实现了滚动特点,其好处就是无需停服的状态下即可完成服务升级,从而保证了业务的连续性。

接下来以更新 Nginx 容器镜像的版本号为例进行演示与验证。

一、升级

刚刚把副本数从 2 ——> 3,执行 kubectl apply -f nginx.yml 启动服务,可看到并没有触发上线/滚动更新:

image-20221220143311821

接着修改镜像的版本号,从 1.20.0 ——> 1.21.4

image-20221220143737833

再次启动服务,看看镜像版本是否已更新:

image-20221220144111103

看看 Pod 是否正常运行:

image-20221220144225750

小结:可看到,原来 ReplicaSet nginx-6b6cf7569 的三个 nginx:1.20.0 Pod已经被ReplicaSet nginx-7bfd89cc74的三个nginx:1.21.4 Pod替换了。

再来看看 deployment 的详情,看看具实现过程:

image-20221220144900690

其流程就是:

  • ReplicaSet nginx-7bfd89cc74 新增一个 Pod,总数为 1;
  • ReplicaSet nginx-6b6cf7569 减少一个 Pod,总数为 2(也就是说至少还有两个 Pod 是正常对外提供服务的);
  • ReplicaSet nginx-7bfd89cc74 新增一个 Pod,总数为 2;
  • ReplicaSet nginx-6b6cf7569 减少一个 Pod,总数为 2(也就是说至少还有一个 Pod 是正常对外提供服务的);
  • ReplicaSet nginx-7bfd89cc74 新增一个 Pod,总数为 3;
  • ReplicaSet nginx-6b6cf7569 减少一个 Pod,总数为 0(此时 ReplicaSet nginx-6b6cf7569 已经没有 Pod 了)。

可看到,其更新方式是以滚动的形式实现的,从而保证了业务的连续性。

二、回滚

K8s 在每次 kubectl apply 更新应用时,都会记录当前的配置,比如我原本的 Nginx 镜像为 1.20.0,那这个 1.20.0 及其其他信息都会被记录下来,其目的就是方便我们上线失败后可以回到正常的那个镜像版本。

默认情况下,K8s 只会保留近 10 个的 revision,我们可以在 Deployment 配置文件中使用 revisionHistoryLimit 字段来指定 revision 的保留数量。

kubectl edit deployment nginx

image-20221220150436717

看看可回滚的历史版本:

kubectl rollout history deployment nginx

image-20221220151203399

虽然可看到有 2、3、4 这三个可会退的版本,但是 CHANGE-CAUSE 这个字段均为 <none>,这就不太利于我们进行版本会退,想要显示CHANGE-CAUSE 值,需要在 kubectl apply 时添加 --record 参数。所以这里重新在写两个 Deployment 的 YML 文件再来启动服务。

  • nginx-a.yml

    image-20221220151707689

  • nginx-b.yml

    image-20221220151801454

分别进行 kubectl apply 更新应用:

kubectl apply -f nginx-a.yml --record
kubectl apply -f nginx-b.yml --record

image-20221220152324505

这样就能看到你是指定的哪个 YAML 文件启动的,但是这个 --record 已经被弃用了,除了这种方法之外,我们可以通过指定具体的 revision 编号来查看其详细信息,这样你就可以根据实际情况会退到具体版本,比如我们查看 revision 为 4 的版本信息。

kubectl rollout history deployment nginx --revision=4

image-20221220153002310

版本会退验证:

  • 先看看当前的 Pod 的 image 版本

    kubectl get deployment nginx -o wide
    

    image-20221220153136787

  • 比如就回到我们 revision 为 4 的版本

    kubectl rollout undo deployment nginx --to-revision=4
    

    image-20221220153805798

  • 会退完成,再次验证当前 image 镜像

    kubectl get deployment nginx -o wide
    

    image-20221220154136759

    可看到版本会退成功!

以上就是 K8s Pod 版本升级/回滚的详细流程。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录拓展day1 1365.有多少小于当前数字的数字;941.有效的山脉数组;

代码随想录拓展day1 1365.有多少小于当前数字的数字&#xff1b;941.有效的山脉数组&#xff1b;1207.独一无二的出现次数&#xff1b;283. 移动零 打卡结束了&#xff0c;趁着世界杯当了几天懒狗&#xff0c;现在正好世界杯也结束了&#xff0c;希望能保持一个好习惯吧。 13…

m基于DCAR编码感知的网络路由发现算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 1.路由请求过程 当一个源节点有数据要向目的节点发送且在当前路由缓存中未发现可用路径时&#xff0c;则启动路由请求过程&#xff0c;下面分步对该过程进行说明&#xff1a; 步骤1&#xff1a…

AI行动,解放做表打工人

1. atomecho 插件介绍 如果你是个—— 需要做财报、数据新闻的冤种&#xff1b; 或者是“网上有的我都想要”的囤积狂魔&#xff1b; 或是沉迷“CtrlC、CtrlV”的做表工具人。 那你一定不陌生—— 对不上的格式、找不到的数据、删不完的无效内容、按烂了的“CtrlC”和“CtrlV…

在Qt creator中查看Qt源码

Qt 是开源语言&#xff0c;阅读其实现的源代码可以帮助我们更好的了解Qt&#xff0c;解决开发中遇到的问题&#xff0c;能帮助我们更快的成长&#xff0c;本文介绍了Qt官方原代码的两种查看方法。 在Qt creator中查看Qt源码在线查看本地查看配置版本一、下载源码1、运行Mainten…

阿里云崩“出圈”了!保护业务还得加一道同云跨可用区容灾!

2022年12月18日&#xff0c;上午10点47分&#xff0c;阿里云的香港部分服务出现故障&#xff0c;导致多个香港及澳门站点受到影响。 随后阿里云方面发布公告表示&#xff0c;阿里云官网 12 月 18 日下午更新处理进展称&#xff0c;经排查&#xff0c;阿里云香港地域故障确认为…

嵌入式Linux驱动开发之点灯

使用驱动开发的方式点亮一个LED灯。看看两者有啥区别不&#xff1f; 一、先看原理图 首先查看原理图&#xff0c;看看我们的板子上的LED等接在哪一个IO口上面。 好了&#xff0c;看原理图我们知道LED灯接在芯片的GPIO1的第三个引脚上面&#xff0c;也就是GPIO1_IO03。 二、I…

优化稠密点之尝试通过 Balance 来分摊访问压力

回忆之前的官方架构图&#xff0c;数据在 storaged 中是分片的&#xff0c;且 raft 协议中只有 leader 才会处理请求&#xff0c;所以&#xff0c;重新进行数据平衡操作&#xff0c;是有可能将多个稠密点分摊到不同的服务上以减轻单一服务的压力。同时&#xff0c;我们对整个集…

记录C,C++关键字的位置,直接跳过注释和字符串文本。(修正)

依据第二版本&#xff0c;可以写一个跳过注释的查找函数 C_IndexOfWord Java_IndexOfWord CSharp_IndexOfWord 还有一种方法&#xff0c;可以先把所有注释用空格代替&#xff0c;查出的字符位置也不变。 以前版本&#xff1a; DList<TextColor> Syntax::GetTextColorP…

(三分钟)学会kd-tree 激光SLAM点云搜索常见

Kd-Tree&#xff1a; 今天来介绍一下有关Kdtree的相关概念&#xff0c;它是一维线段树的多维推广。Kd-tree常用在激光点云编程中使用&#xff0c;Kd-tree简称k维树&#xff0c;是一种空间划分的数据结构&#xff0c;常被用于高维空间中的搜索&#xff0c;比如范围搜索和最近邻…

动态规划问题——最长公共子序列问题

题目: 给定两个字符串 str1 和 str2 &#xff0c;返回两个字符串的最长公共子序列。 举例&#xff1a; str1 "1A2C3D4B56" str2 "B1D23CA45B6A" 最长公共子序列为&#xff1a;"123456" 或 "12C4B6" 返回哪个都行 思路&#xf…

「内核知识」Linux下的系统调用write

本文以x86_64平台为例&#xff0c;分析linux下的系统调用是如何被执行的。 假设目标系统调用是&#xff0c;其对应的内核源码为&#xff1a; // fs/read_write.c SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,size_t, count) {return ksys_write(fd, …

通过国产化低代码平台搭建设备管理系统,助力中国航天企业信息化建设

编者按&#xff1a;掌握软件自主权&#xff0c;支持信创国产化。本文分析了国产化低代码平台的意义&#xff0c;并介绍了低低代码平台是如何为航天企业提高信息化建设水平的。 关键词&#xff1a;国产化&#xff0c;第三方对接能力&#xff0c;文件管理 以容器、微服务、DevOp…

Linux内核中的open方法

在linux下&#xff0c;假设我们想打开文件/dev/tty&#xff0c;我们可以使用系统调用open&#xff0c;比如&#xff1a; int fd open("/dev/tty", O_RDWR, 0); 本文将从源码角度看下&#xff0c;在linux内核中&#xff0c;open方法是如何打开文件的。 首先看下入…

【opencv】centos下opencv的编译(带opencv_contrib扩展包)

目录1.安装cmake2.opencv安装文件准备可选安装3.进行编译4.进行安装5.使用测试编译步骤&#xff1a;1.安装cmake 安装wget: 应该已安装gcc工具套组&#xff1a; yum install sudo yum install -y gcc gcc-c make automake yum install -y wget wget https://cmake.org/files…

【树莓派不吃灰】兄弟连篇④ Shell编程

目录1、Shell基础1.1 脚本执行方式1.1.1 echo1.1.2 脚本执行1.2 Bash基本功能1.2.1 history1.2.2 命令补全1.2.3 命令别名1.2.4 常用快捷键1.2.5 输出输入重定向1.2.6 多命令顺序执行与管道符1.2.7 通配符和特殊符号1.3 Bash变量1.3.1 用户自定义变量1.3.2 环境变量1.3.3 位置变…

Hudi入门到实战

简介 Apache Hudi&#xff08;Hadoop Upserts Delete and Incremental&#xff09;是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发&#xff0c;同时保持…

用于医学诊断的菁染料ICG-Sulfo-OSu,活性基团修饰ICG

英文名&#xff1a;ICG-Sulfo-EG4-OSu 激发波长: 780nm; 发射波长: 800nm 分子量: 1777.36 溶剂:DMSO 凯新生物描述&#xff1a; (ICG)是一种用于医学诊断的菁染料。它用于测定心输出量、肝功能和肝脏血流量&#xff0c;以及用于眼科血管造影。它的峰值光谱吸收接近800纳米…

【课程整理】随机系统期末整理

文章目录1 概率论部分 (1-4)概率空间随机变量概率分布随机变量的函数仍然是随机变量条件期望2 随机过程 (5-7)随机过程Martingale停时马尔科夫链3 参数估计 (8-10)参数估计问题充分统计量贝叶斯估计非随机估计部分思维导图如下&#xff0c;私信发送html完整版 1 概率论部分 (1-…

3.path路径模块

目录 1 路径问题 2 直接给绝对路径 3 用 __dirname 表示绝对路径 4 path模块常用方法 4.1 路径拼接 path.join() 4.2 从路径字符串中解析出文件名 path.basename() 4.3 获取路径中的扩展名 path.extname() 1 路径问题 当我们使用 ./ 或是 ../ 表示相对路径的时…

小林Coding阅读笔记:操作系统篇之硬件结构,中断问题

前言 参考/导流&#xff1a; 小林coding - 2.6 什么是软中断&#xff1f;学习意义 学习CPU与外设如何去提升处理效率的设计思想&#xff0c;异步机制的理解与借鉴掌握相关的Linux命令&#xff0c;帮助问题排查 相关说明 该篇博文是个人阅读的重要梳理&#xff0c;仅做简单参…