【发布时间】:2021-09-13 04:45:22
【问题描述】:
使用 Kubernetes,我们可以控制同时创建多少个 pod(应用程序实例)和新的部署部署。这可以通过使用属性max surge 和max unavailable 来实现。如果我们有数十个应用程序实例,默认配置将推出多个新实例,同时多个实例将终止。
对我们来说最优选的配置是将其更改为 max surge = 1 和 max unavailable = 0(原因 - 实现平滑的 Kafka 重新平衡)。在这种情况下,在特定时间只会启动一个应用程序实例,最多会终止几个实例。
如我所见,如果我们有 max surge = N 和 max unavailable = 0,部署策略如下:
- 第 1 步:N 个新 pod(第一批)开始
- 第 2 步:N 个 pod 终止,N 个新 pod(第二批)开始
- 第 3 步:N 多个 pod 终止(与第 2 步一起,我们可以体验 最多 2N 个终止 pod)和 N 个新 pod(第三批) 开始
- 第四步:同样的逻辑,这里我们可以体验超过2N pod 仍在终止
- 等等……
对于我们的 pod 总数为 30 的微服务,max surge = 1 和 max unavailable = 0,我们最多同时有 3 个终止 pod,max surge = 3 和 max unavailable = 0 - 最多 7 个终止 pod。
是否可以在部署推出期间控制同时终止的 pod 的最大数量?假设我最多希望看到一个 pod 处于终止状态。因此,在 pod 不会完全关闭之前,不会启动新的 pod。
kubectl version:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.10", GitCommit:"62876fc6d93e891aa7fbe19771e6a6c03773b0f7", GitTreeState:"clean", BuildDate:"2020-10-15T01:52:24Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.10", GitCommit:"62876fc6d93e891aa7fbe19771e6a6c03773b0f7", GitTreeState:"clean", BuildDate:"2020-10-15T01:43:56Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
【问题讨论】:
-
如果可能,请包含您的部署 yaml。您使用的是哪个版本的 K8s?
-
将版本发布到我的原始问题中。您是否认为所描述的策略可能取决于部署 yaml 中的其他一些指定参数?
标签: kubernetes deployment kubernetes-pod kubernetes-deployment