Best Practices für Autoscaler
Informieren Sie sich über Best Practices für die Verwendung von Kubernetes Cluster Autoscaler (CA), Horizontal Pod Autoscaler (HPA) und Vertical Pod Autoscaler (VPA) mit Clustern, die Sie von Kubernetes Engine (OKE) erstellt haben.
Dieser Abschnitt enthält Best Practices für die Verwendung von Kubernetes Cluster Autoscaler (CA), Horizontal Pod Autoscaler (HPA) und Vertical Pod Autoscaler (VPA) mit Clustern, die von Kubernetes Engine erstellt wurden.
Die automatische Skalierung ist eine Möglichkeit, die Anzahl der Computing-Ressourcen, die einer Anwendung zugewiesen werden, basierend auf den Anforderungen der Anwendung dynamisch zu skalieren (sowohl vertikal als auch horizontal). Sie können folgende Elemente verwenden:
- Kubernetes Cluster Autoscaler, um die Knotenpools eines Clusters je nach den Anforderungen an die Anwendungs-Workload automatisch zu skalieren.
- Kubernetes Horizontal Pod Autoscaler verwenden, um die Anzahl der Pods in einem Deployment automatisch zu skalieren
- Kubernetes Vertical Pod Autoscaler verwenden, um die Ressourcenanforderungen und -grenzwerte (wie CPU- und Speicherattribute) für Container, die in den Pods eines Deployments ausgeführt werden, automatisch anzupassen.
Weitere Informationen finden Sie unter Kubernetes-Knotenpools und -Pods automatisch skalieren.
Best Practice: Manuelles Verwalten von mindestens einem Knotenpool für kritische Cluster-Add-ons
Es wird empfohlen, dass Sie immer mindestens einen Knotenpool in einem Cluster haben, der nicht von Kubernetes Cluster Autoscaler verwaltet wird. Dieser Knotenpool ist für die Ausführung kritischer Cluster-Add-ons erforderlich. Beachten Sie auch, dass Sie für die manuelle Skalierung der Knotenpools verantwortlich sind, die nicht von Kubernetes Cluster Autoscaler verwaltet werden.
Außerdem wird empfohlen, Anwendungspods für die Ausführung auf Benutzerknotenpools zu planen und kritische Systempods (wie Coredns-Pods) auf dedizierten Systemknotenpools auszuführen. Die Trennung von Anwendungs-Pods und System-Pods verhindert, dass betrügerische Anwendungs-Pods versehentlich System-Pods töten. Setzen Sie dieses Verhalten durch, indem Sie den Taint CriticalAddonsOnly=true:NoSchedule für Systemknotenpools verwenden.
Best Practice: Mehrere Replikate definieren
Es wird empfohlen, immer mehrere Replikate für das Kubernetes Cluster Autoscaler-Deployment in der Konfigurationsdatei zu definieren. 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.
Best Practice: Max-Node-Provisioning-Zeit festlegen
Es wird empfohlen, in der Konfigurationsdatei max-node-provision-time auf 25 Minuten zu setzen. 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.
Best Practice: Maximale Anzahl von Knoten in einem Knotenpool angeben
Es wird empfohlen, die maximale Anzahl von Knoten anzugeben, die im Knotenpool in der Konfigurationsdatei 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.
Best Practice: Mehrere Knotenpools mit einer anderen Availability-Domain für jeden Knotenpool angeben
Es wird empfohlen, beim Definieren von Clustern, die von Kubernetes Cluster Autoscaler verwaltet werden sollen, mehrere Knotenpools (mit einer anderen Availability-Domain für jeden Knotenpool) anzugeben.
Wenn Sie mehrere Knotenpools in verschiedenen Availability-Domains angeben, wird die Wahrscheinlichkeit verringert, dass Kubernetes Cluster Autoscaler keine Worker-Knoten erstellen kann, weil eine ausgewählte Knotenausprägung in einer bestimmten Availability-Domain nicht verfügbar ist.
Best Practice: Mit Kapazitätsreservierungen Worker-Knoten bereitstellen
Es wird empfohlen, Kapazitätsreservierungen zum Provisioning von Worker-Knoten zu verwenden. Durch die Verwendung von Kapazitätsreservierungen wird sichergestellt, dass Compute-Kapazität für Workloads verfügbar ist, wenn dies bei kritischen Ereignissen wie Disaster Recovery oder unerwarteten Workload-Spitzen erforderlich ist.
Siehe Kapazitätsreservierungen für das Provisioning von verwalteten Knoten verwenden.
Best Practice: Anwendungen entwickeln, die Budgets für Pod-Unterbrechungen nutzen
Wir empfehlen, dass Sie Anwendungen so entwerfen, 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 Sie einen nicht ausgelasteten Worker-Knoten entfernen.
Beispiel: Entwickeln Sie Anwendungen, die Budgets für Podunterbrechungen nutzen.
Informationen hierzu finden Sie in der Kubernetes-Dokumentation unter Unterbrechungsbudget für Ihre Anwendung angeben.
Best Practice: Von Kubernetes Cluster Autoscaler verwaltete Knotenpools nicht manuell konfigurieren
Vermeiden Sie das manuelle Ändern von Knotenpools, 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 überschrieben oder können sein Verhalten ändern.
Wenn Sie 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.
Best Practice: Kubernetes Horizontal Pod Autoscaler und Vertical Pod Autoscaler nicht zusammen verwenden
Wir empfehlen, Horizontal Pod Autoscaler und Vertical Pod Autoscaler nicht zusammen zu verwenden.
Der Vertical Pod Autoscaler passt die Konfiguration von Anforderungen und Limits automatisch an und zielt darauf ab, Gemeinkosten zu reduzieren und Kosteneinsparungen zu erzielen.
Horizontal Pod Autoscaler skaliert die Anzahl der Pods basierend auf CPU- oder Speicherauslastung oder anderen Metriken. Horizontal Pod Autoscaler erhöht die Anzahl der Pods mit größerer Wahrscheinlichkeit, anstatt sie zu verringern.
Wenn Sie Horizontal Pod Autoscaler und Vertical Pod Autoscaler zusammen verwenden, prüfen Sie, ob die jeweiligen Policys nicht miteinander interferieren.
Best Practice: Empfehlungen erstellen, ohne sie während der Anwendungsentwicklung anzuwenden
Wir empfehlen, den Vertical Pod Autoscaler zu verwenden, wenn Sie sich in den frühen Phasen des Schreibens einer Anwendung befinden, um einfach Empfehlungen zu erstellen (ohne Pods zu aktualisieren).
Um Empfehlungen nur zu erstellen, ohne sie anzuwenden, verwenden Sie updateMode: "Off" im Abschnitt updatePolicy des VerticalPodAutoscaler-Manifests. Beim Erstellen von Pods analysiert Vertical Pod Autoscaler die CPU- und Speicheranforderungen der Container und erfasst diese Empfehlungen im Feld Status. Vertical Pod Autoscaler ergreift keine Maßnahmen, um die Ressourcenanforderungen für die ausgeführten Container zu aktualisieren.