Wie kann ich Amazon-EKS-Pods auf AWS Fargate beheben, die sich im Status „Ausstehend“ befinden?

Letzte Aktualisierung: 21.11.2022

Meine Amazon-Elastic-Kubernetes-Service-Pods (Amazon EKS), die auf AWS-Fargate-Instances ausgeführt werden, stecken im Status „Ausstehend“ fest. Wie kann ich diese Pods zum Laufen bringen?

Kurzbeschreibung

Im Folgenden sind einige häufige Szenarien aufgeführt, die dazu führen, dass Pods auf Amazon Elastic Kubernetes Service (Amazon EKS) mithilfe von AWS Fargate im Status Pending stecken bleiben:

  • Es liegt ein Kapazitätsfehler vor, da eine bestimmte VCPU/Speicherkombination nicht verfügbar ist.
  • Die CoreDNS-Pods wurden mit einer Standardannotation erstellt, die sie dem Datenverarbeitungstyp „Amazon Elastic Compute Cloud (Amazon EC2)“ zuordnet. Der EC2 muss entfernt werden, um sie auf einem Fargate-Knoten zu planen.
  • Der Pod stimmte bei seiner Erstellung mit keinem Fargate-Profil überein und ist nicht dem Fargate-Scheduler zugewiesen. Wenn ein Pod bei der Erstellung nicht abgeglichen wird, dann wird er nicht automatisch auf Fargate-Knoten verschoben, auch wenn später ein passendes Profil erstellt wird. In diesem Fall wird der Pod dem Standard-Scheduler zugewiesen.
  • Wenn der Pod dem Fargate-Scheduler zugewiesen ist, sich aber im Status Ausstehend befindet, ist möglicherweise zusätzliche Fehlerbehebung erforderlich.

Beachten Sie vor der Fehlerbehebung die folgenden Pod-Regeln von Fargate:

  • Sie müssen sowohl Namespace- als auch Übereinstimmungsbeschriftungen für Ihre Pod-Selektoren konfigurieren. Der Fargate-Workflow ordnet Pods nur dann einem Fargate-Profil zu, wenn beide Bedingungen der Pod-Spezifikation entsprechen.
  • Wenn Sie mehrere Pod-Selektoren innerhalb eines einzelnen Fargate-Profils angeben, wird der Pod nach Fargate-Zeitplan geplant, wenn er mit einem der Selektoren übereinstimmt.
  • Wenn eine Pod-Spezifikation mit mehreren Fargate-Profilen übereinstimmt, dann wird der Pod gemäß einem zufälligen Fargate-Profil geplant. Um dies zu vermeiden, können Sie die Anmerkung eks.amazonaws.com/fargate-profile: innerhalb der Pod-Spezifikation verwenden.

Lösung

Wichtig: Die folgenden Schritte gelten nur für Pods, die mit AWS Fargate gestartet wurden. Informationen zu Pods, die auf Amazon-EC2-Instances gestartet wurden, finden Sie unter Wie kann ich den Pod-Status in Amazon EKS beheben?

Herausfinden des Status Ihres Pods

1.    Führen Sie den folgenden Befehl aus, um Ihren Pod-Status zu überprüfen:

kubectl get pods -n <namespace>

2.    Um weitere Fehlerinformationen zu Ihrem Pod zu erhalten, führen Sie den folgenden Befehl describe aus:

kubectl describe pod YOUR_POD_NAME -n <namespace>

Anhand der Ausgabe des Befehls describe können Sie herausfinden, welche der folgenden Lösungen Ihnen bei der Behebung Ihres Problems helfen.

Kapazitätsfehler beheben

Wenn Ihre Pods ein Kapazitätsproblem haben, ähnelt die Ausgabe von describe der folgenden:

Fargate capacity is unavailable at this time. Please try again later or in a different availability zone

Das bedeutet, dass Fargate auf der Grundlage der von Ihnen ausgewählten vCPU/Speicherkombination keine Datenverarbeitungskapazität bereitstellen kann.

Um den Fehler zu beheben, gehen Sie wie folgt vor:

  • Versuchen Sie nach 15 bis 20 Minuten erneut, den Pod zu erstellen. Da der Fehler kapazitätsabhängig ist, kann die genaue Zeitspanne variieren.
  • Ändern Sie die Anforderung (CPU/Speicher) innerhalb Ihrer Pod-Spezifikation. Eine neue Kombination aus VCPU/Arbeitsspeicher wird dann vom Fargate-Workflow bereitgestellt.
    Hinweis: Gebühren werden Ihnen basierend auf einer Ihrer Kombinationen berechnet. Weitere Informationen dazu, wie die Kombination basierend auf Ihrer Pod-Spezifikation finalisiert wird, finden Sie unter Pod-CPU und Arbeitsspeicher. Wenn Sie einen Befehl kubectl describe node von Ihrem Terminal/IDE aus ausführen, erhalten Sie einen viel höheren Kombinationswert für VCPU/Speicher. Fargate verfügt nicht immer über Kapazitäten, die auf Ihren Anforderungen basieren, und stellt Ressourcen aus einem Kapazitätspool nach bestem Aufwand bereit. Ihnen wird jedoch nur die Pod-Nutzung und eine entsprechende VCPU-/Speicherkombination in Rechnung gestellt.

Auflösen von CoreDNS-Pods im Zustand „Ausstehend“

Wenn sich die CoreDNS-Pods im Status Ausstehend befinden:

kubectl get pods -n kube-system<br>NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Dies könnte daran liegen, dass die CoreDNS-Bereitstellung die folgende Standardannotation hat: eks.amazonaws.com/compute-type: ec2.

Informationen zur Behebung dieses Problems und zur erneuten Zuweisung der Pods zum Fargate-Scheduler finden Sie unter Aktualisieren von CoreDNS.

Fehlerbehebung bei Pods, die Fargate-Scheduler zugewiesen sind

Es gibt mehrere Gründe, warum Pods, die dem Fargate-Scheduler zugewiesen wurden, in Ausstehend hängen bleiben könnten. Dies reicht von einer Fehlkonfiguration der Pod-Annotation bis hin zu Netzwerkproblemen. Wenn Ihre Pods weiterhin den Status Ausstehend haben, ähnelt die Ausgabe von describe der folgenden:

Events:
Type       Reason              Age                     From     
----       ------              ----                    ----     
Warning    FailedScheduling    2m25s (x301 over 5h3m)  fargate-scheduler

Zur Behebung dieses Problems gehen Sie folgendermaßen vor:

  • Löschen Sie die Pods und erstellen Sie sie neu.
  • Vergewissern Sie sich, dass in der Pod-Spezifikation YAML Folgendes nicht festgelegt ist:
    Knoten-Selektor
    <>Knotenname
    Name des Zeitplaners
    Diese Spezifikationen führen dazu, dass der Fargate-Scheduler den Pod überspringt.
  • Vergewissern Sie sich, dass die in Ihrem Fargate-Profil ausgewählten Subnetze über genügend freie IP-Adressen verfügen, um neue Pods zu erstellen. Jeder Fargate-Knoten verbraucht eine IP-Adresse aus dem Subnetz.
  • Vergewissern Sie sich, dass das NAT-Gateway auf ein öffentliches Subnetz eingestellt ist und an das eine Elastic IP angeschlossen ist.
  • Vergewissern Sie sich, dass die DHCP-Optionssätze, die mit Ihrer VPC verknüpft sind, einen von Amazon bereitgestellten DNS- oder einen gültigen DNS-Server-Hostnamen für Domain-Name-Server haben.
  • Vergewissern Sie sich, dass die DNS-Hostnamen und die DNS-Auflösung für Ihre VPC aktiviert sind.
  • Wenn Ihre Fargate-Pods private Subnetze verwenden, bei denen nur VPC-Endpunkte für die Servicekommunikation konfiguriert sind, müssen Sie diese Endpunkte mit DNS-Namen zulassen:
    ECR – API
    ECR – DKR
    S3-Gateway-Endpunkt
  • Bestätigen Sie, dass die an den VPC-Endpunkt angehängte Sicherheitsgruppe die Kommunikation von Fargate zum und vom API-Server ermöglicht. Die VPC-Endpunktsicherheitsgruppe muss den Zugriff auf Port 443 vom Cluster-VPC-CIDR zulassen. Der private Endpunktzugriff muss auch für Ihren Cluster aktiviert sein.

Auflösen von Pods, die dem Standard-Scheduler zugewiesen sind

Führen Sie den folgenden Befehl aus, um den Scheduler zu ermitteln, dem Ihre Pods zugewiesen sind:

kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.

Vergewissern Sie sich in der Ausgabe, dass der schedulerName default-scheduler ist. Wenn er als default-scheduler aufgeführt ist, hat der Fargate-Scheduler diesen Pod übersprungen. Um dieses Problem zu beheben, überprüfen Sie Ihre Pod-Konfiguration auf Anmerkungen zum Computertyp und lesen Sie sich die Überlegungen zu AWS Fargate durch.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?