24|生产稳定的秘密武器:如何实施蓝绿发布?
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了如何使用蓝绿发布来稳定生产环境,并重点介绍了在GitOps工作流中实施蓝绿发布的方法。通过示例详细介绍了手动实施蓝绿发布的步骤,包括创建Deployment和Service、Ingress策略、访问蓝色环境、部署绿色环境、切换到绿色环境等。此外,还介绍了如何通过Argo Rollout工具来自动化蓝绿发布的过程。读者可以了解蓝绿发布的核心思想和实际操作步骤,以及如何利用工具来简化和自动化发布过程,从而提高生产环境的稳定性和可靠性。文章还介绍了Argo Rollout的工作原理,帮助读者深入理解自动化发布的实现方式。文章还提出了两个思考题,引发读者思考和讨论。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- 争光 Alan我理解rollout就是给deployment做了增强,增加了一种新版本创建时老版本保留的能力 我的几个疑惑 1. 一般业务会有前段,后端,数据库,微服务更多组件,这样的应用如何进行蓝绿?rollout可以对多个deployment做蓝绿吗? 2. 新老版本共存的情况下,数据库是同一个,数据库新老版本不兼容如何处理?
作者回复: 这两个问题都非常好。 首先文章演示的蓝绿发布实际上是南北流量的蓝绿,微服务内部的东西流量灰度需要借助 istio 服务网格来实现,当业务内部发起服务间调用时,透传灰度标识,这样才能够实现全链路的灰度。 其次数据库的灰度更复杂一些,一般的实践是多实例或者扩展 istio 协议。
2023-03-14归属地:上海4 - zangchao收获很多,很感谢老师,正好最近在做服务迁移K8s,需要实现服务的灰度发布、蓝绿发布等。想问下老师当前在K8s实现灰度发布有哪些开源库选择,Argo Rollout是否为实现K8s环境下灰度发布的最优选择?之前我们用Istio做过,最近准备放弃Istio了
作者回复: Argo Rollout 是一个不错的选择,比较轻量。此外,Netflix 开源的 Spinnaker 也可以做灰度发布,不过比较重。 如果你的业务有很多个微服务,在不侵入业务的情况下,东西流量(微服务和微服务之间的调用)的灰度还是需要借助 Service Mesh 的。
2023-02-01归属地:天津22 - BertGeek请问老师,几个问题: 阿里云ack 集群,Argo Rollout实现蓝绿发布 1. 因为deployment 改为了 Rollout,导致ack 的无状态页面无法看到pod 容器,只能在控制台容器组中看到。 2. Argo Rollout 是否可以监测镜像变化,自动发布新版本 3. Argocd + Rollout ,如何与 Kustomize 集成。
作者回复: 1. 正常现象,你可以用 Lens 一类的 UI 工具来查看 2. Rollout 似乎不能支持这种用法 3. 查看这个文档:https://github.com/argoproj/argo-rollouts/blob/master/docs/features/kustomize.md
2023-02-09归属地:上海1 - 林龍有个疑问,蓝绿发布这里案例是通过修改ingress的Deployment中的sevice修改对应的应用。自动化构建的话是通过引入Argo Rollout,请问这个自动化构建时修改Deployment的images有什么区别,它也是会通过ReplicaSet创建新的pod,同时也是新的pod创建成功后才会慢慢销毁旧的pod
作者回复: 蓝绿发布在升级过程会保留老的环境,核心思想冗余。
2023-02-01归属地:广东1 - Da Vinci启动了dashboard,但是获取不到rollout,看stdoutput,上面报x509: “Argo CD” certificate is not trusted,这是什么原因啊
作者回复: 我没有遇到过,不过你可以尝试看一下这个 issues:https://github.com/argoproj/argo-cd/issues/6048
2023-05-08归属地:广东 - 托瓦斯克一🎋要使用 Rollout 对象的 `autoPromotionEnabled` 参数和 Argo Rollout kubectl 插件来实现手动控制蓝绿发布,您可以按照以下步骤进行操作: 1. 确保已安装 Argo Rollout kubectl 插件。您可以参考 Argo Rollout 文档中的安装指南来安装插件:https://argoproj.github.io/argo-rollouts/installation/ 2. 创建一个 Rollout 对象,并设置 `autoPromotionEnabled` 参数为 `false`,以禁用自动推进(auto-promotion)功能。示例配置如下: ```yaml apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: my-rollout spec: strategy: blueGreen: autoPromotionEnabled: false # 其他配置项... ``` 在上面的配置中,我们将 `autoPromotionEnabled` 设置为 `false`,以禁用自动推进功能。 3. 使用 `kubectl` 命令创建或更新 Rollout 对象: ```shell kubectl apply -f rollout.yaml ``` 确保将 `rollout.yaml` 替换为您实际的配置文件路径。 4. 使用 Argo Rollout kubectl 插件来手动控制蓝绿发布过程。您可以使用以下命令列出 Rollout 对象的可用操作: ```shell kubectl argo rollouts list ``` 此命令将显示可用的 Rollout 对象及其状态。 5. 执行蓝绿发布的步骤。您可以使用以下命令来推进蓝绿发布的不同阶段: ```shell kubectl argo rollouts promote my-rollout ``` 这将推进 Rollout 对象到下一个可用的蓝绿发布阶段。 ```shell kubectl argo rollouts abort my-rollout ``` 这将中止当前的蓝绿发布过程。 ```shell kubectl argo rollouts set image my-rollout my-container=my-image:tag ``` 这将更新 Rollout 对象中的容器镜像版本。 通过使用这些命令,您可以手动控制蓝绿发布的不同阶段和操作,而不依赖于 `autoPromotionEnabled` 参数的自动推进功能。2023-10-21归属地:广东
- ghostwritten1. 什么是蓝绿发布? 蓝绿发布呢?蓝绿发布核心思想是:为应用提供两套环境,并且可以很方便地对它们进行流量切换。在一次实际发布过程中,新版本的应用将以“绿色”环境部署到生产环境中,但在流量切换之前它并不接收外部流量。当我们完成“绿色”环境的测试之后,可以通过流量切换的方式让“绿色”环境接收外部请求,而旧的“蓝色”环境并不会立即销毁,而是作为灾备来使用。一旦发布过程产生故障,我们就可以将流量立即切换到旧的“蓝色”环境下。 2. 手动蓝绿发布 部署两套环境,镜像tag 分别为blue、green,切换操作其实是修改ingress的 service: name: blue-service # 改为green-service 这种操作 Ingress 策略不利于将蓝绿发布和 GitOps 流水线进行整合。 3. 蓝绿发布自动化 3.1 创建命名空间 kubectl create namespace argo-rollouts 3.2 安装 argo-rollouts kubectl apply -n argo-rollouts -f https://ghproxy.com/https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml 3.3 等待 kubectl wait --for=condition=Ready pods --all -n argo-rollouts --timeout=300s 3.4 创建 Rollout 对象——blue-green-rollout.yaml 重点理解:strategy 字段是用来定义部署策略的。其中,autoPromotionEnabled 字段表示自动实施蓝绿发布,activeService 用来关联蓝绿发布的 Service,也就是我们在后续要创建的 Service 名称。 3.5 创建 Service 和 Ingress kubectl apply -f blue-green-service.yaml kubectl apply -f blue-green-ingress.yaml 3.6 切换操作对象是Rollouts,是编辑 blue-green-rollout.yaml 文件的 image 字段,将 blue 修改为 green 版本,然后kubectl apply -f blue-green-rollout.yaml 流量切换过程将由 Argo Rollout 自动控制。 3.7 访问 Argo Rollout Dashboard $ brew install argoproj/tap/kubectl-argo-rollouts 检查版本 kubectl argo rollouts version 部署dashboard kubectl argo rollouts dashboard 4. 当我们需要重新回滚到蓝色环境时,Argo Rollout 只需调整蓝色环境的 ReplicaSet 副本数并且修改 Service 的选择器,就可以回滚2023-02-20归属地:北京