【问题标题】:More than specified number of pods created on deleting a pod删除 pod 时创建的 pod 数量超过指定数量
【发布时间】:2018-12-07 17:49:52
【问题描述】:

我已经使用 Helm 图表在 AWS 上的 Kubernetes 集群中部署了 Hashicorp 的 Vault。

部署中的副本数指定为3

在这 3 个 Pod 中,1 已准备好 (1/1),而其他两个副本 Pod 尚未准备好 (0/1)。 我杀死了准备好的 pod,虽然预计 Kubernetes 会部署一个新的 pod 来替换它,但它部署了两个新的 pod。

现在我有两个准备好的 pod 和两个未准备好的 pod。在删除其中一个 Pod 时,现在 Kubernetes 只重新创建一个 Pod。所以我有 4 而不是 3 pod 用于我的保管库部署。 这可能是什么原因,我们如何防止这种情况发生?

【问题讨论】:

  • 能否提供您的部署配置?
  • 我用这个chart来部署,github.com/kubernetes/charts/tree/master/incubator/vault照着用,只是加了s3存储部分,做成vault.dev=false
  • 听起来你对这个问题的实际解决方案不感兴趣(我如何让保险库成功运行?),而是对差异的解释(即为什么是 4 而不是 3?)粘贴“kubectl get pods -l app=vault”和“kubectl describe deploy -l app=vault”的输出会很有帮助。

标签: kubernetes hashicorp-vault kubernetes-helm


【解决方案1】:

当你遇到这样的问题时,你应该

kubectl describe pod <PROBLEMATIC_POD>

并查看输出的下半部分Events

您的 pod 无法启动的一些原因可能是:

  • 没有具有足够资源的可用节点来满足您的请求
  • 没有可用的卷
  • 一些反关联规则和节点不足,因此调度程序无法将节点分配给您的 pod。

【讨论】:

  • 是的,我已经这样做了,我的问题不是它们没有进入就绪状态,而是运行的 pod 数量超过了指定数量
【解决方案2】:

您的部署无法正常工作,因为使用 s3 存储后端时 HA(高可用性)不可用。您需要 Hashicorp 的 Consul 或 AWS 的 DynamoDB,或者为此使用不同的后端提供商。如果您坚持使用 s3 后端提供程序,请将副本数更改为 1。

至于为什么您看到 4 个 pod 而不是 3 个,您需要提供更多详细信息。粘贴kubectl get pods -l app=vaultkubectl describe deploy -l app=vault 的输出,我会更新这个答案。

我只能推测它的价值。对于 Deployment 对象,有一个 maxSurge 属性允许滚动更新扩展到超出所需的副本数量。它默认为 25%,向上取整,在您的情况下,这将是一个额外的 1 个 pod。

最大浪涌

.spec.strategy.rollingUpdate.maxSurge 是一个可选字段, 指定可以创建的 Pod 的最大数量 所需的 Pod 数量。该值可以是一个绝对数(对于 例如,5) 或所需 Pod 的百分比(例如,10%)。这 如果 MaxUnavailable 为 0,则值不能为 0。绝对数为 通过四舍五入的百分比计算。默认值为 25%。

例如,当这个值设置为 30% 时,新的 ReplicaSet 可以 滚动更新开始时立即按比例放大,这样 新旧 Pod 总数不超过所需 Pod 的 130%。 一旦旧的 Pod 被杀死,新的 ReplicaSet 就可以扩展 进一步,确保随时运行的 Pod 总数 在更新期间最多为所需 Pod 的 130%。

删除一个 Running (1/1) pod 以及其他 pod 的 NotReady 状态可能会使您的部署进​​入“滚动更新”状态或类似的状态,这使您的部署可以扩展到它的maxSurge 设置。

【讨论】:

  • 图表中没有关闭高可用性的选项。几天前我也删除了有问题的部署。新部署没有任何此类问题。所以我无法检查豆荚。然而,我已经检查了这些豆荚,它们没有任何明显的问题。谢谢!
  • @UddhavBhosle 你是对的。 ha_enabled 是 Vault 存储配置中的属性,而不是 Helm 图表中的属性。在这种情况下,如果您坚持使用 s3 后端,您可能只需将副本数更改为 1。这就是它的工作原理吗?
  • 是的,将副本数更改为 1 是一种可能的解决方案。即使我将副本的数量保持为 3,它仍然像一个 pod 一样始终 Ready(1/1) 工作,而其他的则不是。这实际上从来都不是问题。我只是好奇什么会导致副本数超过指定的数量!
  • @UddhavBhosle 我根据您提供的内容添加了一些推测,因为它的价值。我认为这与我将付出的努力一样多。 :)
猜你喜欢
  • 2020-10-23
  • 2017-04-02
  • 2021-04-17
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
相关资源
最近更新 更多