PodDisruptionBudgets 是否优先于 Horizo​​ntalPodAutoscalers?

dan*_*man 9 kubernetes horizontal-pod-autoscaling

如果您的 PDB 指定的值高于HPA 的minAvailableminReplicas,那么 pod 的数量是否会达到较低的值minReplicas

配置示例:

PDB

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: frontend-pdb
spec:
  minAvailable: 3 # HERE
  selector:
    matchLabels:
      app: frontend
Run Code Online (Sandbox Code Playgroud)

羟丙酸

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
Run Code Online (Sandbox Code Playgroud)

我想象将 PDB 设置为 % 而不是绝对值可以解决这种潜在的冲突,但我很好奇两者如何相互作用。

Mal*_*ata 3

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

minReplicas > minAvailable
Run Code Online (Sandbox Code Playgroud)

因此满足 PDB 的条件(minAvailable 是关键线,因此较高的值也是合适的),因此 HPA 可以考虑他的条件并最多达到 minReplicas。

定义Pod 中断预算的总体思路是确保最少的副本始终正常工作。

在节点操作时,drain 将停止并等待在执行 pod 驱逐时遵守所有 PDB 条件。如果被驱逐的 Pod 会导致 PDB 无效,则将等到条件有效为止。

笔记:

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

了解更多:downscaling-kuberneteshpa-pdb-kubernetes