【问题标题】:Does Kubernetes natively support "blue-green"-like deployments?Kubernetes 是否原生支持类似“蓝绿”的部署?
【发布时间】:2021-09-19 09:42:41
【问题描述】:

我有一个单页应用程序。它由运行在具有 2 个副本的 Kubernetes 部署上的 API 服务器提供服务(并与之对话)。我添加了一个 X-API-Version 标头,我的 API 会在每个请求上发送该标头,我的客户端可以与之进行比较,以确定它是否需要通知用户他们的客户端代码已过时。

然而,我面临的一个问题是,当我部署时,我想确保只有 1 个版本的 API 正在运行。我不希望客户端可以在循环中多次刷新,因为它接收不同的 API 版本。

我基本上希望它从运行版本 A 的 2 个副本变为运行版本 A 的 2 个副本,运行版本 B 的 2 个副本。然后在健康检查通过后将流量切换到版本 B,然后拆除旧版本 A。

Kubernetes 是否支持使用RollingDeploy 策略?

【问题讨论】:

    标签: kubernetes blue-green-deployment


    【解决方案1】:

    我最近开始使用 Kubernetes。我的经验是,是的,K8s 开箱即用。如果我有例如两个 Pod 运行并且我执行部署,K8s 将创建两个新 Pod,然后,只有当这两个新鲜 Pod 健康时,K8s 才会终止原来的两个 Pod。

    【讨论】:

    • 是的,但是流量是以“全有还是全无”的方式路由,还是将其发送到两个部署版本?
    • 哦,我明白了。我的理解是,有一个重叠期,流量同时被路由到版本 A 和版本 B,这听起来不是你想要的。虽然不是 100% 确定那部分。
    【解决方案2】:

    对于 Kubernetes 中的蓝绿部署,我建议使用一些第三方解决方案,例如 Argo RolloutsNGINXIstio 等。它们可以让您在应用程序的版本之间分配流量。

    但是,Kubernentes 正在引入 Gateway API,它内置了对 traffic splitting 的支持。

    【讨论】:

      【解决方案3】:

      您要问的并不是真正的蓝/绿部署。如果您在升级期间需要两个或更多 Pod 来运行,由于性能问题,您将得到重叠,其中一些版本 A 的 Pod 响应,而一些来自版本 B。

      您可以对其进行微调,例如,您可以将其配置为一次启动所有新的 pod,并且对于每个从 running->ready 开始的旧 pod 将被删除。如果您的 pod 启动速度很快,或者至少同样快,那么重叠会非常短。

      或者,如果您可以接受临时停机时间,则有一种部署策略可以在推出新 Pod 之前完全停用所有旧 Pod。根据您的服务启动速度,这可能会导致停机时间短或长。

      当然,如果您不介意做一些额外的工作,可以将版本 B 与版本 A 并行部署,并将版本添加到标签集。

      然后,在您的服务中,您确保版本标签是选择器的一部分,并且一旦版本 B 的 pod 运行,您将服务选择器从版本 A 更改为版本 B,它将立即开始使用这些选择器。

      【讨论】:

        猜你喜欢
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        • 2019-01-01
        • 2021-07-18
        • 2022-01-16
        • 2017-07-10
        • 2021-09-18
        相关资源
        最近更新 更多