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

bq9c1y66  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(1)|浏览(161)

我有一个Kubernetes集群。通过策略,我确保所有服务都定义了Requests、Limits和HPA,这样我就可以顺利地进行自动扩展。我还定义了ResourceQuota。在这种情况下,是否也需要定义PDB?请指示。

ejk8hzay

ejk8hzay1#

Pod中断预算(PDB)不是必需的,但在使用Horizontal Pod Autoscaler时很有用。HPA可扩展部署中的pod数量,而PDB可确保节点操作不会因同时删除太多pod示例而导致服务崩溃。
顾名思义,Pod中断预算定义了可接受的中断量。它在部署中定义minAvailablemaxUnavailable数量的pod。它查看正在运行的副本的数量(与HPA一起使用时由HPA控制),并使用pod标签选择器(与服务相同)来识别规则应用于哪些pod。
设置minAvailablemaxUnavailable值取决于应用程序:需要仲裁的分布式系统将需要minAvailable来匹配仲裁大小,否则服务将失败。大多数应用程序在maxUnavailable设置为1或更大时运行良好。maxUnavailable为1将确保pod每次从一个排水节点移动1个到一个可用节点。为了更快地移动它们,较大的值将是有用的;也就是说,如果复制集的规模足够大,允许这种破坏。
在一个或多个节点可能变得不可用的节点操作(例如,节点升级或节点池缩小)期间,排出将停止并等待,直到在执行荚驱逐时遵守所有PDB规则。如果被驱逐,将导致PDB无效的Pod将等待,直到条件有效。注意,这可能会阻止节点操作完成。如果节点正在升级,但没有足够的容量,则驱逐过程将失败,因为没有替代节点可用于重新部署需要移动的pod。如果没有PDB,节点将耗尽并驱逐在其上运行的所有pod,可能导致部署/副本集中的pod数量低于服务工作的关键阈值。
还要注意,PDB对于守护进程集可能是必要的,以防止节点操作失败,因为守护进程集在每个节点(其标签目标)上运行服务,节点可能会因为守护进程pod在其上运行而被阻止关闭,除非定义了中断预算以允许这种中断。
有关更多详细信息,请查看这篇文章:
https://blog.gruntwork.io/avoiding-outages-in-your-kubernetes-cluster-using-poddisruptionbudgets-ef6a4baa5085
有关资源清单是什么的完整详细信息:
https://kubernetes.io/docs/tasks/run-application/configure-pdb/

相关问题