定义了 HPA 的 kubernetes 集群是否需要 PDB?

2023-12-26

我有一个 Kubernetes 集群。通过策略,我确保所有服务都定义了请求、限制和 HPA,以便我可以实现平滑的自动缩放。我还定义了ResourceQuota。在这样的场景下,是否还需要定义PDB?请指教。


Pod 中断预算 (PDB) 不是必需的,但在使用 Horizo​​ntal Pod Autoscaler 时非常有用。 HPA 可扩展部署中的 Pod 数量,而 PDB 可确保节点操作不会因同时删除过多的 Pod 实例而导致服务瘫痪。

顾名思义,Pod 中断预算定义了可接受的中断程度。它定义了一个minAvailable or maxUnavailable部署中的 Pod 数量。它查看正在运行的副本数量(与 HPA 一起使用时由 HPA 控制)并使用 pod 标签选择器(与服务相同)来识别规则适用于哪些 pod。

设置一个minAvailable or a maxUnavailable值取决于应用程序:需要仲裁的分布式系统需要minAvailable匹配仲裁大小,否则服务将失败。大多数应用程序都可以很好地与maxUnavailable设置为 1 或更多。 AmaxUnavailable1 将确保 pod 一次从耗尽节点移动 1 个到可用节点。为了更快地移动它们,更大的值会很有用;也就是说,副本集的规模是否足以允许这种中断。

在节点操作期间(例如节点升级或节点池缩减),一个或多个节点可能变得不可用,drain 将停止并等待,直到在执行 pod 驱逐时遵守所有 PDB 规则。如果被驱逐,将导致 PDB 无效的 Pod 将等待,直到条件有效。请注意,这可能会阻止节点操作完成。如果正在升级节点,但没有足够的容量,驱逐过程将会失败,因为没有可用的替代节点来重新部署需要移动的 Pod。如果没有 PDB,节点将耗尽并逐出其上运行的所有 Pod,这可能会导致部署/副本集中的 Pod 数量低于服务运行的关键阈值。

另请注意,守护进程集可能需要 PDB 来防止节点操作失败,因为守护进程集在每个节点(其标签目标)上运行服务,因此可能会阻止节点关闭,因为守护进程集 pod 正在其上运行,除非发生中断预算的制定是为了考虑到这种干扰。

欲了解更多详细信息,请查看这篇文章:

https://blog.gruntwork.io/avoiding-outages-in-your-kubernetes-cluster-using-poddisruptionbudgets-ef6a4baa5085 https://blog.gruntwork.io/avoiding-outages-in-your-kubernetes-cluster-using-poddisruptionbudgets-ef6a4baa5085

有关资源清单的完整详细信息:

https://kubernetes.io/docs/tasks/run-application/configure-pdb/ https://kubernetes.io/docs/tasks/run-application/configure-pdb/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定义了 HPA 的 kubernetes 集群是否需要 PDB? 的相关文章

随机推荐