2

如果您有一个指定高于 HPA 的 PDB,那么minAvailablepodminReplicas的数量会达到更低的minReplicas吗?

示例配置:

数据库

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 设置为 % 而不是绝对值可以解决这种潜在的冲突,但我很好奇这两者是如何相互配合的。

4

1 回答 1

1

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

minReplicas > minAvailable

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

定义Pod 中断预算的总体思路是确保最少的副本始终有效。

在节点运行时,排水管将停止并等待执行 pod 驱逐时遵守所有 PDB 条件。如果被驱逐的 pod 会导致 PDB 无效,则会等到条件有效。

笔记:

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

阅读更多:downscaling-kuberneteshpa-pdb-kubernetes

于 2021-02-11T14:03:28.110 回答