Wie behebe ich Probleme beim Erstellen eines AWS Fargate-Profils?

Letzte Aktualisierung: 04.11.2021

Ich habe Fragen zum Erstellen eines AWS-Fargate-Profils. Oder ich habe Probleme beim Erstellen eines AWS-Fargate-Profils. Wie kann ich das Problem beheben?

Kurzbeschreibung

Ein Fargate-Profil ist ein Mechanismus, um festzulegen, welche Pods auf Fargate-Knoten in einem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster geplant werden sollen.

Ein Fargate-Profil verfügt über Selektoren, die mit jeder YAML-Datei für eingehende Pod-Spezifikationen abgeglichen werden. Wenn die Übereinstimmung erfolgreich ist und die AWS-Fargate-Überlegungen erfüllt sind, wird der Pod auf Fargate-Knoten mithilfe von Subnetzen und der im Fargate-Profil angegebenen AWS Identity and Access Management (IAM)-Rolle geplant.

Einige der Regeln für die Pod-Platzierung lauten wie folgt:

  • Wenn Sie sowohl Namespace- als auch Übereinstimmungsbeschriftungen für Ihre Pod-Selektoren konfiguriert haben:
    Der Fargate-Workflow betrachtet Ihren Pod nur dann als mit einem Fargate-Profil abgeglichen, wenn beide Bedingungen (Namespace und Labels) mit der Pod-Spezifikation übereinstimmen.
  • Wenn Sie mehrere Pod-Selektoren in einem einzigen Fargate-Profil angegeben haben:
    Wenn ein Pod mit einem dieser Selektoren übereinstimmt, wird er vom Fargate-Scheduler auf einem Fargate-Knoten mit Daten aus dem übereinstimmenden Fargate-Profil geplant.
  • Wenn eine Pod-Spezifikation mit mehreren Fargate-Profilen übereinstimmt:
    Der Pod wird nach einem zufälligen Fargate-Profil geplant, es sei denn, die folgende Anmerkung ist in der Pod-Spezifikation angegeben: eks.amazonaws.com/fargate-profile:<fp_name>.

Beachten Sie beim Erstellen eines Fargate-Profils die folgenden Einschränkungen:

  • Sie können bis zu zehn Fargate-Profile pro Cluster erstellen.
  • Pro Fargate-Profil können Sie bis zu fünf Selektoren haben.
  • Sie können bis zu fünf Beschriftungspaare pro Selektor haben.

Auflösung

Im Folgenden sind häufige Szenarien und Probleme beim Erstellen eines Fargate-Profils aufgeführt:

Wie kann ich ein Fargate-Profil erstellen, um Pods auf Fargate-Knoten zu planen?

Sie können die Amazon-EKS-Konsole, die AWS Command Line Interface (AWS CLI), das SDK oder die API (CloudFormation/EKSCTL usw.) verwenden, um ein Fargate-Profil zu erstellen.

Wie kann ich mit AWS CloudFormation ein Fargate-Profil erstellen?

Sie können den Ressourcentyp AWS::EKS::FargateProfile CloudFormation verwenden, um ein Fargate-Profil zu erstellen.

Wenn Sie jedoch keine Amazon Elastic Compute Cloud (Amazon EC2)-Knotengruppen zusammen mit Fargate-Knoten erstellen, haben coredns-Add-Ons standardmäßig die folgende Anmerkung:

eks.amazonaws.com/compute-type : ec2

Um die coredns-Anmerkungen zu ändern, müssen Sie Ihre Bereitstellung extern patchen. Sie können dies von dem Terminal aus tun, in dem Sie Ihren EKS-Cluster verwalten. Oder Sie können eine benutzerdefinierte CloudFormation-Ressource verwenden, um diesen Prozess basierend auf Ihrem Anwendungsfall zu automatisieren.

Hinweis: Es empfiehlt sich, eksctl zum Erstellen/Aktualisieren von EKS-Clustern zu verwenden, da dies die Verwaltung von Cluster-Ressourcen vereinfacht.

Was ist die Pod-Ausführungsrolle, die im Fargate-Profil enthalten sein muss?

Die Pod-Ausführungsrolle ist eine IAM-Rolle, die vom Fargate-Knoten für AWS-API-Aufrufe verwendet wird. Dazu gehören Aufrufe zum Abrufen von Amazon Elastic Container Registry (Amazon ECR)-Images wie VPC, CNI, CoreDNS usw. Die verwaltete AmazonEKSFargatePodExecutionRolePolicy-Richtlinie muss dieser Rolle beigefügt werden.

Kubelet auf dem Fargate-Knoten verwendet diese IAM-Rolle, um mit dem API-Server zu kommunizieren. Diese Rolle muss in der aws-auth configmap enthalten sein, damit sich Kubelet beim API-Server authentifizieren kann. Wenn Sie ein Fargate-Profil erstellen, fügt der Fargate-Workflow diese Rolle automatisch der aws-auth configmap des Clusters hinzu.

Wenn Ihre Fargate-Knoten als „Nicht bereit“ angezeigt werden, stellen Sie sicher, dass die Pod-Ausführungsrolle in aws-auth enthalten ist.

Das Folgende ist ein Beispiel für ein aws-Auth mapRoles-Snippet nach dem Erstellen eines Fargate-Profils mit einer Pod-Ausführungsrolle:

mapRoles: |   
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:node-proxier
      rolearn: <Pod_execution_role_ARN>
      username: system:node:{{SessionName}}

Wenn die aws-auth configmap nach dem Erstellen des Fargate-Profils geändert wird, wird beim Planen von Pods auf Fargate-Knoten möglicherweise die folgende Warnung angezeigt:

Pod provisioning timed out (will retry) for pod: <pod_nginx>

Ich plane, Workloads auf EKS Fargate zu migrieren. Wie erstelle ich Subnetze und Sicherheitsgruppen zur Verwendung?

EKS Fargate unterstützt derzeit nur private Subnetze. Das bedeutet, dass es in den Routing-Tabellen, die an die in Ihrem Fargate-Profil angegebenen Subnetzen angehängt sind, keine Standard-Route zum Internet-Gateway gibt. Sie können also entweder ein NAT-Gateway oder VPC-Endpunkte für die Subnetze konfigurieren lassen, die Sie für das Fargate-Profil verwenden möchten.

Die Cluster-Sicherheitsgruppe ist standardmäßig an Fargate-Knoten angehängt. Sie müssen keine Sicherheitsgruppe speziell für diesen Zweck bereitstellen. Wenn Sie VPC-Endpunkte für Ihre Subnetze verwenden, stellen Sie außerdem sicher, dass für den Cluster der private Endpunktzugriff aktiviert ist.

Stellen Sie sicher, dass die Sicherheitsgruppe, die an die VPC-Endpunkte angeschlossen ist, über eine eingehende Regel verfügt, die den Datenverkehr von HTTPS Port 443 der VPC-CIDR des Clusters zulässt.

Ich erstelle Fargate-Profile mit einem API-basierten Bereitsteller wie Terraform oder AWS CloudFormation. Warum gehen meine Fargate-Profile in den Zustand CREATE_FAILED über.

Es kann jeweils nur ein Fargate-Profil erstellt oder gelöscht werden. Wenn Sie also ein Fargate-Profil löschen, können keine anderen Fargate-Profile gleichzeitig erstellt oder gelöscht werden.

Stellen Sie bei der Verwendung eines API-basierten Bereitstellers wie CloudFormation sicher, dass die Erstellung eines Fargate-Profils beginnt, nachdem alle anderen Fargate-Profile erfolgreich erstellt wurden. Sie können eine kettenartige Hierarchie unter Fargate-Profilen mithilfe des DependsOn-Attributs erstellen, sodass das Erstellen und Löschen sequenziell erfolgt. Wenn die Anforderungen nicht sequenziell sind, wird möglicherweise ein Fehler ähnlich dem folgenden angezeigt:

Cannot create Fargate Profile <fp_name1> because cluster <cluster_name> currently has Fargate profile <fp_name2> in status CREATING

Kann ich die Ressourcen (CPU, Arbeitsspeicher) angeben, die für Fargate-Knoten innerhalb des Fargate-Profils bereitgestellt werden sollen?

Sie können die Menge der Ressourcen, die innerhalb des Fargate-Profils bereitgestellt werden sollen, nicht direkt angeben. Es ist eine bewährte Methode, Ressourcenanforderungen in Ihrer YAML-Datei mit Fargate-Pod-Spezifikation anzugeben. Auf diese Weise kann der Fargate-Workflow mindestens diese Menge an Ressourcen für den Pod zuweisen.

Die Menge an vCPU oder Arbeitsspeicher, die Sie nach der Ausführung des Befehls kubectl describe node <node_name> sehen, entspricht möglicherweise nicht der Menge an CPU oder Arbeitsspeicher, die Sie für den Pod angefordert haben. Die Menge an Arbeitsspeicher und CPU, über die der Knoten verfügt, hängt von der verfügbaren Kapazität im Fargate-Ressourcenzuweisungspool ab. Sie werden gemäß dem Betrag in Rechnung gestellt, den Sie in Ihrer Pod-Spezifikation angefordert haben. Die Menge der mit kubectl sichtbaren Ressourcen wird Ihnen nicht in Rechnung gestellt.

CPU und Arbeitsspeicher werden von AWS Fargate immer als diskrete Kombinationen bereitgestellt und abgerechnet. Der abrechenbare Betrag beinhaltet die Nutzung durch andere Komponenten als den Pod, der auf dem Knoten ausgeführt wird, wie Kubelet, Kube-Proxy usw. Wenn Sie beispielsweise eine vCPU und acht GB Speicher für Ihren Pod anfordern, wird Ihnen die nächsthöhere Kombination aus zwei vCPU und neun GB Speicher in Rechnung gestellt. Dies berücksichtigt die Ressourcen, die von Kubelet und anderen Kubernetes-Komponenten auf dem Knoten verwendet werden. Weitere Informationen finden Sie unter Pod-CPU und Arbeitsspeicher.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?