Kubernetes通过滚动更新deployment实现金丝雀发布

news2024/11/15 14:04:07

在这里插入图片描述

如果要使用 Deployment 向用户子集或服务器子集上线版本, 则可以遵循资源管理所描述的金丝雀模式, 创建多个 Deployment,每个版本一个。

所谓金丝雀发布(Canary Release),就是第一个新的 Pod 创建完成后立即暂停更新过程,这时主体部分还是旧的版本。然后再根据用户特征精心筛选出小部分用户的请求路由至新版本的应用程序,并持续观察是否满足期望。确定没问题后再继续完成剩下的滚动更新,否则立即回滚。

滚动更新 Deployment

Deployment 支持自定义控制更新过程中的滚动节奏,如“暂停”或“继续”更新操作。借助 maxSurgemaxUnavailable 属性还能实现更为精巧的控制过程。

Deployment 会在 .spec.strategy.type==RollingUpdate时,采取 滚动更新的方式更新 Pod。你可以指定 maxUnavailablemaxSurge 来控制滚动更新 过程。

最大不可用

.spec.strategy.rollingUpdate.maxUnavailable 是一个可选字段,用来指定 更新过程中不可用的 Pod 的个数上限。该值可以是绝对数字(例如,5),也可以是所需 Pod 的百分比(例如,10%)。百分比值会转换成绝对数并去除小数部分。 如果 .spec.strategy.rollingUpdate.maxSurge 为 0,则此值不能为 0。 默认值为 25%。

例如,当此值设置为 30% 时,滚动更新开始时会立即将旧 ReplicaSet 缩容到期望 Pod 个数的70%。 新 Pod 准备就绪后,可以继续缩容旧有的 ReplicaSet,然后对新的 ReplicaSet 扩容, 确保在更新期间可用的 Pod 总数在任何时候都至少为所需的 Pod 个数的 70%。

最大峰值

.spec.strategy.rollingUpdate.maxSurge 是一个可选字段,用来指定可以创建的超出期望 Pod 个数的 Pod 数量。此值可以是绝对数(例如,5)或所需 Pod 的百分比(例如,10%)。 如果 MaxUnavailable 为 0,则此值不能为 0。百分比值会通过向上取整转换为绝对数。 此字段的默认值为 25%。

例如,当此值为 30% 时,启动滚动更新后,会立即对新的 ReplicaSet 扩容,同时保证新旧 Pod 的总数不超过所需 Pod 总数的 130%。一旦旧 Pod 被杀死,新的 ReplicaSet 可以进一步扩容, 同时确保更新期间的任何时候运行中的 Pod 总数最多为所需 Pod 总数的 130%。

进度期限秒数

.spec.progressDeadlineSeconds 是一个可选字段,用于指定系统在报告 Deployment 进展失败 之前等待 Deployment 取得进展的秒数。 这类报告会在资源状态中体现为 type: Progressingstatus: Falsereason: ProgressDeadlineExceeded。Deployment 控制器将在默认 600 毫秒内持续重试 Deployment。 将来,一旦实现了自动回滚,Deployment 控制器将在探测到这样的条件时立即回滚 Deployment。

如果指定,则此字段值需要大于 .spec.minReadySeconds 取值。

实际操作

通常情况下, Deployment 滚动更新删除一个 v1 Pod 创建一个 v2 Pod 是因为 Deployment maxSurgemaxUnavailable 属性都默认为 1,金丝雀发布中要实现先创建再删除且可用 Pod 总数不低于期望值。这里先创建的 Pod 副本数量取决于其负载能力。将 maxUnavailable 设置为 0:

$ kubectl patch deployments my-app-deployment \
  -p '{"spec": {"strategy": {"rollingUpdate": {"maxSurge": 1, "maxUnavailable": 0}}}}'

开始 Deployment 控制器的更新过程,在修改相应容器的镜像版本后立即暂停更新。这里可以通过设置 maxReadySeconds 属性(新的 Pod 对象创建后至少等待多久才就绪)来为暂停更新预留操作时间,也可以一次在 Shell 中执行两条命令:

$ kubectl set image deployments my-app-deployment myapp=path/to/image:new \
  && kubectl rollout pause deployments my-app-deployment

查看部署状态,创建完一个新版本的 Pod 资源后滚动更新处于暂停状态:

$ kubectl rollout status deployments my-app-deployment

而后通过 Service 或 Ingress 资源及相关路由策略等设定,将一小部分用户流量引导至新的 Pod 进行发布验证。一段时间后确认没有问题,再恢复滚动更新:

$ kubectl rollout resume deoloyments my-app-deployment

如果“金丝雀”遇险,这时候需要恢复滚动更新并立即回滚

$ kubectl rollout resume deoloyments my-app-deployment \
  && kubectl rollout undo deoloyments my-app-deployment

回滚完成后验证 Deployment 管理的 ReplicaSet 控制器对象是否已恢复到指定的历史版本以确保回滚正常。在 kubectl rollout undo 后跟上 --to-revision=N 选项指定历史版本序号即可回滚至历史特定版本。

$ kubectl rollout history deployments my-app-deployment
$ kubectl rollout undo deployments my-app-deployment --to-revision=3

关于更多属性请参考官网:
K8S deployemnt金丝雀部署网页地址

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

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

相关文章

高考落榜,误打误撞学习了软件测试现在月薪30k成为了班上人人羡慕的对象

记得我刚高考结束时,并没有想象中的狂欢,反而是一种处于一种坐立不安的焦虑中,因为那时单纯地认为:这张试卷,将决定我的一生。对于将信仰寄托于高考的学生来说,当网页上高考成绩弹出的一瞬间,世…

数据在内存中的存储--浮点数

那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉---浮点数,来吧,开始整活!⛳️ 一、数据类型家族(浮点数) 家族成员:float,double&#xf…

通过 docker-compose 快速部署 Kafka 保姆级教程

一、概述 Kafka是由Apache基金会开发的分布式流处理平台,采用发布-订阅模式,支持高吞吐量、低延迟的数据传输。主要用于处理实时数据管道、数据存储和数据分析等大数据应用场景。Kafka采用高效的数据压缩算法,可以在集群中存储大量的数据&am…

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

火热六月,百度商业AI技术创新大赛正在如火如荼的进行,百度商业与高校合作展开全国巡回宣讲会,吸引高校学子参与,激发创新思维,为科技发展注入源源不断的新生力量。6月6日,百度商业AI技术创新大赛走进北京大…

CSPM项目管理专业人员能力等级评价各级考试题目由什么构成?

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

智能存储柜的种类和特点分析

近年来随着网络技术的发展和人们对社会发展服务水平的需求不断提高,智能产品越来越普及,生活中也出现了越来越多的智能存储柜,应用于商场、超市、企业、工厂等场景,使用方便、保密性强、可靠性高。 智能存储柜种类非常多&#xff…

TIOBE 6月榜单出炉!AI影响到Python第一的位置?

TIOBE 6月榜单已经发布了,一起来看看这个月编程语言排行榜有什么变化吧! Python第一宝座岌岌可危 在过去的几年中,Python已经5次获得TIOBE指数年度奖项。由于数据科学和人工智能领域的推动,它越来越受欢迎。自 2021 年 10 月起&a…

大模型热潮来袭,AI基础软件深度赋能金融行业数智化升级

近日,由中国金融电子化集团有限公司、南京市建邺区人民政府主办的“2023 中国金融业数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会”在南京盛大举办。九章云极DataCanvas公司副总裁周晓凌受邀出席会议,并发表“大模型时代的银行AI中…

前端必须掌握的HTML知识

前端开发者必须掌握的HTML知识包括: HTML基础语法:HTML标签、属性、值等基础语法。 HTML文档结构:HTML文档的基本结构,包括、、等标签的使用。 HTML元素:常用的HTML元素,如文本元素、图像元素、链接元素、…

【有奖调研】互联网新型社交,华为在找“元服务搭子”,快来集合!

“聊技术无话不谈,一起来吹吹元服务!畅聊你对元服务的想法,说不定,你就能撬动元服务的爆发增长!” 元服务(即原子化服务)是华为“轻量化”服务的新物种,可提供全新的服务和交互方式…

【C++】 STL(上)STL简述、STL容器

文章目录 简述STL容器list链表vector向量deque双端队列map映射表set集合hash_map哈希表 简述 STL是“Standard Template Library”的缩写,中文译为“标准模板库”。STL是C标准库的一部分,位与各个C的头文件中,即他并非以二进制代码的形式提供…

【Linux】解决Linux无法联网的一个小问题

今天使用在虚拟机VMware中使用Linux系统(Centos7)的时候,发现不能联网,找了很多办法也没有解决,甚至重新安装也没有解决,后来想起之前的解决方案。 要在任务管理器中打开,VMware的网络管理。

量子 金融,将改变游戏规则?

光子盒研究院 前言:如今,量子技术早已走出实验室、广泛赋能电力、化学、医学等各个领域;创新赛道上,加速奔跑的量子产业,将带来无限可能。现在,光子盒特开启「量子」专栏,一一解读量子技术将为下…

简易实现无缝切换自动轮播

原理 页面中设置一个父盒子 bannerBox,固定宽高,相当于一个窗口,超出部分隐藏bannerBox 内部设置一个图片盒子 imgBox,横向(或纵向)依次排列图片添加定时器,每隔一段时间,imgBox 向…

解决使用html标签自定义的按钮点击时有背景底色的问题

问题描述 如下图所示,点击按钮的瞬间,元素底部会出现一个背景色 解决方法 在点击产生背景色的元素的css样式上加上以下代码:-webkit-tap-highlight-color: transparent;

《Unix环境高级编程》/bin/sh: ./fixup.awk: Permission denied

我的代码是从http://www.apuebook.com/code3e.html下载的,先是在 使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 在代码顶级目录下,执行make。 发现报错: ./fi…

软件测试-基础

目录 软件测试的生命周期 如何描述bug 定义bug的级别 bug的生命周期 如何发现更多的bug 软件测试的生命周期 软件测试的生命周期包括: 需求分析->测试计划->测试设计,测试开发->测试执行->测试评估 需求分析:测试人员了解需求,分析需求是否完整,是否正确合…

idea git项目错乱显示多个git项目记录

在项目的.idea文件夹下找到vcs.xml 删除无用的mapping,例如上图,删除…/的目录即可

面试官虐我千百遍,我仍待他如初恋,阿里、腾讯、蚂蚁金服Java技术面试及经验总结

能够进一线互联网公司,是大部分程序员奋斗的目标,有很多小伙伴可能因为学历望而止步,其实只要能力够,学历真的不是那么重要! 今天给大家带来ATM(阿里巴巴,腾讯,蚂蚁金服)的Java面试真题&#x…

有效延缓痴呆症:延世大学发现梯度提升机模型能准确预测 BPSD 亚综合征

内容一览:随着人口老龄化程度不断加剧,痴呆症已经成为公共健康问题。目前医学界治疗该病还只能通过药物缓解,尚未发现治愈的有效方法,因此,预防痴呆症尤为紧迫。在这一背景下,延世大学的研究人员开发了多个…