前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Kubernetes上部署Argo Rollouts和Ambassador进行灰度发布

在Kubernetes上部署Argo Rollouts和Ambassador进行灰度发布

作者头像
CNCF
发布2021-03-15 14:53:37
8860
发布2021-03-15 14:53:37
举报
文章被收录于专栏:CNCF

Ambassador API 网关与 Argo 集成

灰度发布(金丝雀发布/Canary)是一种强大的策略,通过增量地向用户子集发布软件的新版本来降低生产风险。假设你推出了服务的 v1.1 版本,但它有一个 bug。不是立即将它暴露给所有的流量,而是通过将 v1.1 暴露给流量的一个子集(例如 5%)来开始发布过程。随着时间的推移,你的流量逐渐增加到 100%。在此期间,任何暴露的 bug 都仅限于你的用户子集。

虽然理论上很简单,但在实践中使用灰度发布需要将 CI 流水线与持续部署工作流(如 Argo)集成在一起,并使用 API 网关来管理到服务的流量。

AmbassadorAPI 网关

Ambassador 是一个基于 Envoy 代理构建的开源 kubernetes 原生 API 网关和入口控制器。Ambassador 的常见用例包括路由 gRPC 流量、认证和速率限制。虽然 Ambassador 支持标准的 ingress 类,但大多数用户使用 Ambassador mapping 资源。mapping 资源定义了路由并支持大量的属性集,超出了 ingress 支持的标准集。下面是一个 mapping 示例:

代码语言:javascript
复制
apiVersion: getambassador.io/v2
kind:  Mapping
metadata:
  name:  echo
spec:
  prefix: /echo
  rewrite: /echo
  service: echo-stable:80

在 Kubernetes 上进行灰度发布

我们已经在 Argo Rollouts 和 Ambassador 之间建立了一个原生集成(代码)[1]。你现在可以创建一个 Rollout 资源来引用 Ambassador mapping:

代码语言:javascript
复制
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: echo-rollout
  annotations:
spec:
  replicas: 5
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
        - image: hashicorp/http-echo
          args:
            - "-text=VERSION 137"
            - -listen=:8080
          imagePullPolicy: Always
          name: echo-v1
          ports:
            - containerPort: 8080
  strategy:
    canary:
      stableService: echo-stable
      canaryService: echo-canary
      trafficRouting:
        ambassador:
          mapping:
            - echo
      steps:
      - setWeight: 20
      - pause: {duration: 10s}
      - setWeight: 50
      - pause: {duration: 10s}
      - setWeight: 100
      - pause: {duration: 10}

请注意上面粗体部分,它引用了上面定义的名为 echo 的 Ambassador mapping 资源。将这些配置应用到集群将启动 echo-canary 服务,该服务将把 20%的流量路由到 canary,持续 10 秒,然后在 10 秒内提升到 50%,然后再提升到 100%。

动手开始

我们已经发布了一个关于如何使用 Edge Stack 部署 Argo 的教程[2]。目前,本教程依赖于 Argo Rollouts 的 Ambassador 版本。如果你有兴趣跟踪我们将该功能合并到 upstream 的进度,你可以查看这个pull 请求[3]。请试一下,并在Twitter[4]Slack[5]分享你的使用体验!

参考资料

[1]

集成(代码): https://github.com/datawire/argo-rollouts/

[2]

教程: https://www.getambassador.io/docs/latest/argo/

[3]

pull 请求: https://github.com/argoproj/argo-rollouts/pull/1025

[4]

Twitter: https://twitter.com/ambassadorlabs

[5]

Slack: http://a8r.io/Slack

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AmbassadorAPI 网关
  • 在 Kubernetes 上进行灰度发布
  • 动手开始
    • 参考资料
    相关产品与服务
    API 网关
    腾讯云 API 网关(API Gateway)是腾讯云推出的一种 API 托管服务,能提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档