Kubernetes向下扩展忽略PDB

fcwjkofz  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(120)

我们在GKE Autopilot中获得了一致的节点规模缩减,这使得我们的应用程序在几秒钟内不可用。我们有两个副本和一个PDB,说明至少需要有一个副本可用。我们还没有设置任何反亲和性(我将在接下来做),两个副本最终在同一个节点上。
根据https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#does-ca-work-with-poddisruptionbudget-in-scale-down,“在开始终止节点之前,CA确保在那里调度的Pod的PodDisruptionBudgets允许删除至少一个副本。然后,它通过pod eviction API从一个节点上删除所有pod“我是否正确地理解了,如果两个副本都在同一个节点上,那么这个条件将得到满足,因为从技术上讲,一个副本 * 可以 * 被删除?它只是忽略了这样一个事实,即在这种情况下,两个副本都将消失?
这是我们的PDB状态以供参考

status:
    conditions:
    - lastTransitionTime: "2023-07-28T16:03:34Z"
      message: ""
      observedGeneration: 1
      reason: SufficientPods
      status: "True"
      type: DisruptionAllowed
    currentHealthy: 2
    desiredHealthy: 1
    disruptionsAllowed: 1
    expectedPods: 2
    observedGeneration: 1

字符串

jutyujz0

jutyujz01#

在PDB中,我们有一种方法可以防止一个副本在节点有两个副本时被驱逐,方法是为特定类型的pod设置目标大小,称为最小可用性。这表示任何时候都应至少运行一个复制副本。If the number of running replicas is below the target size, Kubernetes will prevent further disruptions to the remaining replicas until the target size is met
因此,在您的情况下,如果您将目标大小设置为2,则一个副本将被中断,另一个副本将运行,这使得节点可以防止其中断。当发生中断时,Kubernetes将尝试从受影响的节点中优雅地驱逐pod,以维护PDB中指定的所需数量的副本。
参考Ink Insight的blog,它清楚地解释了Kubernetes| Pod Disruption Budgets(PDB)来自博客这里有一个PDB示例,它将“my-namespace”中名为“my-deployment”的部署的目标大小设置为2。

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: my-pdb
  namespace: my-namespace
spec:
  minAvailable: 2
  selector:
    matchLabels:
    app: my-deployment

字符串
您还可以参考official doc,了解如何为您的应用程序指定中断预算以及如何考虑Pod调度和中断。

编辑:经过更多的了解,我明白了这一点:

正如您在文档CA makes sure that PodDisruptionBudgets for pods scheduled there allow for removing at least one replica. Then it deletes all pods from a node through the pod eviction API"中提到的

  • 实际上它并不删除所有的Pod,这里PDB将检查其条件,并允许一个POD根据定义的条件在节点上(最小可用:1)这将防止pod被逐出。*

然后,如在同一文档中提到的,If one of the eviction fails, the node is saved and it is not terminated,然后通过这种方式,节点将保存中断。
如果我们没有正确地提到PDB条件,那么它将自动删除所有的pod并中断节点。它没有忽略两个复制品都将消失的事实。

相关问题