在K8S中,如何实现金色雀发布(灰度发布)?蓝绿发布?

在kubernetes中,可以通过不同的策略来实现金丝雀发布和蓝绿发布。以下是两种发布方式在K8S中基本实现方法:

金丝雀发布

1. 基于Deployment
  • 创建一个Deployment对象用于运行现有应用版本(稳定版本)。
  • 修改Deployment的副本集规则(replicas),增加一部分副本数,并指定新版本镜像。
  • 使用kubectl set image命令更新部分Pod至新版本,或者在Deployment YAML文件中定义多个版本的Pod模板并通过标签选择器(label selectors)及权重(weight)分配流量。
  • 也可以结合k8s的Rollout特性,设置maxUnavailable参数来保证总是有一定数量的旧版本Pod在线,然后逐渐替换为新版本。
2. 使用istio或envoy代理
  • 如果集群中部署了服务网格(如Istio),则可以通过配置VirtualService和DestinationRule来实现更精细的流量路由。
    • 在VirtualService中配置路由规则,将一小部分流量(如10%)导向新版本的Pod。
    • 随着验证新版本的稳定性和性能,逐渐调整流量比例直至所有流量都流向新版本。

蓝绿发布

蓝绿发布是指同时运行两个独立的环境(如:“蓝”环境代表旧版本,“绿”环境代表新版本。在新版本验证无误后,一次性将所有流量切换到新版本。)

1. 独立的Deployment
  • 先创建一个Deployment运行当前的稳定版本(蓝)。
  • 新版本准备就绪后,创建另一个Deployment(绿),但此时并不向其发送流量。
  • 使用K8s Service或Ingress资源,初始时将所有流量指向“蓝”Deployment。
  • 测试“绿”Deployment,验证无误后,更改Service或Ingress的配置,将所有流量从“蓝”切换到“绿”。
  • 若新版本验证失败,可迅速将流量重新切换回“蓝”Deployment。
2. 借助kubernetes中的网络策略和服务发现机制
  • 通过改变Service的selector指向新版本的Pod标签,或者使用Ingress Controller提供的路由规则调整流量分配。
  • 当确定新版本正常工作后,停用旧版本的Deployment,释放其资源。

综上所述:金丝雀发布侧重于逐步且可控的将新版本引入生产环境,而蓝绿发布则是平行运行两个版本,通过快速切换整体流量的方式来完成发布。这两种方式都可以配合K8S的原生功能以及其他工具如Istio等实现复杂的流量管理和发布策略。

Kubernetes Ingress-Nginx是一个用于管理Kubernetes集群中的Ingress资源的工具。它支持使用Ingress Annotations来实现不同场景下的灰度发布和测试。其中,Nginx Annotations支持基于Cookie的切分流量来实现灰度发布。具体实现方式是通过判断用户请求中的Cookie是否存在灰度标识Cookie来确定是否为灰度用户,从而决定是否返回灰度版本的服务。 在配置中,可以使用以下Annotations来实现灰度发布: - `nginx.ingress.kubernetes.io/canary`:可选值为true/false,表示是否开启灰度功能。 - `nginx.ingress.kubernetes.io/canary-by-cookie`:灰度发布Cookie的键。当键的值等于"always"时,灰度触发生效;其他值则不会走灰度环境。 例如,如果请求的Cookie中包含名为"vip_user"的键,并且值为"always",则会生效灰度配置,访问灰度版本的服务。 要实际执行灰度发布配置,可以使用以下命令: ``` kubectl apply -f ingress-gray.yaml ``` 如果想查看服务并获取Ingress的外部端口,可以使用以下命令: ``` kubectl -n ingress-nginx get service ``` 这将显示Ingress-Nginx控制器的服务信息,包括集群IP、外部IP和端口等。 #### 引用[.reference_title] - *1* [【云原生 | Kubernetes 实战】20、K8s Ingress 实现业务灰度发布](https://blog.csdn.net/weixin_46560589/article/details/128505651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【Kubernetes】第十篇 - 灰度发布的介绍与实现](https://blog.csdn.net/ABAP_Brave/article/details/129220116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值