【问题标题】:Cluster Autoscaler and Horizontal Pod Autoscaler working togetherCluster Autoscaler 和 Horizo​​ntal Pod Autoscaler 一起工作
【发布时间】:2021-06-01 07:17:27
【问题描述】:

我有一个已激活 Cluster Autoscaler 并为我的一个部署提供 HPA 的集群。

这是 HPA 定义:

kind: HorizontalPodAutoscaler
metadata:
  name: hpa-resource-metrics-cpu 
spec:
  scaleTargetRef:
    apiVersion: apps/v1 
    kind: ReplicationController 
    name: hello-hpa-cpu 
  minReplicas: 1 
  maxReplicas: 10 
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50

现在在我的集群使用非常少的情况下,这意味着此部署将只有 1 个可用副本。

而且由于集群的使用率不高,可能是包含该副本的节点被安排删除(缩减)。

在这种情况下,它会使我的部署停机(当集群节点被删除时,部署的唯一副本也会被删除,因此需要在新的 Pod 中重新调度)。我不希望这种情况发生(停机时间)。

从这个问题:https://github.com/kubernetes/kubernetes/issues/48307,看来 Pod Disruption Budgets 不适用于只有 1 个副本的部署。

所以我的问题的唯一解决方案是将minReplicas 设置为 2?

或者我还能做些什么来防止这种停机时间,并且仍然让minReplicas 为 1?

【问题讨论】:

  • HA 和一个部署副本似乎相互矛盾。如果需要 HA,则需要多个副本,否则会由于节点磁盘故障、由于版本升级而升级节点等原因导致非自愿停机。

标签: kubernetes autoscaling horizontal-pod-autoscaling


【解决方案1】:

Kubernetes 有disruption 的概念。集群自动缩放器(或管理员)使节点脱机是一种“自愿”中断(与节点断电不同),因此您可以对其进行一些控制。如果你create a pod disruption budget:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: hello-pdb
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: hello

当集群尝试执行自愿中断时,您已指定不应少于一个带有标签 app: hello 的 pod。

这样做可以防止集群自动扩缩器实际删除节点。 PDB 文档中的示例通常具有多个副本,并且可以容忍其中一些处于脱机状态,因此可以删除 3 的 1 个副本并在不同的节点上重新创建它。有一个扩展示例,集群中没有容量来启动重新调度的 pod,这会阻止销毁节点。您可以将 HPA 设置为 minReplicas: 3 以避免这种情况,即使这意味着您的系统将在最安静的时候过度配置。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2018-10-09
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多