蓝绿发布/灰度发布与Argo Rollouts

蓝绿发布/灰度发布与Argo Rollouts

蓝绿发布:

  • 当前版本 v1 正常运行
  • 将新版本 v2 所有副本全部准备完成后
  • 切换负载均衡器所有流量指向 v2
  • 如果一切正常,则删除 v1,完成更新
  • 如果发生错误,则将所有流量切换回 v1,并停止本次更新。

灰度发布:

  • 当前版本 v1 正常运行
  • 准备新版本 v2 (少量副本),将流量部分(百分比)切至 v2
  • 如果一切正常,则逐步增加流向 v2 版本的流量;直至全部流量切换至 v2,删除 v1 版本。
  • 如果发生错误,则减少流向 v2 版本的流量或停止本次升级;

argo rollout

argo rollout
定义了一种新的资源Rollout,旨在代替 Deployment 功能,通过控制不同版本 replicasets 副本数量来实现策略化更新。

其定义和 Deployment 极为相似,仅区别于strategy字段,可以理解为 Rollout 对 Deployment 的 strategy 功能进行了扩展。

apiVersion: argoproj.io/v1alpha1 # Changed from apps/v1
kind: Rollout # Changed from Deployment
metadata:
  name: rollouts-demo
spec:
  selector:
    matchLabels:
      app: rollouts-demo
  template:
    metadata:
      labels:
        app: rollouts-demo
    spec:
      containers:
        - name: rollouts-demo
          image: argoproj/rollouts-demo:blue
          ports:
            - containerPort: 8080
  strategy:
    canary: # Changed from rollingUpdate or recreate
      steps:
        - setWeight: 20
        - pause: {}

https://argoproj.github.io/argo-rollouts/migrating/#convert-deployment-to-rollout

argo rollout 支持从现有 Deployment 引用定义,以方便快速集成至 Rolllout。

https://argoproj.github.io/argo-rollouts/migrating/#reference-deployment-from-rollout

与 Deployment 相同 Rollout 借用了 kubernetes 原生资源 Service 来完成版本更新。

Service 根据标签选择后端 Pod IPs,并对进入的请求进行负载均衡到 pod。回顾一下 Service 中存在的负载均衡:

  • 如果是基于 iptables 的 Service,service 使用了 iptables-extensions statistic 模块对所有 pod 设置权重。iptables 根据权重进行负载均衡。
  • 如果是基于 ipvs 的 Service,则是默认使用了 ipvs 的 rr 轮询算法进行负载均衡。

在策略设置为蓝绿发布时:

  • 对 Rollout 中 pod 定义进行修改以触发更新
  • Rollout 创建新 Replicaset
  • 在新版本全部准备就绪后更新 Service 将所有流量切换至新 ReplicaSet。

在策略设置为灰度发布时:

  • 在 Rollout 中灰度比例以及灰度调整间隔时间等
  • 对 Rollout 中 pod 定义进行修改以触发更新
  • Rollout 创建新 Replicaset,根据配置设置新旧副本数量比例。此时 Service 后端包含不同比例的副本数量。
  • 按照策略继续执行灰度更新,直至完全更新。

除了上述的策略外,argo rollout 还提供了基于监控反馈的灰度更新等其他辅助功能。

argo rollout 还提供了配置支持在 rollout 过程中进行 preview,即提供 preview service 对新版本进行访问以进行监控采样等工作。

参考:

  • argo-rollouts/examples
  • Argo Rollouts Demo Application

你可能感兴趣的:(蓝绿发布/灰度发布与Argo Rollouts)