K8S项目发布

蓝绿发布

金丝雀发布(灰度发布)

滚动发布

应用程序升级,面临的最大困难就是新旧业务之间的切换。立项---定稿---需求发布---开发---测试---发布,测试之后上线,再完美也会有问题,为了不让发生的问题影响所有用户,也就产生了上述的三种发布方式。

蓝绿发布:把应用服务集群标记为两个组,蓝组和绿组,先升级蓝组,要把蓝组从负载均衡中移除,绿组继续提供服务

蓝组升级完毕,再把绿组从负载均衡中移除,绿组升级,然后都加入回负载均衡当中去,完成对外服务

这种发布对于硬件资源要求比较高,但是现在有了云计算和微服务,现在的成本也降低下来了

蓝绿发布的特点:

1、一旦出现问题,受到影响的范围很大

2、发布策略较为简单

3、基于现在的云计算技术和微服务,用户是无感知的

4、升级和回滚都比较方便

缺点:

在发布升级的过程中,只有一部分集群在对外提供服务,可能会使集群的负载能力下降,响应变慢,需要注意给这个集群增加负载能力(现在一般来说没有什么特殊需求,都是大半夜开始升级的服务)

在短时间内可能会浪费一定的资源成本

金丝雀发布(灰度发布):

deployment(控制器创建的服务才可以使用这种发布方式)

暂停:发布的过程中,暂时停止,只有一部分的pod先升级

其他的pod还是处于老的版本。只有一部分用户可以访问新的版本,绝大多数用户还是在老版本。确定无问题之后,再把剩下的老版本,升级成新的版本,把暂停取消,继续发布。如果有问题可以立即回滚,暂停不是回滚,一旦取消暂停只能全部升级完毕之后,再回滚。

复制代码
[root@master01 ~]# kubectl set image deployment nginx2 nginx=nginx:1.24 --record && kubectl rollout pause deployment nginx2 
deployment.apps/nginx2 image updated
deployment.apps/nginx2 paused

[root@master01 ~]# kubectl get pod
NAME                      READY   STATUS              RESTARTS   AGE
nginx2-5fc4444698-nrx5m   1/1     Running             0          37m
nginx2-5fc4444698-vgqwt   1/1     Running             0          37m
nginx2-7d97dbbb8c-jhtxf   0/1     ContainerCreating   0          25s

[root@master01 ~]# kubectl rollout status deployment nginx2 
Waiting for deployment "nginx2" rollout to finish: 1 out of 2 new replicas have been updated...

取消暂停,全部更新 
[root@master01 ~]# kubectl set image deployment nginx2 nginx=nginx:1.24 --record && kubectl rollout pause deployment nginx2 
deployment.apps/nginx2 image updated
deployment.apps/nginx2 paused

[root@master01 ~]# curl -I 192.168.211.10:31000
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 02 Jan 2024 01:49:33 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 11 Apr 2023 01:45:34 GMT
Connection: keep-alive
ETag: "6434bbbe-267"
Accept-Ranges: bytes

所有POD已全部更新为1.24版本

灰度发布:

1、自动化的要求比较,对运维人员的要求比较高

2、方便发现问题,及时解决。影响范围比较小

3、用户无感知,平滑过度,节约资源

4、发布策略比较复杂

5、不易回滚,必须要等到全部发布成功后才能回滚

滚动更新:

deployment默认的就是滚动更新

相关推荐
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS1 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun1 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)1 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang1 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿1 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl1 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、1 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove1 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21