【问题标题】:Kubernetes deployment - control the maximum number of simultaneously terminating podsKubernetes 部署 - 控制同时终止的 Pod 的最大数量
【发布时间】:2021-09-13 04:45:22
【问题描述】:

使用 Kubernetes,我们可以控制同时创建多少个 pod(应用程序实例)和新的部署部署。这可以通过使用属性max surgemax unavailable 来实现。如果我们有数十个应用程序实例,默认配置将推出多个新实例,同时多个实例将终止。 对我们来说最优选的配置是将其更改为 max surge = 1max unavailable = 0(原因 - 实现平滑的 Kafka 重新平衡)。在这种情况下,在特定时间只会启动一个应用程序实例,最多会终止几个实例。

如我所见,如果我们有 max surge = Nmax unavailable = 0,部署策略如下:

  • 第 1 步:N 个新 pod(第一批)开始
  • 第 2 步:N 个 pod 终止,N 个新 pod(第二批)开始
  • 第 3 步:N 多个 pod 终止(与第 2 步一起,我们可以体验 最多 2N 个终止 pod)和 N 个新 pod(第三批) 开始
  • 第四步:同样的逻辑,这里我们可以体验超过2N pod 仍在终止
  • 等等……

对于我们的 pod 总数为 30 的微服务,max surge = 1max unavailable = 0,我们最多同时有 3 个终止 pod,max surge = 3max 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


【解决方案1】:

maxUnavailablemaxSurge 绝对是要走的路。你列出的步骤是正确的,它应该是这样工作的。

您遇到的很可能是一个错误。 GitHub (#99513) 上有一个类似的问题,关于 Kubernetes 不尊重 maxUnavailablemaxSurge

如果可以,请在 GitHub 上创建新问题,因为您的问题与上述问题有点不同。


编辑

我发现另一个类似的问题 (#95498) 有回复,说明它按预期工作。 [source]

当 Deployment 控制器对 Deployment 执行滚动更新时,它会根据其控制的 ReplicaSet 的 .spec.replicas 扩展/缩减 ReplicaSet。当一个 ReplicaSet 缩小时,ReplicaSet 的.spec.replicas 会减少,它的一些 Pod 会终止,而 Deployment 控制器在计算 maxSurge / maxUnavailable 时会简单地忽略那些终止的 Pod。

同样,ReplicaSet 控制器在执行操作时会忽略终止 Pod,例如计算其 .status.availableReplicas

但我有我的怀疑。在 GitHub 上创建新问题并让开发人员研究它仍然是不错的选择。

【讨论】:

  • @p10l,谢谢。所以您附加的 github 问题似乎描述了它是 Kubernetes 所拥有的,而目前无法控制终止 pod 的数量
猜你喜欢
  • 2018-07-16
  • 2021-12-24
  • 2019-11-27
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2017-07-09
  • 2020-07-20
  • 2020-07-27
相关资源
最近更新 更多