Canary Deployment 策略使用什么机制?

Which mechanism does Canary Deployment strategy use?

我是 K8s 的新手,遇到过多种部署策略。 我发现金丝雀部署策略的理论有点不清楚。

我了解在 Canary 策略中,整个目标是首先在当前 pod 实例的一个子集上测试新版本,然后,如果成功,则升级其余实例。

我的疑问是关于测试成功后剩余实例的升级:

  1. 升级是否遵循重新创建类型的机制,其中所有 pods 都被杀死并创建新的从而导致停机? (或)
  2. 它是否遵循滚动更新机制,即剩余 pods 一个一个地更新,从而避免任何停机时间? (或)
  3. 是否像 blue/green,我们已经有了一组更新版本的 pods,我们只是交换,因此需要额外的资源? (或)
  4. 它可以按照规范遵循这些机制中的任何一种。

在金丝雀部署策略中,新版本的应用在获得极少量实时流量的情况下逐渐部署到Kubernetes集群中。一部分在线用户正在连接到新版本,而其余用户仍在使用以前的版本。

新版本的一小部分实时流量可以作为对新代码中可能存在的潜在问题的预警。随着我们信心的增强,逐渐增加金丝雀流量,现在有更多用户连接到更新版本。最后,所有的直播流量都去了金丝雀,金丝雀版本就成了新的“生产版本”

使用金丝雀策略的一大优势在于部署问题可以在早期检测到,同时它们仍然只影响所有应用程序用户的一小部分。如果金丝雀出现问题,生产版本仍然存在,所有流量都可以简单地恢复到它。

Canary 版本基于以下假设:

  1. 您的应用程序的多个版本可以同时存在 时间,获取实时路况。
  2. 如果你不使用某种便利贴 会话机制,一些客户可能会在 一个请求和另一个请求中的金丝雀服务器。

如果您想进行金丝雀部署,请考虑 Istio。关注 link 会有所帮助 https://istio.io/latest/blog/2017/0.1-canary/

除了 P Ekambaram 的评论外:

Does the upgrade follow a Recreate type mechanism where all the pods are killed and new ones are created thus resulting in downtime?

不正常。这确实取决于您选择如何设置金丝雀版本。如果你有 10 pods 并且你想测试 20% 的流量,你将添加两个新的 pods 新版本,并终止两个旧的 pods,确保新 pods 与旧 pods 具有相同的标签,以确保它获得流量。通常这将作为第二次部署或类似 Spinnaker 的东西来完成,它管理斜坡 up/down.

Does it follow a rolling update mechanism where the remaining pods are updated one by one thus avoiding any downtime?

同样,这取决于。但通常情况下,是的,您会在部署中增加新版本 pods 的数量并减少旧版本 pods 的数量,同时关注某个指标(例如, 5xx 错误,如果部署是例如 Web 服务)。根据业务和服务的不同,可能是“用新版本检查 20% 的流量,如果一切正常,一次性完成剩下的 80%”

Is it like blue/green, where we already have a set of pods with newer version and we just swap thus requiring additional resources?

Blue/Green 通常拥有一整套 pods 的新版本,并将 DNS 切换到新版本作为“大爆炸”开关。

可以使用加权 DNS 进行 Canary 部署,但由于您无法控制的不同 DNS 缓存层,这并不可靠。

It can follow any one of these mechanisms as per specification.

是的,完全由您(and/or product/service 所有者)决定他们希望如何部署应用程序。