【kubernetes】关于k8s集群的资源发布方式(灰度/滚动发布)

目录

一、常见的发布方式

二、详解kubectl陈述式方式做灰度发布(金丝雀发布)

步骤一:先基于deployment控制器创建pod,然后发布

步骤二:基于命令行灰度发布

步骤三:测试等到版本稳定以后,再完成继续发布

三、滚动发布详解


一、常见的发布方式

  • 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚

特点:对用户无感,是最安全的发布方式,需要两套系统,对资源要求比较高,成本高

  • 灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本

特点:对自动要求比较高,对比起来系统更加稳定发布,如果遇到问题可以减少影响范围

  • 滚动发布:按批次停止老版本实例,启动新版本实例。

特点:节约资源,用户无感,但是部署和回滚的速度慢

三种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。那生产上选择哪种部署方法最合适呢?这取决于哪种方法最适合你的业务和技术需求。

如果你们运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布如果业务对用户依赖很强,建议灰度发布。如果是K8S平台,滚动更新是现成的方案,建议先直接使用。

二、详解kubectl陈述式方式做灰度发布(金丝雀发布)

金丝雀发布(Canary Release)
Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

步骤一:先基于deployment控制器创建pod,然后发布

kubectl -n testapp create deployment deploy-nginx --image=soscscs/myapp:v1 --port=80 --replicas=3
//创建podkubectl -n testapp expose deployment deploy-nginx --name svc-nginx --type NodePort --port=9090 --target-port=80
//首次发布curl 10.96.241.117:9090
//基于clusterip访问curl 192.168.20.15:32295
//基于nodeip:nodeport访问

步骤二:基于命令行灰度发布

kubectl -n testapp set image deployment deploy-nginx myapp=soscscs/myapp:v2 && kubectl -n testapp rollout pause deployment deploy-nginx 
//灰度发布,更新版本为v2,然后停止回滚
//因为deployment的默认回滚策略是滚动更新,那么停止就会在第一波更新的时候  停止回滚//监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
kubectl -n testapp get pod -o wide -w

步骤三:测试等到版本稳定以后,再完成继续发布

kubectl -n testapp expose pod deploy-nginx-7cb95f9469-x8rp2 --name svc-nginx-v2
//基于更新的pod创建一个默认的clusterip类型的svckubectl -n testapp expose pod deploy-nginx-7cb95f9469-x8rp2 --name svc-nginx-nodeport-v2 --type NodePort --port=7070 --target-port=80
//基于更新的pod创建一个默认的nodeport类型的svc//查看最后的更新情况
kubectl -n testapp get pod -o wide -w

kubectl -n testapp rollout resume deployment deploy-nginx
//等待版本稳定的时候  继续更新

三、滚动发布详解

关于滚动发布的参数

deployment控制器更新Pod的方式是 RollingUpdate(滚动更新)
RollingUpdateStrategy(滚动更新策略):  25% max unavailable, 25% max surge

  • Replicas: 3 desired       控制器的期望副本数
  • 25% max surge             滚动更新时允许创建的最大副本数或比例,向上取整。值调的越大,副本更新速度越快。
  • 25% max unavailable       滚动更新时允许销毁的最大副本数或比例,向下取整。值越小,越能保证服务稳定,更新越平滑;

图解 滚动发布的过程 

假设期望副本数是3,那么滚动更新时能够创建的副本数是 3 * 25% = 0.75  再向上取整为 1,能够销毁的副本数向下取整为 0
                   
假设期望副本数是10,10 * 25% = 2.5  向上取整为 3     向上取整为 2
整个滚动更新过程中Pod副本数始终处在 (10-2)<= Pod副本数 <= (10+3)之间

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

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

相关文章

【Go 快速入门】协程 | 通道 | select 多路复用 | sync 包

文章目录 前言协程goroutine 调度使用 goroutine 通道无缓冲通道有缓冲通道单向通道 select 多路复用syncsync.WaitGroupsync.Mutexsync.RWMutexsync.Oncesync.Map 项目代码地址&#xff1a;05-GoroutineChannelSync 前言 Go 1.22 版本于不久前推出&#xff0c;更新的新特性可…

MATLAB中的makeweight函数

W makeweight(dcgain,[freq,mag],hfgain) W makeweight(dcgain,[freq,mag],hfgain,Ts) W makeweight(dcgain,[freq,mag],hfgain,Ts,N) W makeweight(dcgain,wc,hfgain,___) W makeweight(dcgain,wc,hfgain&#xff0c;___)表示增益交叉频率wc。该语法相当于将…

React UI框架Antd 以及 如何按需引入css样式配置

一、react UI框架Antd使用 1.下载模块 npm install antd -S 2.引入antd的样式 import ../node_modules/antd/dist/reset.css; 3.局部使用antd组件 import {Button, Calendar} from antd; import {PieChartTwoTone} from ant-design/icons; {/* 组件汉化配置 */} import l…

基于springboot+vue的大学城水电管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

禁止safari浏览器网页双击缩放功能

普通浏览器 普通浏览器&#xff0c;只需要增加meta标签禁止缩放功能就行了 <meta content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0;" name"viewport" /> user-scalableno或0 //禁止双指缩放页面initial-scale1.0…

R语言数学建模(一)—— 基础知识

R语言数学建模&#xff08;一&#xff09;—— 基础知识 文章目录 R语言数学建模&#xff08;一&#xff09;—— 基础知识前言一、建模软件1.1 软件建模的基础1.2 模型的分类1.3 不同类型模型间的联系1.4 一些术语1.5 建模如何适应数据分析过程 二、Tidyverse基础2.1 tidyvers…

Android studio 下的APK打包失败问题解决办法

嗨&#xff0c;各位小伙伴们&#xff0c;我是你们的好朋友咕噜铁蛋&#xff01;作为移动应用开发者&#xff0c;在使用Android Studio进行APK打包时&#xff0c;有时候可能会遇到各种问题导致打包失败&#xff0c;这给我们的开发工作带来了一定的挑战。今天&#xff0c;我将和大…

【Scratch画图100例】图48-scratch绘制箭靶 少儿编程 scratch编程画图案例教程 考级比赛画图集训案例

scratch绘制箭靶 一、题目要求 1、准备工作 1. 添加画笔角色 2. 默认背景不变 2、功能实现 1&#xff09;画笔的颜色设为蓝色&#xff0c;画笔的粗细设为3 2&#xff09;绘制如图所示图形&#xff0c;圆的半径自定义&#xff0c;绘制10层&#xff0c;只要图形不超过舞台范…

Elasticsearch使用function_score查询酒店和排序

需求 基于用户地理位置&#xff0c;对酒店做简单的排序&#xff0c;非个性化的推荐。酒店评分包含以下&#xff1a; 酒店类型&#xff08;依赖用户历史订单数据&#xff09;&#xff1a;希望匹配出更加符合用户使用的酒店类型酒店评分&#xff1a;评分高的酒店用户体验感好ge…

Java 1.8 docker 镜像制作

文章目录 一、下载文件二、精简JRE三、Dockerfile四、构建镜像五、容器测试 一、下载文件 glibc 下载地址 glibc-2.35-r1.apk glibc-bin-2.35-r1.apk glibc-i18n-2.35-r1.apk rsa sgerrand.rsa.pub jre 1.8 jre-8u201-linux-x64.tar.gz 二、精简JRE 解压 tar -zxvf jre-8…

如何选择科技公司或者技术团队来开发软件项目呢

最近有客户问我们为什么同样软件项目不同公司报价和工期差异很大&#xff0c;我们给他解释好久才讲清楚&#xff0c;今天整理一下打算写一篇文章来总结一下&#xff0c;有需要开发朋友可以参考&#xff0c;我们下次遇到客户也可以直接转发文章给客户自己看。 我们根据我们自己报…

阿里云ECS服务器vCPU是什么意思?

阿里云ECS服务器vCPU和CPU是什么意思&#xff1f;CPU和vCPU有什么区别&#xff1f;一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定&#xff0c;CPU是中央处理器&#xff0c;一个CPU可以包含若干个物理核&#xff0c;通过超线程HT&#xff08;Hyper-Threading&am…