Kubernetes 引入了PodDisruptionBudget,它可以防止我们的应用程序的功能因手动和自动垂直(节点)扩展而受到干扰。
假设我们使用的是 HozirontalPodAutoscaler。另外使用 PDB 的价值是什么? PodDisruptionBudget
minAvailable
和 HozirontalPodAutoscaler minReplicas
有什么区别?
他们做不同的事情。 HorizontalPodAutoscaler 根据某些指标控制 Deployment 的
replicas:
计数。 PodDisruptionBudget 主要影响节点是否可以离线。
假设您有一个云托管集群,并且集群管理员想要升级集群节点上的基本操作系统。 为此,他们需要“封锁”每个节点 – 防止在该节点调度新的 Pod – 并“耗尽”它 – 重新定位位于该节点的所有 Pod – 然后才能重新启动它。
同时,我们还假设您的应用程序 Deployment 有
replicas: 3
,一个指定 minReplicas: 2
的 PodDisruptionBudget,并且两个副本恰好位于要终止的同一节点上。 耗尽操作将删除这些副本并在不同的节点上重新创建它们。 PDB 将保持其中一个副本运行,直到另一个副本被删除并重新创建。
+--------------+ +--------------+
| Healthy node | | Drained node |
+--------------+ +--------------+
| pod-1 | | pod-2 | <-- PDB keeps this replica alive
| | |~pod-3~~~~~~~~| while this Pod is deleted and recreated
+--------------+ +--------------+
您“应该”有一个 PodDisruptionBudget,但在集群管理员故意删除节点的情况之外,您不会注意到它。
PDB 独立于 HPA。 我要注意的一个交互是,将 PDB
minReplicas:
设置为高于 HPA minReplicas:
是没有意义的(如果您可以容忍自动缩放到 1 个副本,那么您可以支持使用 1 个副本,因为也停电)。 如果 PDB minReplicas:
是百分比,则它是 Deployment replicas:
的百分比,这意味着它将跟踪 HPA 所做的更改。