Wie behebe ich Probleme, wenn ich Cluster Autoscaler auf einem Amazon EKS-Cluster einrichte?
Ich möchte Probleme beheben, wenn ich Cluster Autoscaler auf meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster starte.
Behebung
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Die Befehle in der folgenden Auflösung verwenden nicht das Flag --region, da sie die standardmäßige AWS-Region verwenden. Um deine Standardregion zu überprüfen, führe den folgenden AWS-CLI-Befehl configure aus:
aws configure
Um die Region zu ändern, verwende das Flag --region.
Voraussetzungen: Installiere oder aktualisiere eksctl auf die neueste Version. Anweisungen findest du unter Installation auf der eksctl-Website.
Ergreife je nach dem Problem, auf das du stößt, die folgenden Maßnahmen zur Problembehebung. Um Probleme mit Probes zu beheben, siehe Wie behebe ich Probleme mit Liveness- und Readiness-Probes in meinen Amazon EKS-Clustern?
Cluster Autoscaler Pod befindet sich in einem „CrashLoopBackOff“-Status
Gehe wie folgt vor, um den Status „CrashLoopBackOff“ zu beheben:
-
Führe den folgenden Befehl aus, um den Cluster-Autoscaler-Pod-Status zu überprüfen:
kubectl get pods -n kube-system | grep cluster-autoscalerBeispielausgabe:
NAME READY STATUS RESTARTS AGE cluster-autoscaler-abcd-abcd 0/1 CrashLoopBackOff 3 (20s ago) 99s -
Um Details darüber zu erhalten, warum der Pod im Status „CrashLoopBackOff“ feststeckt, führe den folgenden Befehl aus:
kubectl describe pod cluster-autoscaler-abcd-abcde -n kube-systemHinweis: Ersetze cluster-autoscaler-abcd-abcde durch den Namen des Cluster Autoscaler Pods.
Überprüfe in der Ausgabe den Wert für Reason. Wenn du ein OOMKilled-Problem feststellst, verwende den Befehl kubectl edit, um die Werte für limits und requests für Speicherressourcen in der Cluster-Autoscaler-Bereitstellung zu erhöhen. Weitere Informationen zu kubectl edit findest du unter kubectl edit auf der Kubernetes-Website. Die Standard-Speicherwerte für den Cluster Autoscaler findest du unter cluster-autoscaler-autodiscover.yaml auf der GitHub-Website.
Beispielausgabe:Name: cluster-autoscaler-abcd-abcde Namespace: kube-system State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled Exit Code: 137 ... -
Führe den folgenden Befehl aus, um die Cluster-Autoscaler-Pod-Protokolle auf Probleme zu überprüfen:
kubectl logs -f -n kube-system -l app=cluster-autoscalerWenn die Protokolle Probleme mit den AWS Identity and Access Management (IAM)-Berechtigungen anzeigen, fahre mit Cluster Autoscaler Pod hat Probleme mit IAM-Berechtigungen fort. Beispielausgabe:
Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: abc is not authorized to perform: autoscaling: DescribeTags because no identity-based policy allows the autoscaling:DescribeTags action status code: 403, request id: abcdexyzWenn die Protokolle Netzwerkprobleme wie I/O-Timeout anzeigen, fahre mit Cluster Autoscaler Pod hat Netzwerkprobleme fort. Beispielausgabe:
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
Cluster Autoscaler Pod hat Probleme mit IAM-Berechtigungen
Prüfe, ob du dem Cluster einen OIDC-Anbieter zugeordnet hast
Stelle sicher, dass du einen OpenID Connect (OIDC)-Anbieter für deinen Cluster erstellt hast.
Prüfe, ob du das Cluster-Autoscaler-Servicekonto mit der IAM-Rolle annotiert hast
Führe den folgenden Befehl aus, um die Anmerkungen deines AWS-Servicekontos zu überprüfen:
kubectl get serviceaccount cluster-autoscaler -n kube-system -o yaml
Überprüfe die Anmerkungen, um sicherzustellen, dass die Ausgabe deine Cluster-Autoscaler-Servicekonto-Rolle auflistet. Beispielausgabe:
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/cluster_auto_scaler_iam_role name: cluster-autoscaler namespace: kube-system
Um Probleme mit deiner Servicekonto-Rolle zu beheben, siehe Wie behebe ich Probleme bei einem OIDC-Anbieter und IRSA in Amazon EKS?
Überprüfe die IAM-Richtlinie
Stelle sicher, dass du die richtige IAM-Richtlinie an die Cluster-Autoscaler-Serivcekonto-Rolle angehängt hast. Eine Beispielrichtlinie und eine Liste der erforderlichen Berechtigungen findest du in der IAM-Richtlinie auf der GitHub-Website.
Prüfe, ob du die Vertrauensbeziehung richtig konfiguriert hast
Stelle sicher, dass du die Vertrauensbeziehung richtig konfiguriert hast. Beispiel für eine Vertrauensbeziehung:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::example_awsaccountid:oidc-provider/oidc.eks.example_region.amazonaws.com/id/example_oidcid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.example_region.amazonaws.com/id/example_oidcid:aud": "sts.amazonaws.com", "oidc.eks.example_region.amazonaws.com/id/example_oidcid:sub": "system:serviceaccount:kube-system:cluster-autoscaler" } } } ] }
Hinweis: Ersetze example_awsaccountid durch deine AWS-Konto-ID, example_region durch deine Region und example_oidcid durch deine OIDC-ID.
Jedes Mal, wenn du die Rolle oder Richtlinie des Servicekontos änderst, führe den folgenden Befehl aus, um den Cluster Autoscaler Pod neu zu starten:
kubectl rollout restart deployment cluster-autoscaler -n kube-system
Cluster Autoscaler Pod hat Netzwerkprobleme
Stelle sicher, dass du den Amazon EKS-Cluster mit der erforderlichen Netzwerkeinrichtung konfiguriert hast. Stelle sicher, dass das Worker-Knoten-Subnetz über eine Routing-Tabelle verfügt, die den Datenverkehr an die folgenden Endpunkte weiterleiten kann:
- ec2.amazonaws.com für Amazon Elastic Compute Cloud (Amazon EC2)
- autoscaling.region.amazonaws.com für Amazon EC2 Auto Scaling
- sts.region.amazonaws.com für AWS Security Token Service (AWS STS)
Hinweis: Ersetze region durch deine Region.
Wenn der Amazon EKS-Cluster privat ist, musst du einen Amazon Virtual Private Cloud (Amazon VPC)-Endpunkt für die oben genannten Endpunkte erstellen.
Hinweis: Die Sicherheitsgruppe jedes VPC-Endpunkts muss die Amazon EKS-Worker-Knoten-Sicherheitsgruppe zulassen. Die Sicherheitsgruppen müssen außerdem eingehenden Datenverkehr zum Amazon EKS VPC CIDR-Block auf Port 443 zulassen.
Stelle sicher, dass die Netzwerk-Zugriffssteuerungsliste (Netzwerk-ACL) des Subnetzes und die Sicherheitsgruppen der Worker-Knoten den Datenverkehr zu diesen Endpunkten nicht blockieren.
Cluster Autoscaler skaliert keine Knoten ab oder auf
Überprüfe die Cluster-Autoscaler-Pod-Protokolle auf die Planungsregeln
Führe den folgenden Befehl aus, um den Status deiner Pods zu überprüfen:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Führe den folgenden Befehl aus, um zu überprüfen, ob der Pod mit dem Status Ausstehend Planungsregeln wie die Affinitätsregel enthält:
kubectl describe pod example_podname -n example_namespace
Hinweis: Ersetze example_podname durch den Pod-Namen und example_namespace durch deinen Namespace.
In der Ausgabe findest du im Abschnitt Ereignisse Informationen darüber, warum der Pod den Status Ausstehend hat. Beispielausgabe:
$ kubectl describe pod cluster-autoscaler-abcde-abcd -n kube-system Name: cluster-autoscaler-5b6b675456-npf8p ... Status: Pending ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 12s (x4 over 2m) default-scheduler 0/4 nodes are available: 1 node(s) didn't match node selector, 3 node(s) didn't match pod affinity rules.
Hinweis: Cluster Autoscaler berücksichtigt nodeSelector und requiredDuringSchedulingIgnoredDuringExecution in nodeAffinity. Stelle sicher, dass du deine Knotengruppen mit diesen Werten kennzeichnest. Führe den folgenden Befehl aus, um deine Knotengruppen zu kennzeichnen:
kubectl get nodes --show-labels
Wenn Cluster Autoscaler keinen Pod mit nodeSelector oder requiredDuringSchedulingIgnoredDuringExecution planen kann, verwendet der Cluster Autoscaler nur Knotengruppen, die die Erweiterungsanforderungen erfüllen. Um einen Pod auf einem Knoten zu planen, musst du die auf den Pods oder Knoten definierten Planungsregeln ändern. Weitere Informationen findest du unter Affinität und Anti-Affinität auf der Kubernetes-Website.
Überprüfe das Amazon EC2-Auto-Scaling-Gruppen-Tagging für den Cluster Autoscaler
Damit der Cluster Autoscaler eine Auto-Scaling-Gruppe erkennt, musst du die Amazon EC2-Auto-Scaling-Gruppe der Knotengruppe mit den folgenden Tags kennzeichnen.
Konfiguriere für Tag 1 die folgenden Werte:
- Gib unter Schlüssel k8s.io/cluster-autoscaler/example-cluster ein.
- Gib unter Wert owned ein.
Hinweis: Ersetze example-cluster durch deinen Cluster-Namen.
Konfiguriere für Tag 2 die folgenden Werte:
- Gib unter Schlüssel k8s.io/cluster-autoscaler/enabled ein.
- Gib unter Wert true ein.
Überprüfe die Konfiguration des Bereitstellungsmanifests
Führe den folgenden Befehl aus, um das Bereitstellungsmanifest zu öffnen:
kubectl -n kube-system edit deployment.apps/cluster-autoscaler
Stelle in der Ausgabe für node-group-auto-discover sicher, dass das Manifest den richtigen Cluster- oder Knotengruppennamen auflistet. Beispielausgabe:
containers:- 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/example-cluster --balance-similar-node-groups --skip-nodes-with-system-pods=false
Stelle sicher, dass du deine maximale Anzahl an Knoten nicht überschreitest
Führe den folgenden Befehl describe-nodegroup aus, um die aktuelle Anzahl von Knoten zu überprüfen:
aws eks describe-nodegroup --cluster-name example-cluster --nodegroup-name example-nodegroup
Hinweis: Ersetze example-cluster durch deinen Cluster-Namen und example-nodegroup durch deinen Knotengruppennamen.
Wenn du die minimale oder maximale Anzahl von Knoten erreicht hast, führe den folgenden Befehl update-nodegroup-config aus, um die Werte zu ändern:
aws eks update-nodegroup-config \ --cluster-name cluster-name \ --nodegroup-name nodegroup-name \ --scaling-config minSize=minvalue,maxSize=maxvalue,desiredSize=desiredvalue \
Hinweis: Ersetze cluster-name durch deinen Cluster-Namen und nodegroup-name durch deinen Knotengruppennamen. Ersetze außerdem minvalue durch die minimale Anzahl von Knoten, maxvalue durch die maximale Anzahl von Knoten und desiredvalue durch den gewünschten Wert von Knoten.
Stelle sicher, dass deine Knoten dem Cluster beitreten können
Prüfe, ob die neuen Instances, die die Amazon EC2-Auto-Scaling-Gruppe startet, dem Amazon EKS-Cluster beitreten können. Falls nicht, findest du weitere Informationen unter Wie bringe ich meine Worker-Knoten dazu, meinem Amazon EKS-Cluster beizutreten?
Stelle sicher, dass du den richtigen Knoten-Instance-Typ verwendest
Führe den folgenden Befehl aus, um zu überprüfen, ob Cluster Autoscaler die Pod-Ressourcenanforderung mit den aktuellen Knoten-Instance-Typen erfüllen kann:
kubectl -n example_namespace get pod example_podname -o yaml | grep resources -A6
**Hinweis:**Ersetze example-cluster durch deinen Cluster-Namen und example-podname durch deinen Pod-Namen.
Beispielausgabe:
containers: - image: registry.k8s.io/autoscaling/cluster-autoscaler:v1.32.1 name: cluster-autoscaler resources: limits: cpu: 100m memory: 600Mi requests: cpu: 100m memory: 600Mi
Überprüfe in der Ausgabe die Werte für limits und requests. Stelle sicher, dass die Werte für cpu und memory hoch genug sind, damit der Knoten den Pod behalten kann. Führe den folgenden Befehl aus, um die Anforderungen deines Pods anzuzeigen:
kubectl describe pod podname -n namespace,
Hinweis: Ersetze podname durch deinen Pod-Namen und namespace durch deinen Namespace.
Wenn die Pod-Anforderungen höher sind als die Fähigkeiten des Knotens, verwende den Befehl kubectl edit, um die Werte für limits und requests für Speicherressourcen in der Cluster-Autoscaler-Bereitstellung zu erhöhen. Oder erstelle eine neue Knotengruppe mit einem anderen Instance-Typ, der die Ressourcenanforderungen des Pods erfüllt. Weitere Informationen zu kubectl edit findest du unter kubectl edit auf der Kubernetes-Website.
Überprüfe die Taint-Konfiguration für den Knoten in der Knotengruppe
Führe den folgenden Befehl aus, um zu überprüfen, ob du Taints für den Knoten konfiguriert hast und der Pod die Taints tolerieren kann:
kubectl describe node example_nodename | grep taint -A2
Hinweis: Ersetze example_nodename durch deinen Knotennamen.
Wenn du Taints konfiguriert hast, entferne die auf dem Knoten definierten Taints. Schritte findest du unter Dein Pod befindet sich im Status Ausstehend unter Wie kann ich den Pod-Status in Amazon EKS beheben? Wenn der Pod keine Taints toleriert, definiere die Toleranz auf dem Pod. Weitere Informationen findest du unter Taints and Tolerations auf der Kubernetes-Website.
Stelle sicher, dass für den Knoten das Herunterskalieren nicht deaktiviert ist
Führe den folgenden Befehl aus, um den Status von scale-down-disable auf deinem Knoten zu überprüfen:
kubectl describe node example_nodename | grep scale-down-disable
Hinweis: Ersetze example_nodename durch deinen Knotennamen.
Beispielausgabe:
cluster-autoscaler.kubernetes.io/scale-down-disabled: true
Wenn scale-down-disable auf true gesetzt ist, führe den folgenden Befehl aus, um die Anmerkung für den Knoten zu entfernen und ihn herunterskalieren zu lassen:
kubectl annotate node example_nodename cluster-autoscaler.kubernetes.io/scale-down-disabled-
Hinweis: Ersetze example_nodename durch deinen Knotennamen.
Weitere Schritte zur Fehlerbehebung bei Cluster Autoscaler findest du unter Häufig gestellte Fragen auf der GitHub-Website.
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 10 Monaten
AWS OFFICIALAktualisiert vor einem Jahr