Kubernetes Cluster Autoscaler verwenden

Erfahren Sie, wie Sie mit Kubernetes Cluster Autoscaler die Größe der verwalteten Knotenpools in einem Cluster, das Sie mit der Kubernetes Engine (OKE) erstellt haben, automatisch ändern.

Hinweis

Sie können Kubernetes Cluster Autoscaler nicht mit virtuellen Knotenpools verwenden.

Mit Kubernetes Cluster Autoscaler können Sie die verwalteten Knotenpools eines Clusters je nach den Anforderungen an die Anwendungs-Workload automatisch ändern. Durch automatische Skalierung der Knotenpools eines Clusters können Sie die Anwendungsverfügbarkeit sicherstellen und die Kosten optimieren.

Kubernetes Cluster Autoscaler:

  • Worker-Knoten zu einem Knotenpool hinzufügen, wenn ein Pod aufgrund unzureichender Ressourcen-Constraints nicht im Cluster geplant werden kann.
  • Worker-Knoten aus einem Knotenpool entfernen, wenn die Knoten über einen längeren Zeitraum eine geringe Auslastung aufweisen und wenn Pods auf anderen vorhandenen Knoten platziert werden können.

Kubernetes Cluster Autoscaler passt die Größe eines Knotenpools automatisch den vorliegenden Ressourcenanforderungen an. Die Ressourcenauslastung der Knoten im Knotenpool ist dabei nicht entscheidend.

Kubernetes Cluster Autoscaler arbeitet auf Knotenpoolbasis. In einer Konfigurationsdatei geben Sie an, welche Knotenpools als Ziele für Erweiterung und Reduzierung verwendet werden, wie groß oder klein die einzelnen Knotenpools sein dürfen und wie das Autoscaling erfolgen soll. In der Konfigurationsdatei nicht referenzierte Knotenpools werden von Kubernetes Cluster Autoscaler nicht verwaltet.

Damit Kubernetes Cluster Autoscaler die Knotenpools eines Clusters je nach den Anforderungen an die Anwendungs-Workload automatisch skalieren kann, müssen Sie in Podspezifikationen immer Ressourcenanforderungsgrenzwerte angeben (requests: unter resources:).

Sie können Kubernetes Cluster Autoscaler auf zwei Arten in einem Kubernetes-Cluster bereitstellen:

Weitere Informationen zu Kubernetes Cluster Autoscaler finden Sie unter Cluster Autoscaler und unter Häufig gestellte Fragen auf GitHub.

Empfehlungen für die Verwendung von Kubernetes Cluster Autoscaler in Produktionsumgebungen

Berücksichtigen Sie die folgenden Empfehlungen:

  • Halten Sie immer mindestens einen Knotenpool in einem Cluster vor, der nicht von Kubernetes Cluster Autoscaler verwaltet wird. Dieser Knotenpool ist für die Ausführung kritischer Cluster-Add-ons und von Kubernetes Cluster Autoscaler selbst erforderlich. Beachten Sie auch, dass Sie für die manuelle Skalierung der Knotenpools verantwortlich sind, die nicht von Kubernetes Cluster Autoscaler verwaltet werden.
  • Definieren Sie immer mehrere Replikate für das Kubernetes Cluster Autoscaler-Deployment in der Konfigurationsdatei. Wenn nur ein Replikat vorhanden ist und dieses Replikat entfernt wird und nicht neu geplant werden kann, kann Kubernetes Cluster Autoscaler keine weiteren Worker-Knoten erstellen.
  • Setzen Sie in der Konfigurationsdatei max-node-provision-time auf 25 Minuten. In der Regel werden neue Worker-Knoten bereitgestellt und in deutlich kürzerer Zeit in die Bereitschaftsbedingung verschoben. Wenn einem Knotenpool jedoch viele Knoten gleichzeitig hinzugefügt werden, kann das Provisioning mehr Zeit in Anspruch nehmen. In der Konsole wird eine Warnung neben Worker-Knoten angezeigt, die für die Initialisierung mehr als 20 Minuten benötigen. Wenn Worker-Knoten innerhalb der Zeit, die Sie für max-node-provision-time angeben, in den Status "Bereit" versetzt werden, können Sie die Warnung ignorieren.
  • Geben Sie in der Konfigurationsdatei die maximale Anzahl von Knoten an, die im Knotenpool zulässig sind. Stellen Sie sicher, dass die angegebene maximale Anzahl von Knoten den Mandantengrenzwert für die für den Knotenpool definierte Worker-Knotenausprägung nicht überschreitet. Kubernetes Cluster Autoscaler erstellt niemals mehr Knoten, als im Mandantengrenzwert angegeben. Wenn Sie eine Anzahl angeben, die den Mandantengrenzwert überschreitet, versucht Kubernetes Cluster Autoscaler in regelmäßigen Abständen, zusätzliche Knoten zu erstellen. Es können allerdings erst zusätzliche Knoten erstellt werden, wenn der Mandantengrenzwert erhöht wurde.
  • Wenn Sie Cluster definieren, die von Kubernetes Cluster Autoscaler verwaltet werden sollen, empfiehlt Oracle die Erstellung mehrerer Knotenpools mit jeweils einer Availability-Domain pro Knotenpool.
  • Konzipieren Sie Anwendungen immer so, dass sie die Unterbrechungen tolerieren, die auftreten können, wenn Kubernetes Cluster Autoscaler Worker-Knoten entfernt oder Pods auf einen anderen Worker-Knoten verschiebt, bevor ein nicht ausgelasteter Worker-Knoten entfernt wird. Beispiel: Konzipieren Sie Anwendungen, die Budgets für Podunterbrechungen nutzen (siehe Unterbrechungsbudget für Ihre Anwendung angeben in der Kubernetes-Dokumentation).
  • Ändern Sie Knotenpools nicht manuell, die von Kubernetes Cluster Autoscaler verwaltet werden. Sie dürfen beispielsweise keine Knoten mit kubectl oder mit der Konsole (oder der Oracle Cloud Infrastructure-CLI oder -API) hinzufügen oder entfernen. Solche Änderungen werden von Kubernetes Cluster Autoscaler möglicherweise außer Kraft gesetzt oder können sein Verhalten ändern. Wenn Sie beispielsweise alle Knoten in einem Knotenpool entfernen möchten, der von Kubernetes Cluster Autoscaler verwaltet wird, verwenden Sie immer Kubernetes Cluster Autoscaler, um den Knotenpool auf null zu skalieren.

Unterstützte Kubernetes Cluster Autoscaler-Parameter

Sie steuern, wie Kubernetes Cluster Autoscaler die Knotenpools eines Clusters mit Konfigurationsparametern skaliert.

Die Konfigurationsparameter, mit denen Sie von Kubernetes Engine erstellte Cluster verwalten können, und wie sie angegeben werden, hängen davon ab, ob Sie Kubernetes Cluster Autoscaler als Standalone-Programm oder als Cluster-Add-on verwenden.

  • Autoscaler für Kubernetes Cluster als Standalone-Programm verwenden

    Wenn Sie Kubernetes Cluster Autoscaler als Standalone-Programm verwenden, geben Sie die Konfigurationsparameter in einer Konfigurationsdatei an.

    Wenn Sie Kubernetes Cluster Autoscaler als Standalone-Programm verwenden, können Sie die folgenden Konfigurationsparameter nicht verwenden, um von der Kubernetes-Engine erstellte Cluster zu verwalten:

    • --node-autoprovisioning-enabled=true : Nicht unterstützt.
    • --gpu-total : Nicht unterstützt (Cloud-providerspezifisch).
    • --expander=price : Nicht unterstützt (Cloud-providerspezifisch).

    Mit Ausnahme der oben genannten Parameter können Sie jeden der Konfigurationsparameter verwenden, wenn Sie Kubernetes Cluster Autoscaler als Standalone-Programm verwenden.

    Eine vollständige Liste der Kubernetes Cluster Autoscaler-Konfigurationsparameter finden Sie unter Was sind die Parameter für CA? in den häufig gestellten Fragen zu Cluster Autoscaler auf GitHub.

  • Kubernetes Cluster Autoscaler als Cluster-Add-on verwenden

    Wenn Sie Kubernetes Cluster Autoscaler als Cluster-Add-on verwenden, geben Sie die Konfigurationsparameter in einer Konfigurationsdatei (bei Verwendung der CLI oder API) oder in der Konsole an.

    Wenn Sie Kubernetes Cluster Autoscaler als Cluster-Add-on verwenden, können Sie die folgenden Konfigurationsparameter nicht verwenden, um von der Kubernetes-Engine erstellte Cluster zu verwalten:

    • --node-autoprovisioning-enabled=true : Nicht unterstützt.
    • --gpu-total : Nicht unterstützt (Cloud-providerspezifisch).
    • --expander=price : Nicht unterstützt (Cloud-providerspezifisch).

    Beachten Sie, dass auch eine Reihe anderer Kubernetes Cluster Autoscaler-Konfigurationsparameter nicht unterstützt werden, wenn Kubernetes Cluster Autoscaler als Cluster-Add-on verwendet wird.

    Eine Liste der Konfigurationsparameter, die bei der Verwendung von Kubernetes Cluster Autoscaler als Cluster-Add-on unterstützt werden, zusammen mit den Namen, die bei der Angabe dieser Parameter verwendet werden sollen, finden Sie unter Add-on-Konfigurationsargumente für Cluster Autoscaler.

Hinweise zu Kubernetes Cluster Autoscaler

Beachten Sie Folgendes:

  • Von Kubernetes Cluster Autoscaler werden Knoten in vorhandenen Knotenpools in vorhandenen Clustern hinzugefügt und entfernt. Beachten Sie insbesondere, dass Kubernetes Cluster Autoscaler:

    • keine zusätzlichen Cluster erstellt.
    • keine zusätzlichen Knotenpools erstellt.
    • keine zusätzlichen Pods erstellt. Das Hinzufügen von Pods wird von Horizontal Pod Autoscaler unterstützt (siehe Kubernetes Horizontal Pod Autoscaler verwenden).
    • keine CPU- und Speicheranforderungen und -grenzwerte für Container anpasst. Das Anpassen von Grenzwerten wird von Vertical Pod Autoscaler unterstützt (siehe Kubernetes Vertical Pod Autoscaler verwenden).
  • Beim Entfernen von Worker-Knoten aus einem Knotenpool beachtet Kubernetes Cluster Autoscaler die Podplanungs- und Entfernungsregeln. Diese Regeln können verhindern, dass Kubernetes Cluster Autoscaler einen Worker-Knoten entfernt.

    Beispiel: Kubernetes Cluster Autoscaler entfernt standardmäßig keine Knoten, auf denen kube-system-Pods (z.B. coredns-Pods) ausgeführt werden, mit Ausnahme von DaemonSet- oder spiegelbildlichen Pods. Sie können dieses Verhalten mit einem Konfigurationsparameter steuern (skip-nodes-with-system-pods, wenn es als Standalone-Programm bereitgestellt wird, skipNodesWithSystemPods, wenn es als Cluster-Add-on bereitgestellt wird). Der Parameter ist standardmäßig auf true festgelegt.

    Weitere Informationen finden Sie in den häufig gestellten Fragen zu Cluster Autoscaler unter Welche Podtypen können das Entfernen eines Knotens durch die CA verhindern? auf GitHub.

  • Wenn Sie Knotenpools sowohl mit Terraform als auch mit Kubernetes Cluster Autoscaler verwalten, beachten Sie, dass Terraform Änderungen an der Größe eines Knotenpools rückgängig machen kann, der von Kubernetes Cluster Autoscaler vorgenommen wurde. Um ein solches Verhalten zu verhindern, verwenden Sie das Terraform-Feature ignore_changes, das speziell für Situationen gedacht ist, in denen Terraform die Verantwortung für die Verwaltung eines einzelnen Objekts mit einem anderen Prozess teilt. Beispiel: Wenn eine Ressource mit Referenz auf Daten erstellt wird, die sich in Zukunft ändern könnten, Sie möchten jedoch nicht, dass diese potenziellen Datenänderungen sich nach der Erstellung auf die Ressource auswirken. Das Metaargument ignore_changes gibt Ressourcenattribute an, die Terraform bei der Planung von Aktualisierungen des verknüpften Remoteobjekts ignorieren soll. Weitere Informationen finden Sie unter dem Metargument des Lebenszyklus in der Terraform-Dokumentation.

    Beispiel:

    resource "node_pool_1" "example" {
      # ...
    
      lifecycle {
        ignore_changes = [
          node_config_details.size
        ]
      }
    }
  • Wenn Sie ein Cluster auf eine neue Kubernetes-Version upgraden, müssen Sie Kubernetes Cluster Autoscaler manuell upgraden, damit er mit der neuen Kubernetes-Version des Clusters kompatibel ist. Kubernetes Cluster Autoscaler wird nicht automatisch upgegradet.
  • Um mit Kubernetes Cluster Autoscaler ein Cluster zu verwalten, das Sie mit Kubernetes Engine erstellt haben, muss das Cluster bestimmte Kubernetes-Versionen wie folgt ausführen:
    • Wenn Sie Kubernetes Cluster Autoscaler als Standalone-Programm verwenden, müssen Cluster die Kubernetes-Version 1.17 oder höher ausführen.
    • Wenn Sie Kubernetes Cluster Autoscaler als Cluster-Add-on verwenden, müssen Cluster die Kubernetes-Version 1.25 oder höher ausführen.
  • Sie können Kubernetes Cluster Autoscaler mit verwalteten Knotenpools verwenden, jedoch nicht mit virtuellen Knotenpools.