发布策略选型:ZadigX、阿里云、Argo、Spinnaker、Harness、Codefresh…

发布策略选型:ZadigX、阿里云、Argo、Spinnaker、Harness、Codefresh…

作者:带来 ZadigX的 2023-07-27 08:03:04

云计算

云原生 本文将对灰度发布的不同平台进行全面比对,重点关注 ZadigX、阿里云、Harness、Spinnaker、Argo Rollouts 等主流平台。我们将深入探讨它们的使用条件、实现原理、使用流程,横向差异的比对,旨在帮助大家选择最适合自己的平台。

在软件开发和运维的领域中,灰度发布是一种关键的部署策略,用于逐步推送新版本给用户,以减少潜在的风险和影响范围。不同的平台在实现灰度发布时可能存在差异,因为它们需要满足各自的需求和限制。

本文将对灰度发布的不同平台进行全面比对,重点关注 ZadigX、阿里云、Harness、Spinnaker、Argo Rollouts 等主流平台。我们将深入探讨它们的使用条件、实现原理、使用流程,横向差异的比对,旨在帮助大家选择最适合自己的平台。

实现原理和使用流程

01ZadigX

ZadigX 支持蓝绿、金丝雀、分批次灰度、Istio 发布等发布策略,下面简单介绍 ZadigX 蓝绿发布原理,更多发布策略使用过程参考官方文档[1]。

使用条件

workload 需要有一个 service 与之对应,并且 workload 的 labels 包含所有 service 的 selector labels

workload 当前只支持 deployment 类型

原理

部署蓝环境,复制当前 workload,设置新的镜像,创建一个 blue service 指向它

蓝环境部署完成,执行用户的验证任务

开始执行蓝绿发布,删除 blue service

将 green service 指向新创建的 workload

删除旧的 workload

发布过程完成或者中断删除蓝环境

配置过程

界面化配置发布工作流,详细配置参见文档[1]。ZadigX 支持多服务编排蓝绿发布,内置最佳实践,配置简单易上手;结合系统的用户体系、权限管理、项目管理满足企业的个性化诉求。

使用过程

  • 点击「执行」按钮,选择需要更新的实例及镜像。

图片

图片

  • 工作流按照设置的任务完成执行,执行状态如下图所示。

图片

02阿里云

阿里云支持蓝绿发布、分批发布等灰度发布策略,下面以蓝绿发布为例,简单介绍其原理和使用流程,阿里云借助 Istio 来做蓝绿发布,详细过程可参考官方文档[2]。

前提

  • Service/VirtualService/DestinationRule 同名
  • Deployment 的 labels 内包含有 Service 的全部 selector labels

原理

  • 基于 Istio 及其 VirtualService DestinationRule 资源类型进行流量控制
  • 蓝绿发布开始,基于当前的 Deployment 实例,在蓝环境创建一个新版本的应用 Deployment 实例
  • Service 与多个版本的 Deployment 实例直接通过 LabelSelector 进行关联,让 Istio 可以发现这些服务实例
  • 更新 Istio 的 DestinationRule 资源对象,为不同版本设置子集,再更新 VirtualService 设置流量路由的规则以及权重
  • 人工验证完成后,完成发布将所有流量切流到蓝环境,并且将原有的绿环境实例移除

配置过程

界面化配置流水线,详细配置参见文档[2],对于多个服务的蓝绿发布场景,配置相对繁琐。

执行过程

执行流水线,触发蓝绿发布,通过 Cookie 标访问新版环境进行功能验证,验证没问题,点击「完成」,流量切到新版本;验证有问题则点击「回滚」。

图片

03Harness

Harness 支持蓝绿发布、滚动发布、金丝雀发布等发布策略,支持 Deployment 、 Statefulset 工作负载,通过 K8s 原生 Service 做流量控制,下面以蓝绿发布为例,简单介绍 Harness 蓝绿发布的执行过程,具体原理可参考官方文档[3]。

图片

图片

原理

第一次部署:

  1. Harness 创建两个 services,分别配置 annotationa.线上 service:annotations: harness.io/primary-service: “true”b.测试 service:annotations: harness.io/stage-service: “true”
  2. 蓝环境创建原版本的 pod 集合并配置 annotation:harness.io/color: blue
  3. 测试 service 指向蓝环境 pod,测试没问题后线上 service 也指向蓝环境 pod

第二次部署:

  1. 绿环境中创建新版本 pod,并配置 annotation,harness.io/color: green
  2. 测试 service 指向绿环境新版本 pod,并进行验证,验证通过后
  3. 线上 service 指向绿环境新版本 pod,测试 service 指向蓝环境老版本 pod

第三次部署:

  1. 蓝环境老版本 pod 升级为新版本
  2. 测试 service 指向蓝环境新版本 pod 并且验证,验证通过后
  3. 线上 service 指向蓝环境新版本 pod,测试 service 指向绿环境

配置过程

界面化配置工作流,详细配置参见文档[3],配置项较多,有一定的学习成本。

执行过程

执行工作流触发蓝绿过程。

图片

04Codefresh

Codefresh 支持蓝绿发布、金丝雀发布,支持 Deployment 工作负载,下面简单介绍 Codefresh 实现蓝绿发过过程,更多实现原理参考官方文档[4]。

原理

  1. 部署新版本
  2. 等待 HEALTH_SECONDS 时间,任务对新版本 pod 做一些健康检查,也可以手工做一些检查
  3. 超过等待时间,没有任何错误,切换流量到新版本
  4. 如果有报错,回滚到之前版本

配置过程

在工作流中以 YAML 方式定义服务蓝绿过程的相关配置,详细配置参见文档[4]。

执行过程

执行 Codefresh 工作流触发蓝绿发布,仅支持单个服务的蓝绿发布。

图片

05Spinnaker

Spinnaker 支持蓝绿、金丝雀等灰度发布策略,仅支持 ReplicaSet 类型工作负载,下面简单介绍使用 Spinnaker 实现蓝绿发布的过程,具体原理可参考官方文档[5]。

原理

为 ReplicaSet 设置 Annotations <traffic.spinnaker.io/load-balancers: ‘[“service my-service”]’>,Spinnaker 可以自动为其下的 Pod label 添加符合 my-service Selector 的 label。

配置过程

界面化方式配置工作流,详细配置参见文档[5],配置项较多,有一定的学习成本。

执行过程

  1. 创建新版本镜像的 ReplicaSet,部署到蓝环境
  2. Spinnaker 根据 Annotations 将新版本的 ReplicaSet 绑定到指定 Service 上
  3. 测试完成后通过 Disable Stage 下线原版本的 ReplicaSet

06Argo Rollouts

Argo Rollouts 支持蓝绿发布、金丝雀发布等发布策略,下面简单介绍使用 Argo Rollouts 做蓝绿发布过程,更多原理和使用流程参考官方文档[6]。

原理

  • 使用 Rollout  CRD 取代 Deployment 并在其原有能力基础上支持了多种发布策略
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollout-bluegreen
spec:
  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,缺少企业级管理能力。

图片

07Fluxcd / Flagger

Flagger 支持蓝绿发布、金丝雀等发布策略,下面简单介绍使用 Flagger 实现蓝绿发布过程,具体可参考官方文档[6]。

原理

  1. 使用其实现的 Canary 类型 CRD 管理 Deployment 从而支持了多种发布策略
  2. 引导创建服务:在启动时,Flagger 会创建三个 ClusterIP Service(app-primary,app-canary,app)以及一个名为 app-primary 的蓝版本 deployment
  3. 检测新版本:当 Flagger 检测到新版本时,它会扩展绿色版本并运行一致性测试
  4. 执行一致性测试:一致性测试应针对 app-canary ClusterIP 服务进行,以访问绿色版本
  5. 开始负载测试:如果一致性测试通过,Flagger 会开始负载测试,并使用自定义的 Prometheus 查询来验证测试结果
  6. 分析负载测试:如果负载测试分析成功,Flagger 会将新版本升级为 app-primary,并缩减绿色版本

配置过程

K8s YAML 方式配置蓝绿发布过程,详细配置参见文档[7]。

使用过程

Kubectl apply 方式执行,没有提供界面化的方式,缺乏企业级管理能力。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/235081.html<

(0)
管理的头像管理
上一篇2025-04-21 09:33
下一篇 2025-04-21 09:34

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注