【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 pod 、 kubectl 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 命令再来查看版本记录,可以看到我们记录的具体的变更原因了。

相关文章:
【K8S】Kubernetes 中滚动发布由浅入深实战
目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…...
MSP430仿真器使用常见问题
一、 主要是驱动安装问题 有用户反应驱动安装不上,按照用户手册操作一直不能安装成功。 可以尝试如下步骤进行安装。 1. 双击设备管理器中无法安装或者提示有错误的430仿真器设备 选择驱动程序——更新驱动程序 选择手动安装 选择从电脑设备驱动列表中安装 弹出下…...
芯驰E3340软件编译以及更新步骤
打开已有工程File->Open Solution: 东南项目:e3340\boards\e3_324_ref_display\proj\jetour-t1n-fl3\sf\SES 编译:build->build sf 增加头文件和宏定义: 编译完成sf后,进行编译bootloader 东南项目:e3340\boa…...
HCIA——18实验:NAT
学习目标: NAT 学习内容: NAT 1.要求——基本的 2.模型 3.IP分配、规划、优化 1)思路 R2为ISP路由器,其上只能配置ip地址,不得冉进行其他的任何配置—ospf配置 认证 、汇总、沉默接口、加快收敛、缺省路由 PC1-PC2…...
在VBA中使用SQL
VBA在处理大量的数据/计算时如果使用常规方法会比较慢,因此需要对其进行性能优化以提高运行速度,一般的方法是数组计算或者sql计算。SQL计算的速度最快,限制也是最多的,数组速度其次,灵活性也更高 如果要在vba中调用sql处理数据基本可以遵循一个套路,只要修改其中的SQL语…...
vue项目中使用Element多个Form表单同时验证
一、项目需求 在项目中一个页面中需要实现多个Form表单,并在页面提交时需要对多个Form表单进行校验,多个表单都校验成功时才能提交。 二、实现效果 三、多个表单验证 注意项:多个form表单,每个表单上都设置单独的model和ref&am…...
自然语言处理--概率最大中文分词
自然语言处理附加作业--概率最大中文分词 一、理论描述 中文分词是指将中文句子或文本按照语义和语法规则进行切分成词语的过程。在中文语言中,词语之间没有明显的空格或标点符号来分隔,因此需要通过分词工具或算法来实现对中文文本的分词处理。分词的…...
k8s-基础知识(Service,NodePort,CusterIP,NameSpace,资源限制)
Service 它提供了服务程序和外部的各种组件通信的能力: 1 Service 有固定的IP和端口 2 Service 背后是pod在工作 Kubernetes 会给Service分配一个静态 IP 地址,Service自动管理、维护后面动态变化的 Pod 集合,当客户端访问 Serviceÿ…...
【腾讯云】您使用的腾讯云服务存在违规信息,请尽快处理
收到【腾讯云】您使用的腾讯云服务存在违规信息,请尽快处理,如何解决?在腾讯云服务器部署网站提示网站有违规信息如何处理?腾讯云百科txybk告诉各位站长,在腾讯网址安全中心申诉,申诉通过后截图上传给腾讯云…...
深度学习 Day27——J6ResNeXt-50实战解析
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…...
【力扣 50】Pow(x, n) C++题解(数学+递归+快速幂)
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入:x 2.10000, n 3 输出:9.26100 …...
速盾:服务器接入CDN后上传图片失败的解决方案
本文将探讨当服务器接入CDN后,上传图片失败的常见原因,并提供解决方案以解决这些问题。同时,我们还将附上一些相关的问题和解答,让读者更好地理解和应对这些挑战。 随着互联网的持续发展,网站的性能和速度对于用户体验…...
LabVIEW高级CAN通信系统
LabVIEW高级CAN通信系统 在现代卫星通信和数据处理领域,精确的数据管理和控制系统是至关重要的。设计了一个基于LabVIEW的CAN通信系统,它结合了FPGA技术和LabVIEW软件,主要应用于模拟卫星平台的数据交换。这个系统的设计不仅充分体现了FPGA在…...
FastSpeech2——TTS论文阅读
笔记地址:https://flowus.cn/share/1683b50b-1469-4d57-bef0-7631d39ac8f0 【FlowUs 息流】FastSpeech2 论文地址:lFastSpeech 2: Fast and High-Quality End-to-End Text to Speechhttps://arxiv.org/abs/2006.04558 Abstract: tacotron→…...
如何才能拥有比特币 - 01 ?
如何才能拥有BTC 在拥有 BTC 之前我们要先搞明白 BTC到底保存在哪里?我的钱是存在银行卡里的,那我的BTC是存在哪里的呢? BTC到底在哪里? 一句话概括,BTC是存储在BTC地址中,而且地址是公开的,…...
Unity | 渡鸦避难所-8 | URP 中利用 Shader 实现角色受击闪白动画
1. 效果预览 当角色受到攻击时,为了增加游戏的视觉效果和反馈,可以添加粒子等动画,也可以使用 Shader 实现受击闪白动画:受到攻击时变为白色,逐渐恢复为正常颜色 本游戏中设定英雄受击时播放粒子效果,怪物…...
K8S--安装metrics-server,解决error: Metrics API not available问题
原文网址:K8S--安装metrics-server,解决error: Metrics API not available问题-CSDN博客 简介 本文介绍K8S通过安装metrics-server来解决error: Metrics API not available问题的方法。 Metrics Server采用了Kubernetes Metrics API的标准,…...
flume自定义拦截器
要自定义 Flume 拦截器,你需要编写一个实现 org.apache.flume.interceptor.Interceptor 接口的自定义拦截器类。以下是一个简单的示例: import org.apache.flume.Context; import org.apache.flume.Event; import org.apache.flume.interceptor.Interce…...
安卓Spinner文字看不清
Holo主题安卓13的Spinner文字看不清,明明已经解决了,又忘记了。 spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {TextView textV…...
深入浅出hdfs-hadoop基本介绍
一、Hadoop基本介绍 hadoop最开始是起源于Apache Nutch项目,这个是由Doug Cutting开发的开源网络搜索引擎,这个项目刚开始的目标是为了更好的做搜索引擎,后来Google 发表了三篇未来持续影响大数据领域的三架马车论文: Google Fil…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
