0

我的一个部署有一个激活了 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?

4

1 回答 1

1

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

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为避免这种情况,即使这意味着您的系统将在最安静的时间过度配置。

于 2021-03-03T12:24:08.640 回答