我有一个 Kubernetes 集群。通过策略,我确保所有服务都定义了请求、限制和 HPA,以便我可以实现平滑的自动缩放。我还定义了ResourceQuota。在这样的场景下,是否还需要定义PDB?请指教。
Pod 中断预算 (PDB) 不是必需的,但在使用 Horizontal Pod Autoscaler 时非常有用。 HPA 可扩展部署中的 Pod 数量,而 PDB 可确保节点操作不会因同时删除过多的 Pod 实例而导致服务瘫痪。
顾名思义,Pod 中断预算定义了可接受的中断程度。它定义了一个minAvailable
or maxUnavailable
部署中的 Pod 数量。它查看正在运行的副本数量(与 HPA 一起使用时由 HPA 控制)并使用 pod 标签选择器(与服务相同)来识别规则适用于哪些 pod。
设置一个minAvailable
or a maxUnavailable
值取决于应用程序:需要仲裁的分布式系统需要minAvailable
匹配仲裁大小,否则服务将失败。大多数应用程序都可以很好地与maxUnavailable
设置为 1 或更多。 AmaxUnavailable
1 将确保 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(使用前将#替换为@)