【K8S】Kubernetes 中滚动发布由浅入深实战

目录

  • 一、Kubernetes中滚动发布的需求背景
    • 1.1 滚动发布
    • 1.2 滚动发布、蓝绿发布、金丝雀发布的区别
  • 二、Kubernetes中实现滚动发布
    • 2.1 定义Kubernetes中的版本
    • 2.2 创建 `Deployment` 资源对象
      • 2.2.1 在 Yaml 中定义 `Deployment` 资源对象
      • 2.2.2 执行命令创建 `Deployment` 资源对象
  • 三、Kubernetes中滚动发布的管理
    • 3.1 查看 `Deployment` 资源对象对应Pod在滚动发布中的状态
      • 3.1.1 查看滚动发布状态
      • 3.1.2 查看滚动发布历史
    • 3.2 版本回退
      • 3.2.1 回滚掉最新的滚动发布
      • 3.2.2 回滚至指定版本
    • 3.3 增加版本说明

一、Kubernetes中滚动发布的需求背景

1.1 滚动发布

  • Kubernetes及其强大的特点之一就是超大规模集群应用的自动化部署,这其中包括了应用的扩容、缩容及其自适应扩缩容(HPA、VPA)。
  • 在滚动发布的过程中,Kubernetes会对要进行升级的应用所属Pod进行逐个的替换,直至将所有的Pod都替换为新版本的Pod。整个过程中新老版本的Pod都处于在线、提供服务的状态。

1.2 滚动发布、蓝绿发布、金丝雀发布的区别

  • 蓝绿发布:蓝绿发布是存在2个系统,一个是正在提供服务的系统,标记为绿色,一个是准备发布的带有新功能的系统,标记为蓝色。蓝色系统用来做发布前的测试,测试过程中发现的任何问题都可以直接在蓝色系统上直接更改,不干扰用户正在使用的系统。蓝色系统经过充分、有效的测试、验证后,被证明可以安全上线后,会将所有的用户切到蓝色系统上。
    在这里插入图片描述

  • 金丝雀发布(灰度发布):金丝雀发布是只有一个系统,对该系统中的应用实例进行逐步替换。例如系统中有100个服务实例,我们可以先替换掉其中的10个实例,然后系统给这10个实例切分流量,通过一段时间的线上流量的测试,如果发现这10个实例在功能及体验上没有任何问题,那我们继续扩大新实例的比例,并给新版本的实例切分更多的流量,直至全部实例替换完成。

在这里插入图片描述

  • 滚动发布:滚动发布只有一个系统,虽然也是逐个替换掉系统中的服务实例,但是新老实例会同时在系统中提供服务,不存在特意的流量切分。不过,在Kubernetes集群中,可以利用标签选择器实现金丝雀发布(灰度发布)的效果。

二、Kubernetes中实现滚动发布

2.1 定义Kubernetes中的版本

  • 我们常说的版本可能就是跟代码挂钩,就是代码或者配置发生变动就产生一个新的版本,Kubernetes中将在Yaml中对Pod的定义定义为一个版本,可参考文章Kubernetes 中 Pod 定义与操作实践快速了解Pod定义。
  • K8S中版本定义范围。我们在Pod模版中定义了Pod使用的镜像及其版本、镜像拉取策略、环境变量参数等。定义Pod的Yaml内容的变化都会产生一个新的版本。对Pod的定义不光是通过创建Pod资源对象直接创建,我们在Deployment 资源对象或者 DaemonSet 资源对象中的 template 字段中定义的Pod 的变化也会导致Pod的版本变化。
  • 版本号。Kubernetes中的版本号一般是对Deployment 资源对象或者 DaemonSet 资源对象中的 template 字段的定义部分进行哈希,计算哈希值,取哈希值作为版本号。

2.2 创建 Deployment 资源对象

2.2.1 在 Yaml 中定义 Deployment 资源对象

Yaml 内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: ngx-depname: ngx-depspec:minReadySeconds: 20replicas: 4selector:matchLabels:app: ngx-deptemplate:metadata:labels:app: ngx-depspec:containers:- image: nginx:1.24-alpinename: nginx

2.2.2 执行命令创建 Deployment 资源对象

在终端窗口中执行命令kubectl apply -f ngx-dep-v1.yaml:

在这里插入图片描述
使用kubectl get podkubectl get deploy 或者 kubectl describe deploy 命令查看创建出的资源对象的状态。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Kubernetes中滚动发布的管理

3.1 查看 Deployment 资源对象对应Pod在滚动发布中的状态

3.1.1 查看滚动发布状态

执行命令 kubectl rollout status deploy ngx-dep ,查看deploy资源名为ngx-dep 的状态:

在这里插入图片描述
终端会不断输出当前滚动发布的进程状态,直接滚动发布完成,完成时该命令结束会输出deployment "xxxxxx" successfully rolled out 的字样。

3.1.2 查看滚动发布历史

执行命令 kubectl rollout history deploy ngx-dep ,查看 deploy资源名为ngx-dep 的滚动发布记录:

在这里插入图片描述

查到滚动发布记录之后,我们可以通过--revision 参数来具体指定某个具体的版本,来查看该发布相对于上一个版本的变更,例如执行 kubectl rollout history deploy --revision=2:

在这里插入图片描述

3.2 版本回退

3.2.1 回滚掉最新的滚动发布

使用 kubectl rollout undo deploy ngx-dep 回滚掉名为 ngx-dep 的 deploy 资源对象最新的滚动发布:

在这里插入图片描述
我们使用kubectl rollout history 命令查看发布记录可以看到多出一个记录4,因为回滚也会产生一个新的发布记录。

在这里插入图片描述

3.2.2 回滚至指定版本

我们使用kubectl rollout history 命令先看下当前有哪些版本可用:

在这里插入图片描述
我们使用kubectl rollout history deploy --revision 命令再看下版本3和版本5的内容:

在这里插入图片描述

可以看到,这2个版本的差别仅在与所使用的Nginx 镜像的版本号不同,现在使用 kubectl rollout history 命令的--to-revision 选项回退到我们指定的版本3(1.24-alpine):

在这里插入图片描述

可以看到提示回滚成功了。我们看下当前最新版本Pod的NGINX的版本号:

在这里插入图片描述
确实是我们预期的1.24-alpine

3.3 增加版本说明

我们需要在Deployment 资源对象的metadata字段下添加annotations 字段,就可以为查询滚动发布记录的CHANGE-CAUSE 处添加对应说明了。此处对文件 ngx-dep-v3.yaml 进行更改如下:

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: ngx-depname: ngx-depannotations:kubernetes.io/change-cause: 升级Nginx的版本到1.27spec:minReadySeconds: 20replicas: 4selector:matchLabels:app: ngx-deptemplate:metadata:labels:app: ngx-depspec:containers:- image: nginx:1.27-alpinename: nginx

然后执行kubectl apply -f ngx-dep-v3.yaml 命令进行升级。然后我们使用kubectl rollout history 命令再来查看版本记录,可以看到我们记录的具体的变更原因了。

在这里插入图片描述

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

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

相关文章

Asp.net core 框架入门

概述 appsettings.json:配置文件,数据库连接字符串配置信息 Program.cs:程序入口文件(里面有个Main方法) Startup.cs:启动配置文件 依赖项:管理项目所依赖的第三方组件的安装,配…

WampServer

开发笔记 推荐链接php无法保存SESSION问题部署SSL时候产生的问题 推荐链接 链接目录 php无法保存SESSION问题 php.ini文件和phpForApache.ini 文件 里面都有 对路径的控制,相关路径问题可能也需要进行修改,打开文件搜索wamp64或wamp 就可以看到了&…

“深入理解RabbitMQ交换机的原理与应用“

深入理解RabbitMQ交换机的原理与应用 引言1. RabbitMQ交换机简介介绍1.1 什么是RabbitMQ?1.1.1 消息中间件的作用1.1.2 RabbitMQ的特点和优势 1.2 RabbitMQ的基本概念1.2.1 队列1.2.2 交换机1.2.3 路由键 1.3 交换机的作用和分类1.3.1 直连交换机(direct…

VS Code Json格式化插件-JSON formatter

🦪整个文件格式化 按快捷键Shift Alt F 🥪仅格式化选择内容 需要选择完整的json段落即:{} 或 [] 括起来的部分,再按快捷键Ctrl K F

社区公益培训系统功能说明

社区公益培训系统功能说明 本系统将用于社区面向居民开展的公益培训课程展示,在线报名,并按班级排课上课,上课时学员要扫码签到,经常旷课的学员将禁止再报名其他课程。 1. 用户注册与登录 - 提供用户注册和登录功能,…

鸿蒙不再兼容安卓,鸿蒙开发薪资高达4w+,程序员是否需转行鸿蒙?

鸿蒙系统的崛起 鸿蒙系统的推出经历了长时间的研发和完善,它是一款自主研发的操作系统,集成了最新的技术和创新理念。该系统具备卓越的安全性、兼容性和扩展性,因此备受关注。最初,鸿蒙系统主要应用于华为手机产品,但…

惬意上手Python —— 装饰器和内置函数

1. Python装饰器 Python中的装饰器是一种特殊类型的函数,它允许用户在不修改原函数代码的情况下,增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实,可以被赋值给变量、作为参数传递给其他函数或者作为其他…

比较有创意的网站

有创意的网站通常展示了独特的设计、交互或内容。以下是一些备受赞誉的有创意的网站,你可以参考: Awwwards: Awwwards 是一个评选并展示全球最优秀网站的平台。你可以在这里找到很多有创意的网站设计。 Awwwards CSS Design Awards: 类似于Awwwards&…

3d gaussian splatting笔记(paper部分翻译)

本文为3DGS paper的部分翻译。 基于点的𝛼混合和 NeRF 风格的体积渲染本质上共享相同的图像形成模型。 具体来说,颜色 𝐶 由沿射线的体积渲染给出: 其中密度 𝜎、透射率 𝑇 和颜色 c 的样本是沿着射线以…

VSCode插件 —— Cody AI (免费AI助手!)

之前介绍过一款 阿里云免费的AI开发工具——通义灵码 TONGYI Lingma 本文再推荐一个可以极大提高开发前端开发效率的工具 —— Cody AI (Sourcegraph),同样是免费的! 不过,使用Cody AI需要有github 或 Google 、 git…

vue3相比vue2的效率提升

1、静态提升 2、预字符串化 3、缓存事件处理函数 4、Block Tree 5、PatchFlag 一、静态提升 在vue3中的app.vue文件如下: 在服务器中,template中的内容会变异成render渲染函数。 最终编译后的文件: 1.静态节点优化 那么这里为什么是两部分…

内网安全管理系统(保密管理系统)

在当今信息化的时代,企业的内网已经成为其核心资产的重要组成部分。 随着企业的快速发展和信息化程度的提升,内网安全问题日益凸显,如何保障内网的安全和机密信息的保密性,已经成为企业亟待解决的问题。 内网安全管理系统(保密管…

现在的小年轻真的卷得过分了,真是完全不把自己当人啊

现在的小年轻真的卷得过分了,真是完全不把自己当人啊 都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才…

常用电子器件学习——MOS管

MOS管介绍 MOS,是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…

RabbitMQ消息应答与发布

消息应答 RabbitMQ一旦向消费者发送了一个消息,便立即将该消息,标记为删除. 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个很长的任务并仅仅执行了一半就突然挂掉了,在这种情况下,我们将丢失正在处理的消息,后续给消费者发送的消息也就无法接收到了. 为了…

OpenHarmony驱动消息机制管理

驱动消息机制管理 当用户态应用和内核态驱动需要交互时,可以使用HDF框架的消息机制来实现。 消息机制的功能主要有以下两种: 用户态应用发送消息到驱动。 用户态应用接收驱动主动上报事件。 配置管理 HCS(HDF Configuration Source&…

深入分析 Linux 网络丢包问题

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330 所谓丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了。这些被丢弃包的数量&#…

C++进阶:多态(下)

1、多态的原理 多态之所以可以实现,主要是因为虚函数表的存在,虚函数表用于记录虚函数的地址,他是一个函数指针数组,在类中用一个函数指针数组指针来指向数组,子类继承了父类的虚函数表,当有重写的情况发生…

基于SAM的视频标注

在本文中,我们将演示基础模型的应用,例如 Meta 的 Segment Anything 和 YOLOv8,以自动检测、分类和绘制视频中感兴趣对象的蒙版。这是之前指南的后续:使用 Meta 的 Segment Anything 和 YOLOv8 自动分类掩码。在本指南中&#xff…

【RabbitMQ】快速入门及基本使用

一、引言 1、、消息队列 Ⅰ、什么是消息队列? 消息队列是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据…