Wie behebe ich Probleme mit der Pod-Planung mit dem Cluster Autoscaler in Amazon EKS?
Ich habe Probleme mit der Pod-Planung, wenn ich den Cluster Autoscaler in Amazon Elastic Kubernetes Service (Amazon EKS) verwende. Mein Pod steckt im Status „Ausstehend“ fest oder ich erhalte eine Benachrichtigung über eine fehlgeschlagene Terminplanung.
Lösung
Wenn du Cluster Autoscaler aktiviert hast und der Pod im Status Ausstehend feststeckt, fügt Cluster Autoscaler möglicherweise keine neuen Knoten zu ungeplanten Pods hinzu.
Den Zustand deines Pods überprüfen
Um den Status des Pods zu überprüfen, führe den folgenden Befehl kubectl get pods aus:
kubectl get pods -n kube-system -l app=cluster-autoscaler
Wenn sich der Pod im Status Ausstehend befindet oder wenn sich der Container des Pods im Status Warten befindet, behebe Probleme mit dem Status des Pods.
Wenn sich der Pod im Status CrashLoopBackOff befindet, führe den folgenden Befehl kubectl describe pod aus:
kubectl describe pod cluster-autoscaler-####-#### -n kube-system
Hinweis: Ersetze cluster-autoscaler-####-#### durch deinen Cluster-Autoscaler-Pod.
Wenn in der Ausgabe des Befehls „OOMKilled“ mit dem Beendigunscode 137 angezeigt wird, erhöhe deine Speicherressourcenlimits und Anforderungen für die cluster-autoscaler-Bereitstellung. Weitere Informationen findest du unter Specify a memory request and a memory limit (Eine Speicheranfrage und eine Speicherbeschränkung festlegen) auf der Kubernetes-Website.
Führe den folgenden kubectl logs-Befehl aus, um die Pod-Protokolle zu überprüfen:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Die Protokolle können Informationen zur Problembehandlung enthalten. Im Pod-Protokoll wird beispielsweise möglicherweise die folgende „AccessDenied“-Fehlermeldung angezeigt:
„Failed to create AWS Manager: AccessDenied: User: arn:aws:sts::444455556666:assumed-role/your-role is not authorized to perform: your-action because no identity-based policy allows the your-action action“
Um Probleme mit den AWS Identity and Access Management (IAM)-Berechtigungen zu lösen, füge die richtige IAM-Richtlinie an den Pod an. Weitere Informationen findest du in der IAM-Richtlinie auf der GitHub-Website.
Oder das Protokoll zeigt möglicherweise die folgende Fehlermeldung an:
„Failed to create AWS Manager: cannot autodiscover ASGs: WebIdentityErr: failed to retrieve credentials caused by: RequestError: send request failed caused by: Post https://sts.region.amazonaws.com/: : dial tcp: i/o timeout“
Wenn du Probleme mit der Netzwerkkonnektivität hast, stelle sicher, dass das Worker-Knoten-Subnetz eine Route zu den folgenden AWS-Service-Endpunkten hat:
- ec2.region.amazonaws.com
- autoscaling.region.amazonaws.com
- sts.region.amazonaws.com
Stelle außerdem sicher, dass die Netzwerk-Zugriffssteuerungsliste (Netzwerk-ACL) oder die Worker-Knoten-Sicherheitsgruppe des Subnetzes den Datenverkehr zu den vorherigen Endpunkten nicht blockiert.
Wenn der Cluster privat ist, ergreife die folgenden Maßnahmen:
- Füge die vorherigen Endpunkte zur Virtual Private Cloud (VPC) hinzu.
- Konfiguriere die Sicherheitsgruppe für Endpunkte so, dass Datenverkehr auf Port 443 von einer Worker-Knoten-Sicherheitsgruppe zugelassen wird.
Ermittle, warum der Cluster Autoscaler die Auto-Scaling-Gruppe nicht aufskalieren kann
Um zu überprüfen, ob der Pod eine Planungsregel wie Affinität oder Anti-Affinität enthält, führe den folgenden Befehl kubectl describe pod aus:
kubectl describe pod pending-pod-name -n pending-pod-namespace
Hinweis: Ersetze pending-pod-name durch den Namen deines ausstehenden Pods und pending-pod-namespace durch den Namespace deines ausstehenden Pods. Weitere Informationen findest du unter Affinity and anti-affinity (Affinität und Anti-Affinität) auf der Kubernetes-Website.
Überprüfe in der Befehlsausgabe den Abschnitt Ereignisse, um festzustellen, warum der Pod im Status Ausstehend feststeckt. Beispielsweise könntest du ein Problem mit den Labels der Knotengruppen identifizieren.
Gehe wie folgt vor, um sicherzustellen, dass die Knotengruppen funktionieren:
- Konfiguriere die Knotengruppen mit Labels, die den Einstellungen nodeSelector and requiredDuringSchedulingIgnoredDuringExecution der nodeAffinity-Spezifikation des Pods entsprechen. Weitere Informationen findest du unter Node labels (Knoten-Labels) auf der Kubernetes-Website. Die richtigen Labels ermöglichen es Cluster Autoscaler, geeignete Knoten für Skalierungsvorgänge zu identifizieren.
- Stelle sicher, dass du die Pod-Planungsregeln korrekt definiert hast. Weitere Informationen findest du unter Assigning Pods to nodes (Pods zu Knoten zuweisen) auf der Kubernetes-Website. Wenn Pods nodeSelector oder requiredDuringSchedulingIgnoredDuringExecution verwenden, berücksichtigt der Cluster Autoscaler nur die Skalierung von Knotengruppen, die den Planungsanforderungen für diese Einstellungen entsprechen.
Führe den folgenden Befehl kubectl get deployment aus, um die Cluster-Autoscaler-Konfiguration zu überprüfen:
kubectl get deployment cluster-autoscaler -n kube-system -o yaml
Wenn der Cluster Autoscaler das richtige node-group-auto-discovery-Argument hat, zeigt die Ausgabe des Befehls die folgende Konfiguration an:
command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=aws - --skip-nodes-with-local-storage=false - --expander=least-waste - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/your-cluster-name
Prüfe, ob die Auto-Scaling-Gruppe die richtigen Tags hat.
Cluster Autoscaler benötigt die folgenden Tags, um die Auto-Scaling-Gruppe zu ermitteln, die der Knotengruppe zugeordnet ist:
Tag 1: key: k8s.io/cluster-autoscaler/your-cluster-name value: owned Tag 2: key: k8s.io/cluster-autoscaler/enabled value: true
Um zu überprüfen, ob die Knotengruppe die maximale Anzahl von Knoten erreicht hat, führe den folgenden Befehl describe-nodegroup aus:
aws eks describe-nodegroup --cluster-name your-cluster-name --nodegroup-name your-nodegroup-name
Hinweis: Ersetze your-cluster-name durch den Namen deines Clusters und your-nodegroup-name durch den Namen deiner Knotengruppe.
Wenn die Knotengruppe die maximale Anzahl von Knoten erreicht hat, aktualisiere die Knotengruppe, um die maximale Knotenanzahl zu erhöhen. Dann können die neuen Knoten die neuen Pods planen.
Prüfe, ob die Amazon Elastic Compute Cloud (Amazon EC2)-Instance, welche die Auto-Scaling-Gruppe gestartet hat, deinem Cluster beitreten kann. Wenn die Instance deinem Cluster nicht beitreten kann, behebe die Probleme mit deinen Worker-Knoten.
Führe den folgenden Befehl kubectl get pod aus, um die Pod-Ressourcenanforderungen zu überprüfen:
kubectl get pod pending-pod-name -n pending-pod-namespace -o yaml | grep resources -A6
Hinweis: Ersetze pending-pod-name durch den Namen deines ausstehenden Pods und pending-pod-namespace durch den Namen des Namespace deines ausstehenden Pods.
Prüfe, ob der aktuelle Knoten-Instance-Typ die Pod-Ressourcenanforderung erfüllt, und ändere die Pod-Ressourcenanforderung bei Bedarf. Oder erstelle eine neue Knotengruppe mit einem geänderten Instance-Typ. Weitere Informationen zu Pod-Ressourcenanforderungen findest du unter Resource management for Pods and containers (Ressourcenverwaltung für Pods und Container) auf der Kubernetes-Website.
Führe den folgenden Befehl kubectl describe node aus, um die Taints für einen Knoten anzuzeigen:
kubectl describe node your-node-name
Hinweis: Ersetze your-node-name durch den Namen deines Knotens.
Vergewissere dich, dass deine Pods die Taints tolerieren, die du dem Knoten hinzugefügt hast. Wenn der Knoten die Taints nicht benötigt, entferne die Taints vom Knoten. Weitere Informationen findest du unter Taints and Tolerations (Taints und Toleranzen) auf der Kubernetes-Website.
Ähnliche Informationen
Frequently asked questions (Häufig gestellte Fragen) auf der GitHub-Website
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 3 Monaten
AWS OFFICIALAktualisiert vor 4 Monaten