在软件开发和运维的领域中,灰度发布是一种关键的部署策略,用于逐步推送新版本给用户,以减少潜在的风险和影响范围。不同的平台在实现灰度发布时可能存在差异,因为它们需要满足各自的需求和限制。
本文将对灰度发布的不同平台进行全面比对,重点关注 ZadigX、阿里云、Harness、Spinnaker、Argo Rollouts 等主流平台。我们将深入探讨它们的使用条件、实现原理、使用流程,横向差异的比对,旨在帮助大家选择最适合自己的平台。
ZadigX 支持蓝绿、金丝雀、分批次灰度、Istio 发布等发布策略,下面简单介绍 ZadigX 蓝绿发布原理,更多发布策略使用过程参考官方文档[1]。
workload 需要有一个 service 与之对应,并且 workload 的 labels 包含所有 service 的 selector labels
workload 当前只支持 deployment 类型
部署蓝环境,复制当前 workload,设置新的镜像,创建一个 blue service 指向它
蓝环境部署完成,执行用户的验证任务
开始执行蓝绿发布,删除 blue service
将 green service 指向新创建的 workload
删除旧的 workload
发布过程完成或者中断删除蓝环境
界面化配置发布工作流,详细配置参见文档[1]。ZadigX 支持多服务编排蓝绿发布,内置最佳实践,配置简单易上手;结合系统的用户体系、权限管理、项目管理满足企业的个性化诉求。
使用过程
图片
图片
图片
阿里云支持蓝绿发布、分批发布等灰度发布策略,下面以蓝绿发布为例,简单介绍其原理和使用流程,阿里云借助 Istio 来做蓝绿发布,详细过程可参考官方文档[2]。
前提
原理
配置过程
界面化配置流水线,详细配置参见文档[2],对于多个服务的蓝绿发布场景,配置相对繁琐。
执行过程
执行流水线,触发蓝绿发布,通过 Cookie 标访问新版环境进行功能验证,验证没问题,点击「完成」,流量切到新版本;验证有问题则点击「回滚」。
图片
Harness 支持蓝绿发布、滚动发布、金丝雀发布等发布策略,支持 Deployment 、 Statefulset 工作负载,通过 K8s 原生 Service 做流量控制,下面以蓝绿发布为例,简单介绍 Harness 蓝绿发布的执行过程,具体原理可参考官方文档[3]。
图片
图片
第一次部署:
第二次部署:
第三次部署:
界面化配置工作流,详细配置参见文档[3],配置项较多,有一定的学习成本。
执行工作流触发蓝绿过程。
图片
Codefresh 支持蓝绿发布、金丝雀发布,支持 Deployment 工作负载,下面简单介绍 Codefresh 实现蓝绿发过过程,更多实现原理参考官方文档[4]。
在工作流中以 YAML 方式定义服务蓝绿过程的相关配置,详细配置参见文档[4]。
执行 Codefresh 工作流触发蓝绿发布,仅支持单个服务的蓝绿发布。
图片
Spinnaker 支持蓝绿、金丝雀等灰度发布策略,仅支持 ReplicaSet 类型工作负载,下面简单介绍使用 Spinnaker 实现蓝绿发布的过程,具体原理可参考官方文档[5]。
为 ReplicaSet 设置 Annotations <traffic.spinnaker.io/load-balancers: '["service my-service"]'>,Spinnaker 可以自动为其下的 Pod label 添加符合 my-service Selector 的 label。
界面化方式配置工作流,详细配置参见文档[5],配置项较多,有一定的学习成本。
执行过程
Argo Rollouts 支持蓝绿发布、金丝雀发布等发布策略,下面简单介绍使用 Argo Rollouts 做蓝绿发布过程,更多原理和使用流程参考官方文档[6]。
原理
apiVersion: argoproj.io/v1alpha1kind: Rolloutmetadata: name: rollout-bluegreenspec: replicas: 2 revisionHistoryLimit: 2 selector: matchLabels: app: rollout-bluegreen template: metadata: labels: app: rollout-bluegreen spec: containers: - name: rollouts-demo image: argoproj/rollouts-demo:blue imagePullPolicy: Always ports: - containerPort: 8080 strategy: blueGreen: # activeService specifies the service to update with the new template hash at time of promotion. # This field is mandatory for the blueGreen update strategy. activeService: rollout-bluegreen-active # previewService specifies the service to update with the new template hash before promotion. # This allows the preview stack to be reachable without serving production traffic. # This field is optional. previewService: rollout-bluegreen-preview # autoPromotionEnabled disables automated promotion of the new stack by pausing the rollout # immediately before the promotion. If omitted, the default behavior is to promote the new # stack as soon as the ReplicaSet are completely ready/available. # Rollouts can be resumed using: `kubectl argo rollouts promote ROLLOUT` autoPromotionEnabled: false
需要 YAML 方式来定义蓝绿发布过程,详细配置参见文档[6]。
Argo 提供功能简单的 Dashboard,缺少企业级管理能力。
图片
Flagger 支持蓝绿发布、金丝雀等发布策略,下面简单介绍使用 Flagger 实现蓝绿发布过程,具体可参考官方文档[6]。
K8s YAML 方式配置蓝绿发布过程,详细配置参见文档[7]。
Kubectl apply 方式执行,没有提供界面化的方式,缺乏企业级管理能力。
责任编辑:武晓燕 来源: KodeRover K8sZadigX阿里云(责任编辑:娱乐)
全球首次3座全球最大LNG储罐同步升顶 提升我国天然气应急供应能力
中国铁建上半年主要经济指标稳步增长 新签合同额同比增长26.24%