Kubernetes - ReplicaSet 与 PodDisruptionBudget

I.z*_*.zv 2 replicaset kubernetes kubernetes-pod

我想知道 PodDisruptionBudget 能带来什么附加值。

据我了解,PodDisruptionBudget 承诺一定数量的节点将始终保留在集群中,同时有 2 个选项来决定如何保留:minAvailable / maxUnavailable。

现在,当我定义 ReplicaSet 时,我定义了我想要的副本数量。因此,如果我定义 2 个,则副本数不会少于 2 个。那么 PodDisruptionBudget 是由什么给出的呢?

Kri*_*sia 8

PodDisruptionBudget有助于确保ReplicaSet无法保证的应用程序零停机。

\n

以下文章通过示例解释了如何PodDisruptionBudget有助于实现应用程序的零停机时间:

\n

引用该帖子,节点升级是正常情况,如下所述:

\n
\n

让\xe2\x80\x99s考虑一个场景,我们需要升级节点版本或经常更新规范。集群缩减也是正常情况。\n在这些情况下,需要清空要删除的节点上运行的 Pod。\n

\n
\n

kubectl drain在其中一个节点上执行升级:

\n
\n

我们需要从池中删除node1,但我们无法通过立即分离来完成此操作,因为这将导致在那里运行的所有 Pod 终止,从而导致服务中断。分离节点之前的第一步是使节点取消调度。

\n
\n

运行kubectl get pods -w将显示节点上运行的 pod 处于终止状态,这会导致停机:

\n
\n

如果您使用 kubectl get pods 快速检查 Pod,它将立即终止在节点 1 上调度的所有正在运行的 Pod。这可能会导致停机!如果您运行的 Pod 数量较少,并且所有这些 Pod 都调度在同一节点上,则将 Pod 调度到其他节点上需要一些时间。

\n
\n

PodDisruptionBudget在这种情况下,minAvailable可以实现零停机。Replicaset只会确保replicas在此过程中在其他节点上创建的 Pod 数量。

\n

如果您只有Replicaset一个副本且未PodDisruptionBudget指定,则该 Pod 将被终止,并在其他节点上创建一个新的 Pod。这就是PDBs 比 s 提供额外优势的地方Replicaset

\n
\n

为了使 PodDisruptionBudget 发挥作用,必须至少有 2 个 Pod\n为标签选择器运行,否则,节点无法\n被优雅地耗尽,并且在宽限时间结束时将被强制驱逐。

\n
\n