PodDisruptionBudgets 是否优先于 Horizo​​ntalPodAutoscalers?

Do PodDisruptionBudgets take priority over HorizontalPodAutoscalers?

如果您的 PDB 指定的 minAvailable 高于 HPA 的 minReplicas,pods 的数量是否会达到较低的 minReplicas

示例配置:

PDB

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: frontend-pdb
spec:
  minAvailable: 3 # HERE
  selector:
    matchLabels:
      app: frontend

HPA

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: frontend-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: frontend-deployment
  minReplicas: 2 # AND HERE
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 65

我认为将 PDB 设置为 % 而不是绝对会解决这个潜在的冲突,但我很好奇这两者如何相互配合。

在您的情况下,将创建两个对象并赋值 PodDisruptionBudget 中定义的 minAvailable: 3 将比 Deployment 中定义的 minReplicas: 2 具有更高的优先级。 PDB 中定义的条件更为重要。在这种情况下,PDB 的条件得到满足,但如果自动缩放器将尝试减少副本数量,它将被阻止,因为 minAvailable 值的 PDB 条件将不满足。 您已经写道,您注意到当您更新部署时,您的 PDB minAvailable 小于 HPA 中的 minReplicas,可用量 pods 永远不会低于 HPA。这是正常的,因为自动缩放器考虑了 PDB 和 if

minReplicas > minAvailable

因此满足 PDB 的条件(minAvailable 是临界线,因此更高的值也是合适的)因此 HPA 可以考虑他的条件并且最多会命中 minReplicas。

定义 Pod Disruption Budget 的总体思路是确保最少的副本始终有效。

在节点操作时,drain 将停止并等待在执行 pod 驱逐时满足所有 PDB 条件。如果 pods 被逐出会导致 PDB 无效,则将等到条件有效。

注意:

具有单个副本的部署的 PDB 很可能会导致节点操作永远不会成功。

阅读更多:, .