如何使用HPA实施蓝绿部署?

问题描述 投票:3回答:1

我有两个彩色曲目,我部署了两个不同版本的webapp(nginx + php-fpm),这些曲目可以通过服务获得,称为live和next。

经典的方法是将新版本的webapp部署到下一个,经过检查,通过切换服务将其发布到实时。

到现在为止还挺好。

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

这里的问题是HPA CPU负载测量的性质。在最坏的情况下,自动调节器会立即缩小预分频轨道的尺寸,从而计算来自下一个的cpu负载。

我发现的另一个问题是使用keepalive连接,这使得释放新的pod非常坚硬而不会杀死旧的pod。

如何解决问题?

kubernetes
1个回答
0
投票

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

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

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

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

就像@Mamuz在评论中指出的那样,在没有切换服务级别的情况下,Blue-Green策略听起来比滚动更新更好。

在这种情况下可能有用的另一个选项是使用流量转移的ISTIO进行蓝绿色部署。在此选项中,您可以将流量分为请求,即从100-0,80-20,60-40,20-80到0-100%

this文章中描述了逐步使用ISTIO和HPA。 您可以阅读有关交通管理here的信息。 Istio和K8s here的例子。

© www.soinside.com 2019 - 2024. All rights reserved.