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

Lesedauer: 5 Minute
0

Meine Amazon Elastic Kubernetes Service (Amazon EKS)-Pods, die auf AWS-Fargate-Instances ausgeführt werden, befinden sich im Status „Ausstehend“.

Kurzbeschreibung

Ihre Amazon-EKS-Pods, die AWS Fargate verwenden, können aus mehreren Gründen im Status Ausstehend bleiben:

  • Es liegt ein Kapazitätsehler vor, weil eine bestimmte vCPU-Speicher-Kombination nicht verfügbar ist.
  • Sie haben die CoreDNS-Pods mit einer Standardanmerkung erstellt, die sie dem Datenverarbeitungstyp Amazon Elastic Compute Cloud (Amazon EC2) zuordnet. Um sie auf einem Fargate-Knoten zu planen, entfernen Sie den Amazon-EC2-Datenverarbeitungstyp.
  • Als Sie den Pod erstellt und dem fargate-scheduler zugewiesen haben, stimmte der Pod mit keinem Fargate-Profil überein. Wenn ein Pod bei der Erstellung mit keinem Profil übereinstimmt, wird er nicht automatisch auf Fargate-Knoten neu geplant. Dies gilt auch dann, wenn Sie später ein übereinstimmendes Profil erstellen. In diesem Fall wird der Pod dem default-scheduler zugewiesen.
  • Wenn der Pod dem fargate-scheduler zugewiesen ist, aber im Status Ausstehend verbleibt, erfordert der Pod möglicherweise zusätzliche Fehlerbehebungen.

Behebung

Voraussetzungen

  • Konfigurieren Sie den Namespace und geben Sie (optional) Kubernetes-Labels an, die den Labels für Ihre Pod-Selektoren entsprechen. Der Fargate-Workflow ordnet Pods nur dann einem Fargate-Profil zu, wenn beide Bedingungen der Pod-Spezifikation entsprechen.
  • Wenn Sie in einem Fargate-Profil mehrere Pod-Selektoren angeben, plant der fargate-scheduler den Pod, wenn er mit einem der Selektoren übereinstimmt.
  • Wenn eine Pod-Spezifikation mit mehreren Fargate-Profilen übereinstimmt, wird der Pod nach einem zufälligen Fargate-Profil geplant. Um dies zu vermeiden, verwenden Sie die Anmerkung eks.amazonaws.com/fargate-profile:fp_name innerhalb der Pod-Spezifikation. Ersetzen Sie fp_name durch den Namen Ihres Fargate-Profils.

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 How can I troubleshoot the pod status in Amazon EKS?

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. Führen Sie den folgenden describe-Befehl aus, um weitere Fehlerinformationen zu Ihrem Pod zu erhalten:

kubectl describe pod YOUR\_POD\_NAME -n <namespace>

Verwenden Sie die Ausgabe des Befehls describe, um die nötigen Lösungsschritte zu bestimmen.

Beheben eines Kapazitätsfehlers

Wenn bei Ihren Pods ein Kapazitätsproblem auftritt, sieht die describe-Ausgabe etwa wie folgt aus:

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

Diese Ausgabe bedeutet, dass Fargate auf Grundlage der ausgewählten vCPU-Speicher-Kombination keine Rechenkapazität bereitstellen kann.

Gehen Sie wie folgt vor, um diesen Fehler zu beheben:

  • Versuchen Sie nach 20 Minuten erneut, den Pod zu erstellen. Da der Fehler kapazitätenabhängig ist, kann die genaue Zeitdauer variieren.
  • Ändern Sie die Anfrage (CPU und Speicher) in Ihrer Pod-Spezifikation. Informationen zur Pod-Spezifikation finden Sie auf der Kubernetes-Website unter How Kubernetes applies resource requests and limits. Der Fargate-Workflow stellt dann eine neue Kombination von vCPU und Arbeitsspeicher bereit.
    **Hinweis:**Die Abrechnung erfolgt auf Basis einer Ihrer Kombinationen. Weitere Informationen darüber, wie die Kombination abhängig von Ihrer Pod-Spezifikation erstellt wird, finden Sie unter Pod-CPU und -Arbeitsspeicher. Führen Sie einen kubectl describe node-Befehl von Ihrem Terminal oder der Integrated Development Environment (IDE) aus, um eine höherwertige vCPU-Arbeitsspeicher-Kombination zu erhalten. Fargate verfügt nicht immer über die nötigen Kapazitäten, um Ihre Anfragen zu bedienen. Fargate stellt jeweils die bestmöglichen Ressourcen aus einem vorhandenen Kapazitätspool bereit. Ihnen wird jedoch nur die Pod-Nutzung und die entsprechende Kombination von vCPU und Arbeitsspeicher in Rechnung gestellt.

Beheben von Problemen mit CoreDNS-Pods im Status „Ausstehend“

Wenn sich CoreDNS-Pods im Status Ausstehend befinden, wird eine Ausgabe wie die folgende Meldung angezeigt:

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

Der Grund dafür könnte sein, dass die CoreDNS-Bereitstellung die folgende Standardanmerkung hat: eks.amazonaws.com/compute-type : ec2.

Um dieses Problem zu lösen und die Pods dem Fargate-Scheduler neu zuzuweisen, siehe Aktualisieren: CoreDNS.

Beheben von Problemen mit Pods, die dem Fargate-Scheduler zugewiesen sind

Pods, die dem fargate-scheduler zugewiesen sind, können aus verschiedenen Gründen im Status Ausstehend bleiben. Wenn sich Ihre Pods weiterhin im Status Ausstehend befinden, ähnelt die describe-Ausgabe der folgenden Meldung:

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

Gehen Sie wie folgt vor, um den Fehler zu beheben:

  • Löschen Sie die Pods und erstellen Sie sie neu.
  • Vergewissern Sie sich, dass die folgenden Spezifikationen nicht in der Pod-Spezifikations-YAML festgelegt sind. Diese Spezifikationen können dazu führen, dass der fargate-scheduler den Pod überspringt:
    Knotenselektor
    <>Knotenname
    schedulerName
  • 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 dass eine Elastic IP-Adresse angehängt ist.
  • Vergewissern Sie sich, dass die DHCP-Optionssätze, die Ihrer Virtual Private Cloud (VPC) zugeordnet sind, einen AmazonProvidedDNS- oder einen gültigen DNS-Server-Hostnamen für domain-name-servers 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 Dienstkommunikation konfiguriert sind, müssen Sie diese Endpunkte mit DNS-Namen zulassen:
    ECR - API
    ECR - DKR
    S3 Gateway-Endpunkt
  • Vergewissern Sie sich, dass die Sicherheitsgruppe, die an den VPC-Endpunkt angehängt ist, Fargate-Kommunikation zum und vom API-Server zulässt. Die VPC-Endpunkt-Sicherheitsgruppe muss den Ingress von Port 443 vom Cluster-VPC-CIDR zulassen. Sie müssen außerdem privaten Endpunktzugriff für Ihren Cluster aktivieren.

Auflösen von Pods, die dem default-scheduler zugewiesen sind

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

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

Stellen Sie sicher, dass der schedulerName in der Ausgabe fargate-scheduler lautet. Wenn dort 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 vom Typ Compute. Weitere Informationen finden Sie unter Überlegungen zu AWS Fargate.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten