【kubernetes】K8S常见的发布方式

一、K8S常见的发布方式

蓝绿发布

两套环境交替升级,旧版本保留一定时间便于回滚

优点:对用户无感,是最安全的发布方式,业务稳定

缺点:需要两套系统,对资源要求比较高,成本特别高

灰度发布(金丝雀发布)

根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本

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

滚动发布

按批次停止老版本实例,启动新版本实例。

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

三种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。如果运维自动化能力储备不够,建议蓝绿发布;如果业务对用户依赖很强,建议灰度发布。如果是K8S平台,滚动更新是现成的方案,建议先直接使用

二、滚动发布

滚动升级方式:

kubectl create -n xy101 deployment test01 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment test01 --name=svc-test1 --type=NodePort --port=8080 --target-port=80
#创建资源和service
kubectl describe -n xy101 deployments.apps test01
 
kubectl set image -n xy101 deployment test01 myapp=soscscs/myapp:v2

三、蓝绿发布

蓝绿升级方式:
通过切换负载均衡的流量来实现业务的切换

kubectl create -n xy101 deployment test1-v1 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment test1-v1 --name=svc-test1 --port=8080 --target-port=80 --type=NodePort
kubectl create -n xy101 deployment test1-v2 --image=soscscs/myapp:v2 --port=80 --replicas=3
deployment.apps/test1-v2 created

四、灰度发布/金丝雀发布

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

方法一

kubectl create -n xy101 deployment myapp-v1 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment myapp-v --name=svc-myapp --port=8080 --target-port=80 --type=NodePort
kubectl set image -n xy101 deployment myapp-v1 myapp=soscscs/myapp:v2 && kubectl rollout pause deployment myapp-v1 -n xy101   #kubectl rollout pause deployment myapp-v1 -n xy101 执行完前面的就暂停
 
kubectl get -n xy101 pods -o wide -w   #监控状态
 
kubectl rollout status -n xy101 deployment myapp-v1   #观察更新状态

方法二

此时v1有3个副本,v2有一个副本

相关推荐
魔道不误砍柴功17 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_23417 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨20 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
南猿北者3 小时前
docker容器
docker·容器
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx