网站首页 > 精选教程 正文
分批发布是一种通用的发布方式,但是在Kubernetes集群中,要实现分批发布,需要控制各种状态,维护service流量,以及各种label配置,十分麻烦。阿里云容器服务提供一种基于 CRD 的分批发布方式,大大方便发布流程。
使用kubectl进行分批发布
新集群默认安装了alicloud-application-controller,老集群请先手动安装,安装方式,
kubectl create -f alicloud-application-controller.yml
我们这里以下面这个StatefulSet为例子演示分批发布的流程,
这是一个含有三个实例的nginx 实例,为了暴露此容器,我们使用Service来暴露,Service的Yaml如下
这里通过SLB 暴露nginx 服务。
为了保证用户的Yaml安全性,分批发布需要使用Secret来存储最终的yaml,这里需要将yaml执行一下base64操作,再存储。
这个是StatefulSet的Secret Yaml
下面的为Service的Secret Yaml
分别将上面的两个Secret 创建出来,kubectl create -f xxxxx
?
可以看到两个Secret都已经创建完毕,下面就可以来创建分批发布的 CRD。分批发布的 CRD 格式如下,
?aliyun.batchnum: 代表分几批发布,目前默认是2批
statefulSetSecretName: 表示存储StatefulSet的Secret 名称
serviceSecretName: 表示存储Service的Secret 名称
使用kubectl create -f xxx 创建此CRD分批发布
可以看到,描述资源都已经创建出来了。
可以看到,nginx 的StatefulSet和对应的Service 都已经创建出来,并且curl 是可以直接访问。
下面我们开始分批发布一个新版本的StatefulSet,这里我们新的StatefulSet Yaml 模板如下
可以看到,新老StatefulSet的区别在于,更换了新版本的镜像。
同样,我们需要创建一个Secret 来存储这个新的StatefulSet
然后我们更新刚才创建的 CRD,将statefulSetSecretName改成新的StatefulSet名称。
修改后的CRD Yaml 如下:
我们可以通过event 看到 CRD 的所有事件。同时可以看到,nginx的3个pod,已经有一个 pod发生了改变,变成了最新镜像,同时 curl对应的service,会发现流量已经指向了新的pod。这样用户就可以快速试错了。
下面我们来演示如何快速回滚,如果流量打到新的 pod后发现有问题,需要回滚,那么我们需要编辑CRD,
将Status 的action 置为rollback 就可以快速回滚。
可以看到原来web-2所在的pod已经被回滚到了老镜像,现在curl service 也都是老的服务了。
发布第二批
发布第二批需要在action 置为continue 就可以
可以看到StatefulSet的三个 pod都被更新了。
这个时候就可以确认发布了
置为confirm 就确定了这次发布。
可以看到,所有的确认版本历史都会被记录到secret里面,方便到时候跨版本回滚。
作者:xianlubird
猜你喜欢
- 2024-10-21 如何学习获得高并发的经验? 如何实现高并发 高可用
- 2024-10-21 线上SpringCloud网关调用微服务跨机房了,咋整?
- 2024-10-21 那些你不知道的?——支付宝架构师眼中的高并发架构
- 2024-10-21 实践参考:高并发架构常见方案(推荐收藏)
- 2024-10-21 支付宝架构师眼中的高并发架构 支付宝架构师眼中的高并发架构指什么
- 2024-10-21 kubernetes-9:nginx-ingress容器化
- 2024-10-21 基于K8S私有化交付要注意这几点问题
- 2024-10-21 SAE 场景下,应用流量的负载均衡及路由策略配置实践
- 2024-10-21 论数据中心网络的负载均衡技术 数据中心负荷
- 2024-10-21 架构师眼里的高并发架构 高并发架构图
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)