kubernetes - 如何使用 HPA 实现蓝绿部署?

标签 kubernetes

我有两个彩色轨道,我在其中部署了两个不同版本的 web 应用程序 (nginx+php-fpm),这些轨道可通过称为 live 和 next 的服务使用。

经典的方式是部署Web应用程序的新版本接下来,检查后,通过切换他们的服务它释放到现场。

到现在为止还挺好。

考虑使用 HPA 进行自动缩放:
在发布之前,我必须在实时 pod 数量旁边进行预缩放,以防止切换后负载过重。

这里的问题是 HPA cpu 负载测量的性质。在最坏的情况下,自动配置器将立即缩减的预分频的轨迹,计算CPU负载从明年到来的原因。

我发现的另一个问题是使用保活连接,这使得推出新的 pods 非常努力地生活在没有杀害老荚。

如何解决问题?

最佳答案

我们有一些部署策略(还有更多,但我将指出最常见的)。

1) 滚动更新 - 我们只需要一次部署。它会将具有新内容的 pod 添加到当前部署并同时终止旧版本的 pod。有一段时间部署将包含新旧版本的混合。

2) 蓝绿部署 - 这是最安全的策略,建议用于生产工作负载。我们需要有两个部署共存,即 v1 和 v2。在大多数情况下,旧部署正在耗尽(关闭旧部署的所有连接/ session )并将所有新 session /连接重定向到新部署。通常,这两个部署都作为生产和阶段保持一段时间。

3) 金丝雀部署 - 最难的。在这里,您还需要至少同时运行两个部署。一些用户将连接到旧应用程序,其他用户将被重定向到新应用程序。它可以通过负载平衡/代理层配置来实现。在这种情况下,不允许使用 HPA,因为我们同时使用两个部署,并且每个部署都有自己独立的自动缩放器。

Like @Mamuz pointed in comment Blue-Green Strategy without switch on service level sounds much better in this case than rolling-update.

Another option which might be useful in this scenario is Blue-Green Deployment with ISTIO using Traffic Shifting. In this option you could divide traffic as request i.e. from 100-0, 80-20, 60-40, 20-80 to 0-100%



this 中描述了逐步使用 ISTIO 和 HPA文章。
您可以阅读交通管理 here .
Istio 和 K8s 示例 here .

关于kubernetes - 如何使用 HPA 实现蓝绿部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308346/

相关文章:

kubernetes - 通过Kubernetes API获取docker image LABELS

nginx - 单个 NGINX-Ingress Controller ,用于在单独命名空间中具有资源的子域

curl - 通过rest api创建k8s key 时出错

go - 如何在运行时使用应用程序主机和端口

mongodb - Kubernetes MongoDB 自动缩放

go - 多个副本访问 kubernetes 中的缓存

node.js - 用于连接到 NATS 事件总线的 Kubernetes 部署配置

nginx - nginx-ingress适用于/,但不适用于子路径

docker - 在centos7上安装Kubernetes

kubernetes - 具有自定义数据库的Kubernetes