PSKE - Cluster-Autoskalierung

Cluster Autoscaler (Horizontal Node Autoscaler - HNA)

Der Cluster-Autoscaler, auch bekannt als Horizontal Node Autoscaler (HNA), ist ein Tool, das die Anzahl der Worker Nodes in einem Kubernetes-Cluster unter den folgenden Bedingungen automatisch anpasst:

  • Es gibt Pods, die aufgrund unzureichender Ressourcen nicht starten können.
  • Es gibt Worker Nodes, die über einen bestimmten Zeitraum (Standard: 30 Minuten) nicht ausgelastet sind, und Pods können auf andere Worker Nodes verteilt werden.

Voraussetzungen

Um den Horizontal Node Autoscaler in einem Shoot Cluster zu installieren, müssen die Werte “Autoscaler Min.” und “Autoscaler Max.” in mindestens einer Workergroup definiert sein.

  • Autoscaler Min." definiert die minimale Anzahl von Worker Nodes innerhalb der Worker Group.
  • Autoscaler Max." definiert die maximale Anzahl von Worker Nodes, die der Horizontal Node Autoscaler im Falle von Ressourcenknappheit innerhalb einer Worker Group bereitstellt.

HNA

Simulation

Derzeit verfügt der Shoot-Cluster über einen Workernode:

kubectl describe node shoot--ldtivqit95-worker-jh07p-z1-7d897-cgrw6
Capacity:
  cpu:                2
  ephemeral-storage:  50633164Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             4030532Ki
  pods:               110
Allocatable:
  cpu:                1920m
  ephemeral-storage:  49255941901
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             2879556Ki
  pods:               110
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests      Limits
  --------           --------      ------
  cpu                1047m (54%)   0 (0%)
  memory             1120Mi (39%)  18788Mi (668%)
  ephemeral-storage  0 (0%)        0 (0%)
  hugepages-1Gi      0 (0%)        0 (0%)
  hugepages-2Mi      0 (0%)        0 (0%)

Eine NGINX-Bereitstellung wird erstellt:

kubectl apply -f deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "2048Mi"
          #   cpu: "500m"
          limits:
            memory: "2048Mi"
            # cpu: "500m"

Die Ressourcen des vorhandenen Arbeitsknotens reichen nicht aus, wodurch der Cluster-Autoscaler (Horizontal Node Autoscaler) ausgelöst wird:

k describe pod nginx-54c7fd947f-b2k67
Events:
  Type     Reason            Age   From                Message
  ----     ------            ----  ----                -------
  Warning  FailedScheduling  37s   default-scheduler   0/1 nodes are available: 1 Insufficient memory. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.
  Normal   TriggeredScaleUp  26s   cluster-autoscaler  pod triggered scale-up: [{shoot--ldtivqit95-worker-jh07p-z1 1->2 (max: 3)}]

Nach dem Löschen des Deployments wird der zusätzliche Worker Node durch den Cluster Autoscaler (Horizontal Node Autoscaler) nach 30 Minuten deprovisioniert.

Best Practices

  • Ändern Sie Knoten, die Teil einer Autoscaling-Gruppe sind, nicht manuell. Alle Knoten in derselben Knotengruppe sollten dieselbe Kapazität und dieselben Bezeichnungen haben.
  • Verwenden Sie Anfragen für Container/Pods.
  • Verwenden Sie PodDisruptionBudgets, um zu verhindern, dass Pods zu abrupt gelöscht werden (falls erforderlich).
  • Vergewissern Sie sich, dass das Kontingent Ihres Cloud-Anbieters ausreicht, bevor Sie die Min-/Max-Werte für den Horizontal Node Autoscaler festlegen.
  • Vermeiden Sie die Verwendung zusätzlicher Node Group Autoscaler (auch von Ihrem Cloud-Anbieter).

Schlussfolgerung

Der Horizontal Node Autoscaler funktioniert wie oben beschrieben. Damit der Cluster-Autoscaler wie vorgesehen funktioniert, ist es wichtig, dass Sie sich an die Best Practices halten. Der HNA ist in der PSKE standardmäßig aktiviert und steht Ihnen zur Verfügung.