K8S - Deployment 的版本回滚
当前状态
先看deployment
root@k8s-master:~# kubectl get deploy -o wide --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
bq-api-service-deploy-sample 5/5 5 5 4h47m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.3 app=bq-api-service app=bq-api-service,author=Jason
root@k8s-master:~#
得知 这个deployment 的image 版本是1.1.3 , 有5个运行副本
查看revisions 历史
root@k8s-master:~# kubectl rollout history deployment/bq-api-service-deploy-sample
deployment.apps/bq-api-service-deploy-sample
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
可以见到有3个revisions
其实他们对应的是image 版本1.1.1 , 1.1.2 和 1.1.3
至于k8s 会为1个deployment 保留多少个revisions, 是由参数spec.revisionHistoryLimit 决定的
例如 下面配置意思就是期望运行5个pod 副本, 但是会保留pod 的10个历史版本
spec:replicas: 10 # desired replica count, Please note that the replica Pods in a Deployment are typically distributed across multiple nodes.revisionHistoryLimit: 10
查看ReplicaSet 信息
root@k8s-master:~# kubectl get rs -o wide -l app=bq-api-service
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
bq-api-service-deploy-sample-7bff8fbc4b 5 5 5 81m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.3 app=bq-api-service,pod-template-hash=7bff8fbc4b
bq-api-service-deploy-sample-8d49d9845 0 0 0 88m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.2 app=bq-api-service,pod-template-hash=8d49d9845
bq-api-service-deploy-sample-9f8d9c988 0 0 0 5h23m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1 app=bq-api-service,pod-template-hash=9f8d9c988
root@k8s-master:~#
刚好也是3个rs, 其实他们刚好对应了3个revisions的image 版本
只不过1.1.3 版本的RS 有5个当前运行的POD 副本, 而1.1.1 和 1.1.2 的副本数量是0, 符合常规.
但是 ReplicaSet 和 Revision 不是永远可以一一对应的, 一是revisions数量有限制, 二是1个deployment 的replicaSet 有可能会被重用
查看Pod 信息
root@k8s-master:~# kubectl get po -o wide -l app=bq-api-service
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bq-api-service-deploy-sample-7bff8fbc4b-b9c8v 1/1 Running 0 92m 10.244.3.40 k8s-node3 <none> <none>
bq-api-service-deploy-sample-7bff8fbc4b-bf8bp 1/1 Running 0 92m 10.244.1.29 k8s-node1 <none> <none>
bq-api-service-deploy-sample-7bff8fbc4b-hqfmw 1/1 Running 0 92m 10.244.1.30 k8s-node1 <none> <none>
bq-api-service-deploy-sample-7bff8fbc4b-lgjj9 1/1 Running 0 92m 10.244.2.91 k8s-node0 <none> <none>
bq-api-service-deploy-sample-7bff8fbc4b-wgrj5 1/1 Running 0 92m 10.244.2.89 k8s-node0 <none> <none>
有5个pod 正在运行, 关键pod 名字是包含了 rs 的对象名字的
如
bq-api-service-deploy-sample-7bff8fbc4b-b9c8v
所以我们可以用pod 的名字来知道它是属于哪个 ReplicaSet的
用新的部署来实现回滚到1.1.2 版本
回滚1个service 的版本有多种方法
- 是部署多一次旧的image 版本
- 恢复已备份的service版本
在生产中, 我们可能会更常用第一种
这里我们也试试
方法很简单, 在上一篇文章介绍过来
用kubectl set image 命令来实现
kubectl set image deployment/<deployment_name> <container_name>=europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:<新版本号>
root@k8s-master:~# kubectl set image deployment/bq-api-service-deploy-sample bq-api-service-container=europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.2
deployment.apps/bq-api-service-deploy-sample image updated
更新回1.1.2 版本
root@k8s-master:~# kubectl get deploy -o wide --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
bq-api-service-deploy-sample 5/5 5 5 5h53m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.2 app=bq-api-service app=bq-api-service,author=Jason
检查rs
root@k8s-master:~# kubectl get rs -o wide -l app=bq-api-service
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
bq-api-service-deploy-sample-7bff8fbc4b 0 0 0 111m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.3 app=bq-api-service,pod-template-hash=7bff8fbc4b
bq-api-service-deploy-sample-8d49d9845 5 5 5 119m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.2 app=bq-api-service,pod-template-hash=8d49d9845
bq-api-service-deploy-sample-9f8d9c988 0 0 0 5h53m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1 app=bq-api-service,pod-template-hash=9f8d9c988
更新回之前的版本, 与一般的更新不同, 因为之前已经有1个RS 是for image 1.1.2的所以这次k8s 重用了之前的rs而并没有增加1个
查看deployment event
kubectl describe deployment bq-api-service-deploy-sample
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 12m (x2 over 131m) deployment-controller Scaled up replica set bq-api-service-deploy-sample-8d49d9845 to 3Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set bq-api-service-deploy-sample-8d49d9845 to 2Normal ScalingReplicaSet 12m deployment-controller Scaled down replica set bq-api-service-deploy-sample-7bff8fbc4b to 4Normal ScalingReplicaSet 12m deployment-controller Scaled down replica set bq-api-service-deploy-sample-7bff8fbc4b to 3Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set bq-api-service-deploy-sample-8d49d9845 to 4Normal ScalingReplicaSet 12m deployment-controller Scaled down replica set bq-api-service-deploy-sample-7bff8fbc4b to 2Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set bq-api-service-deploy-sample-8d49d9845 to 5Normal ScalingReplicaSet 12m deployment-controller Scaled down replica set bq-api-service-deploy-sample-7bff8fbc4b to 1Normal ScalingReplicaSet 12m deployment-controller Scaled down replica set bq-api-service-deploy-sample-7bff8fbc4b to 0
可以看到回滚的实现就是无非把1.1.2的rs 里的pod副本逐渐增加到5, 而1.1.3 rs的pod副本从5 减少到0
查看revisions
root@k8s-master:~# kubectl rollout history deployment/bq-api-service-deploy-sample
deployment.apps/bq-api-service-deploy-sample
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
并我预想中的 1, 2,3 变成 1,2,3,4 而是把2删除了
用恢复备份的方法来回到1.1.1 版本
上面的方法其实有限制的, 前提就是 1.1.2的镜像还在server or GAR里存在
而用恢复备份的方法并没有限制
命令:
kubectl rollout undo deployment/deployment_name --to-revision=x x就是revisions 数字
如果不提供x 则默认回滚到上1个版本 (本文例子是1.1.3)
执行
root@k8s-master:~# kubectl rollout undo deployment/bq-api-service-deploy-sample --to-revision=1
deployment.apps/bq-api-service-deploy-sample rolled back
执行成功, 而且提示是rolled back
检查deployment
版本已经恢复到1.1.1
root@k8s-master:~# kubectl get deploy -o wide --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
bq-api-service-deploy-sample 5/5 5 5 6h12m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1 app=bq-api-service app=bq-api-service,author=Jason
root@k8s-master:~#
检查rs
同样这种方法也能重用之前的rs (1.1.1 版本)
root@k8s-master:~# kubectl get rs -o wide -l app=bq-api-service
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
bq-api-service-deploy-sample-7bff8fbc4b 0 0 0 131m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.3 app=bq-api-service,pod-template-hash=7bff8fbc4b
bq-api-service-deploy-sample-8d49d9845 0 0 0 138m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.2 app=bq-api-service,pod-template-hash=8d49d9845
bq-api-service-deploy-sample-9f8d9c988 5 5 5 6h13m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1 app=bq-api-service,pod-template-hash=9f8d9c988
root@k8s-master:~#
查看revisions
root@k8s-master:~# kubectl rollout history deployment/bq-api-service-deploy-sample
deployment.apps/bq-api-service-deploy-sample
REVISION CHANGE-CAUSE
3 <none>
4 <none>
5 <none>
变成了 3,4,5 其实就是1变成5
查看deployment event
kubectl describe deployment bq-api-service-deploy-sample
Normal ScalingReplicaSet 2m54s deployment-controller Scaled down replica set bq-api-service-deploy-sample-8d49d9845 to 4Normal ScalingReplicaSet 2m54s deployment-controller Scaled up replica set bq-api-service-deploy-sample-9f8d9c988 to 2Normal ScalingReplicaSet 2m53s deployment-controller Scaled down replica set bq-api-service-deploy-sample-8d49d9845 to 3Normal ScalingReplicaSet 2m53s deployment-controller Scaled up replica set bq-api-service-deploy-sample-9f8d9c988 to 4Normal ScalingReplicaSet 2m53s deployment-controller Scaled down replica set bq-api-service-deploy-sample-8d49d9845 to 2Normal ScalingReplicaSet 2m53s deployment-controller Scaled up replica set bq-api-service-deploy-sample-9f8d9c988 to 5Normal ScalingReplicaSet 2m53s deployment-controller Scaled down replica set bq-api-service-deploy-sample-8d49d9845 to 1Normal ScalingReplicaSet 2m52s deployment-controller Scaled down replica set bq-api-service-deploy-sample-8d49d9845 to 0sh
一样, 1.1.2 的rs pod 副本数量被scale down ->0 , 1.1.1 的rs pod 副本数量 scale up-> 5
相关文章:

K8S - Deployment 的版本回滚
当前状态 先看deployment rootk8s-master:~# kubectl get deploy -o wide --show-labels NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES …...

53 v-bind 和 v-model 的实现和区别
前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…...

VMware-16.0配置虚拟机网络模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络?二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…...

element-ui badge 组件源码分享
今日简单分享 badge 组件的源码实现,主要从以下两个方面: 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途: sub:下标、sup:上标、var 变量 代码如下&am…...
MySQL中日期有关函数
本次记录了获取日期时间的多种方式,还有日期和字符串之间的转换,以及加减日期的操作。 获取时间 # 1.获取当前时间(年月日时分秒格式) select now();# 2.获取当前时间(年月日格式) select curdate();# 3.获取当前时间(时分秒格式) select curtime();# 4.…...

jdbc工具类
jdbc 工具类,具体见下面代码,直接可以用。 /*** version 1.0* descpription: jdbc工具类* date 2024/4/6*/ public class JDBCUtils {private static final String URL "jdbc:mysql://127.0.0.1:3306/mybatis";private static final String …...
Svelte Web 框架介绍
Svelte 是一个用于构建网络应用程序的现代框架,它与其他用户界面框架(如React和Vue)有着本质的不同。Svelte 的核心理念是在构建应用程序时,将大部分工作转移到编译步骤中,而不是在用户的浏览器中运行时处理。这种方法…...

IP地址获取不到的原因是什么?
在数字化时代的今天,互联网已成为我们日常生活和工作中不可或缺的一部分。而IP地址,作为互联网通信的基础,其重要性不言而喻。然而,有时我们可能会遇到IP地址获取不到的问题,这会给我们的网络使用带来诸多不便。那么&a…...

Android APP加固利器:深入了解混淆算法与混淆配置
Android APP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解ÿ…...

蓝桥杯真题Day47 倒计时6天:6道真题+回溯递归问题
[蓝桥杯 2019 省 A] 糖果 题目描述 糖果店的老板一共有M种口味的糖果出售。为了方便描述,我们将M 种口味编号 1∼ M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而是K 颗一包整包出售。 幸好糖果包装上注明了其中 K 颗糖果的口味…...
通过UDP实现参数配置
来讲讲UDP的一种常见应用 我们知道UDP是一种无连接的网络传输协议,在发送数据时指定目标IP及端口就可以将数据发送出去,因此特别适合用作网络设备发现。 我们可以自定义一个通信端口,假设为55555。我们再制定一个协议用于查询目标设备&#x…...

解析Apache Kafka:在大数据体系中的基本概念和核心组件
关联阅读博客文章:探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章:深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章:深度剖析:计算机集群在大数据体系中的关键角色和技术要点 关联阅读博客文章&a…...

独角数卡对接码支付收款教程
1、到码支付后台找到支付配置。2、将上面的复制依次填入,具体看下图,随后点立即添加 商户ID商户PID 商户KEY异步不能为空 商户密钥商户密钥...

vuepress-theme-hope 添加谷歌统计代码
最近做了个网站,从 cloudflare 来看访问量,过去 30 天访问量竟然有 1.32k 给我整懵逼了,我寻思不应该呀,毕竟这个网站内容还在慢慢补充中,也没告诉别人,怎么就这么多访问?搜索了下, cloudflare 还会把爬虫的请求也就算进来,所以数据相对来说就不是很准确 想到了把 Google An…...

LabVIEW太赫兹波扫描成像系统
LabVIEW太赫兹波扫描成像系统 随着科技的不断发展,太赫兹波成像技术因其非电离性、高穿透性和高分辨率等特点,在生物医学、材料质量无损检测以及公共安全等领域得到了广泛的应用。然而,在实际操作中,封闭性较高的信号采集软件限制…...
什么是stable diffusion?
🌟 Stable Diffusion:一种深度学习文本到图像生成模型 🌟 Stable Diffusion是2022年发布的深度学习文本到图像生成模型,主要用于根据文本的描述产生详细图像。它还可以应用于其他任务,如内补绘制、外补绘制࿰…...

KeyguardClockSwitch的父类
KeyguardClockSwitch 定义在KeyguardStatusView中, mClockView findViewById(R.id.keyguard_clock_container);KeyguardClockSwitch的父类为: Class Name: LinearLayout Class Name: KeyguardStatusView Class Name: NotificationPanelView Class Name: Notificat…...
Gradle系列(二):Groovy基础
Gradle系列(二):Groovy基础 本篇文章继续讲下Groovy一些基础的语法。 1:Map map与List的用法很像,只不过值是一个K:V的键值对。 下面是是Groovy中Map的定义: task testMap { def map [‘width’:1280,‘height’:1960] prin…...

PW1503限流芯片:可达3A限流,保障USB电源管理安全高效
在电源管理领域,开关的性能直接关系到设备的稳定性和安全性。今天,我们将详细解析一款备受关注的超低RDS(ON)开关——PW1503。它不仅具有可编程的电流限制功能,还集成了多项保护机制,为各类电子设备提供了高…...

深挖苹果Find My技术,伦茨科技ST17H6x芯片赋予产品功能
苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch,如今的Find My已经不单单可以查找苹果的设备,随着第三方设备的加入,将丰富Find My Network的版图。产…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...