带 Hel​​m Chart 的 Blue Green 部署

Jan*_*han 10 blue-green-deployment canary-deployment kubernetes kubernetes-helm

我们可以使用“Helm Charts”部署应用程序

helm install --name the-release  helm/the-service-helm --namespace myns
Run Code Online (Sandbox Code Playgroud)

我们使用冷“滚动升级”部署,

helm upgrade --recreate-pods the-release helm/the-service-helm --namespace myns
Run Code Online (Sandbox Code Playgroud)

有没有办法使用“Helm Charts”来实现“蓝/绿”部署?

Yas*_*sen 18

让我们从定义开始

因为有很多部署策略,让我们从定义开始。

根据Martin Flower 的说法

蓝绿部署方法通过确保您拥有两个尽可能相同的生产环境来实现这一点。在任何时候,其中之一(例如以蓝色为例)处于活动状态。当您准备软件的新版本时,您将在绿色环境中进行最后阶段的测试。一旦软件在绿色环境中工作,您就可以切换路由器,以便所有传入的请求都进入绿色环境——蓝色的现在空闲。

Blue/Green不推荐在 Helm 中使用。但是有变通的解决方案

  • 根据helm issue #3518,不建议使用Helmforblue/greencanarydeployment 。

  • 至少有 3 种基于 Helm 的解决方案,见下文

  • 但是,这种情况有一个 Helm 图表。

Helm 本身(TL;DR:不推荐)

Helm 本身并不适用于这种情况。看他们的解释:

直接支持 helm 中的蓝/绿部署模式 · 问题 #3518 · helm/helm

Helm 在传统包管理器的意义上工作更多,以优雅的方式将图表从一个版本升级到下一个版本(感谢 pod 活跃度/就绪性探测和部署更新策略),就像人们期望的那样apt upgrade工作。与升级工作流的包管理器风格相比,蓝/绿部署是一个非常不同的野兽;blue/green 在工具链中处于更高的级别,因为围绕这些部署的用例需要逐步/逐步退出策略、渐进的流量迁移和回滚。因此,我们认为蓝/绿部署超出了 Helm 的范围,尽管在幕后使用 Helm 的工具(或类似 istio 的类似工具)很可能能够处理该用例。

基于的其他解决方案 Helm

至少有三个基于 top of 的解决方案Helm这里描述和比较:

Booking.com发货

Bookingcom/shipper:Kubernetes 原生多集群 Canary 或使用 Helm 的蓝绿部署

它通过依赖 Helm 并使用 Helm Charts 作为配置部署单元来做到这一点。Shipper 的 Application 对象提供了一个接口,用于为 Chart 指定值,就像 helm 命令行工具一样。Shipper 直接从 ChartMuseum 等 Chart 存储库使用 Charts,并将对象安装到集群本身中。这有一个很好的特性,即可以使用常规 Kubernetes 身份验证和 RBAC 控制来管理对 Shipper API 的访问。

使用 Helm 的 Kubernetes 原生多集群 Canary 或蓝绿部署

伊斯蒂奥

你可以尝试一些像这样的

kubectl create -f <(istioctl kube-inject -f cowsay-v1.yaml) # deploy v1
Run Code Online (Sandbox Code Playgroud)
kubectl create -f <(istioctl kube-inject -f cowsay-v2.yaml) # deploy v1
Run Code Online (Sandbox Code Playgroud)

旗手

有 Flagger 团队编写的指南:Blue/Green Deployments - Flagger 本指南向您展示了如何使用 Flagger 和 Kubernetes 自动执行 Blue/Green 部署

你可以试试 Helm 本身

此外,正如Kamol Hasan推荐的那样,您可以尝试该图表:puneetsaraswat/HelmCharts/blue-green

blue.yml 样本

kubectl create -f <(istioctl kube-inject -f cowsay-v1.yaml) # deploy v1
Run Code Online (Sandbox Code Playgroud)

中等博客文章:使用 Helm Charts 的蓝/绿部署