Starten selbstverwalteter Amazon Linux-Knoten - Amazon EKS

Starten selbstverwalteter Amazon Linux-Knoten

Dieses Thema beschreibt Hinweise zum Starten von Auto-Scaling-Gruppen von Linux-Knoten, die mit Ihrem Amazon-EKS-Cluster registriert sind. Nachdem die Knoten dem Cluster beigetreten sind, können Sie Kubernetes-Anwendungen darin bereitstellen. Sie können auch selbst verwaltete Amazon-Linux-2-Knoten mit eksctl oder AWS Management Console launchen.

Voraussetzungen

eksctl

Voraussetzung

Version 0.102.0 oder höher des eksctl-Befehlszeilen-Tools, das auf Ihrem Computer oder AWS CloudShell installiert ist. Informationen zum Installieren oder Aktualisieren von eksctl finden Sie unter Installieren von eksctl.

So starten Sie selbstverwaltete Linux-Knoten miteksctl

  1. (Optional) Wenn die von verwaltete AmazonEKS_CNI_Policy IAM-Richtlinie an Ihre Amazon-EKS-Knoten-IAM-Rolle angefügt ist, sollten Sie sie stattdessen einer IAM-Rolle zuzuweisen, die Sie dem aws-node-Servicekonto für Kubernetes zuordnen. Weitere Informationen finden Sie unter Konfigurieren des Amazon VPC CNI plugin for Kubernetes zur Verwendung von IAM-Rollen für Servicekonten.

  2. Der folgende Befehl erstellt eine Knotengruppe in einem vorhandenen Cluster. Ersetzen Sie jede example-value durch Ihre eigenen Werte. Die Knoten werden standardmäßig mit derselben Kubernetes-Version wie die Steuerebene erstellt.

    Bevor Sie einen Wert für --node-type wählen, sehen Sie sich Auswählen eines Amazon-EC2-Instance-Typs an.

    Ersetzen Sie my-key mit dem Namen Ihres Amazon-EC2-Schlüsselpaars oder öffentlichen Schlüssels. Dieser Schlüssel wird verwendet, um SSH in Ihre Knoten nach dem Start. Wenn Sie noch kein Amazon-EC2-Schlüsselpaar haben, können Sie eines in der AWS Management Console erstellen. Weitere Informationen finden Sie unter Amazon-EC2-Schlüsselpaare im Amazon-EC2-Benutzerhandbuch für Linux-Instances.

    Erstellen Sie Ihre Worker-Knoten-Gruppe mit dem folgenden Befehl.

    Wichtig

    Wenn Sie eine Knotengruppe in den Subnetzen AWS Outposts, Wavelength oder Local Zone bereitstellen möchten, gibt es zusätzliche Überlegungen:

    • Die Subnetze dürfen beim Erstellen des Clusters nicht übergeben worden sein.

    • Sie müssen die Knotengruppe mit einer Konfigurationsdatei erstellen, die die Subnetze und volumeType: gp2 angibt. Weitere Informationen finden Sie unter Verwenden von Config-Dateien und im Config-Datei-Schema in der eksctl-Dokumentation.

    eksctl create nodegroup \ --cluster my-cluster \ --name al-nodes \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --managed=false \ --ssh-public-key my-key

    Um eine Knotengruppe bereitzustellen, die es Ihrer Instance ermöglicht, Pods eine deutlich höhere Anzahl von IP-Adressen zuzuweisen, weisen Sie Pods IP-Adressen aus einem anderen CIDR-Block als dem der Instance zu. Weitere Informationen finden Sie unter Erhöhen Sie die Anzahl der verfügbaren IP-Adressen für Ihre Amazon-EC2-Knoten und Tutorial: Benutzerdefinierte Netzwerke. Um die containerd-Laufzeit zu aktivieren, müssen Sie die Knotengruppe mithilfe einer Konfigurationsdatei bereitstellen. Weitere Informationen finden Sie unter Aktivieren der containerd-Laufzeit-Bootstrap-Flag. Anweisungen zum Bereitstellen einer privaten Knotengruppe ohne ausgehenden Internetzugang finden Sie unter Anforderungen an private Cluster. Geben Sie den folgenden Befehl ein, um eine vollständige Liste aller verfügbaren Optionen und Standardwerte anzuzeigen.

    eksctl create nodegroup --help

    Wenn Arbeitsknoten dem Cluster nicht beitreten können, finden Sie weitere Informationen unter Worker-Knoten können nicht mit dem Cluster verknüpft werden im Handbuch zur Fehlerbehebung.

    Die Beispielausgabe lautet wie folgt. Mehrere Zeilen werden ausgegeben, während die Knoten erstellt werden. Die letzte Ausgabezeile ähnelt der folgenden Beispielzeile.

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. Wir empfehlen, den Pod-Zugriff auf das IMDS zu blockieren, wenn die folgenden Bedingungen erfüllt sind:

    • Sie planen, allen Ihren Kubernetes-Servicekonten IAM-Rollen zuzuweisen, damit Pods nur die Mindestberechtigungen haben, die sie benötigen.

    • Keine Pods im Cluster benötigen aus anderen Gründen Zugriff auf den Amazon-EC2-Instance-Metadaten-Service (IMDS), zum Beispiel zum Abrufen der aktuellen AWS-Region.

    Weitere Informationen finden Sie unter Beschränken Sie den Zugriff auf das Instance-Profil, das dem Worker-Knoten zugewiesen ist.

AWS Management Console

Schritt 1: Um selbstverwaltete Linux-Knoten mit dem AWS Management Console zu starten

  1. Laden Sie die neueste Version des AWS CloudFormation-Quellcodes herunter.

    curl -o amazon-eks-nodegroup.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
  2. Warten Sie, bis der Status des Clusters als ACTIVE angezeigt wird. Wenn Sie Ihre Knoten starten, bevor der Cluster aktiv ist, werden die Knoten nicht mit dem Cluster registriert und Sie müssen sie neu starten.

  3. Öffnen Sie die AWS CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation.

  4. Wählen Sie Create stack (Stack erstellen) und dann With new resources (standard) (Mit neuen Ressourcen (Standard)) aus.

  5. Wählen Sie für Specify template (Vorlage festlegen) Upload a template file (Vorlagendatei hochladen) aus und wählen Sie dann Choose file (Datei wählen). Wählen Sie das ausamazon-eks-nodegroup.yaml-Datei, die Sie in Schritt 2 heruntergeladen haben, und wählen Sie dann Weiter aus.

  6. Geben Sie auf der Seite Specify stack details (Stack-Details angeben) die folgenden Parameter ein und klicken Sie dann auf Next (Weiter):

    • Stack name (Stack-Name): Wählen Sie einen Stack-Namen für Ihren AWS CloudFormation-Stack aus. Sie können ihn beispielsweise cluster-name-nodes nennen. Der Name darf nur alphanumerische Zeichen (wobei die Groß- und Kleinschreibung beachtet werden muss) und Bindestriche enthalten. Er muss mit einem alphabetischen Zeichen beginnen und darf nicht mehr als 128 Zeichen umfassen.

    • ClusterName: Geben Sie den Namen ein, den Sie beim Erstellen Ihres Amazon-EKS-Clusters verwendet haben. Dieser Name muss exakt mit dem Clusternamen übereinstimmen, andernfalls werden Ihre Knoten dem Cluster nicht beitreten.

    • ClusterControlPlaneSecurityGroup: Wählen Sie den SecurityGroups-Wert aus der AWS CloudFormation-Ausgabe, die Sie mit VPC erstellt haben.

      Die folgenden Schritte zeigen einen Vorgang zum Abrufen der entsprechenden Gruppe.

      1. Öffnen Sie die Amazon-EKS-Konsole unterhttps://console.aws.amazon.com/eks/home#/clusters.

      2. Wählen Sie den Namen des Clusters.

      3. Wählen Sie die Registerkarte Network (Network) aus.

      4. Verwenden Sie den Wert Additional security groups (Zusätzliche Sicherheitsgruppen) als Referenz bei Auswahl aus der Dropdown-Liste ClusterControlPlaneSecurityGroup.

    • NodeGroupName: Geben Sie einen Namen für Ihren Knotengruppe ein. Dieser Name kann zu einem späteren Zeitpunkt zum Identifizieren der Auto-Scaling-Knotengruppe verwendet werden, die für Ihre Knoten verwendet wird.

    • NodeAutoScalingGroupMinSize: Geben Sie die Mindestanzahl an Knoten an, in die Ihre Auto Scaling-Gruppe des Worker-Knotens skaliert werden kann.

    • NodeAutoScalingGroupDesiredCapacity: Geben Sie die gewünschte Anzahl von Knoten ein, auf die beim Erstellen des Stacks skaliert werden soll.

    • NodeAutoScalingGroupMaxSize: Geben Sie die Höchstanzahl an Knoten an, aus der Ihre Auto Scaling-Gruppe des Worker-Knotens skaliert werden kann.

    • NodeInstanceType: Wählen Sie einen Instance-Typ für Ihre Worker-Knoten aus. Weitere Informationen finden Sie unter Auswählen eines Amazon-EC2-Instance-Typs.

    • NodeImageIdSSMParam: Vorausgefüllt mit dem Amazon-EC2-Systems-Manager-Parameter einer kürzlich von Amazon EKS optimierten Amazon-Linux-AMI-ID für eine Kubernetes-Version. Um eine andere Kubernetes-Nebenversion zu verwenden, die von Amazon EKS unterstützt wird, ersetzen Sie 1.x durch eine andere unterstützte Version. Wir empfehlen, dieselbe Kubernetes-Version wie Ihr Cluster anzugeben.

      Um das Amazon-EKS-optimierte beschleunigte AMI zu verwenden, ersetzen Sie amazon-linux-2 durch amazon-linux-2-gpu. Um das Amazon-EKS-optimierte Arm-AMI zu verwenden, ersetzen Sie amazon-linux-2 durch amazon-linux-2-arm64.

      Anmerkung

      Das Amazon-EKS-Knoten-AAMI basiert auf Amazon Linux 2. Sie können Sicherheits- oder Datenschutzereignisse für Amazon Linux 2 im Amazon Linux-Sicherheitszentrum verfolgen oder den zugehörigen RSS-Feed abonnieren. Sicherheits- oder Datenschutzereignisse enthalten eine Übersicht über das Problem, welche Pakete betroffen sind und wie Sie Ihre Instances aktualisieren, um das Problem zu beheben.

    • NodeImageId: (Optional) Wenn Sie ein eigenes benutzerdefiniertes AMI (anstelle des Amazon-EKS-optimierten AMI) verwenden, geben Sie eine Knoten-AMI-ID für Ihre AWS-Region ein. Wenn Sie hier einen Wert angeben, werden alle Werte im Feld NodeImageIdSSMParam außer Kraft gesetzt.

    • NodeVolumeSize: Geben Sie eine Stamm-Volume-Größe für Ihre Worker-Knoten in GiB an.

    • KeyName: Geben Sie den Namen eines Amazon-EC2-SSH-Schlüsselpaars ein, das Sie für die Verbindung über SSH in Ihre Arbeitsknoten verwenden können, nachdem sie gestartet wurden. Wenn Sie noch kein Amazon-EC2-Schlüsselpaar haben, können Sie eines in der AWS Management Console erstellen. Weitere Informationen finden Sie unter Amazon-EC2-Schlüsselpaare im Amazon-EC2-Benutzerhandbuch für Linux-Instances.

      Anmerkung

      Wenn Sie hier kein Schlüsselpaar angeben, schlägt die Erstellung des AWS CloudFormation-Stacks fehl.

    • BootstrapArguments: Geben Sie alle optionalen Argumente an, die an das Worker-Knoten-Bootstrap-Skript übergeben werden sollen, wie z. B. zusätzliche kubelet-Argumente. Weitere Informationen finden Sie in den Bootstrap-Skript-Nutzungsinformationen auf GitHub. Um eine Knotengruppe bereitzustellen, die es Ihrer Instance ermöglicht, Pods eine deutlich höhere Anzahl von IP-Adressen zuzuweisen, weisen Sie Pods IP-Adressen aus einem anderen CIDR-Block als dem der Instance zu. Aktivieren Sie dann die containerd-Laufzeit oder stellen Sie einen privaten Cluster ohne ausgehenden Internetzugang bereit. Informationen zu hinzufügbaren Argumenten finden Sie unter Erhöhen Sie die Anzahl der verfügbaren IP-Adressen für Ihre Amazon-EC2-Knoten, Tutorial: Benutzerdefinierte Netzwerke, Aktivieren der containerd-Laufzeit-Bootstrap-Flag und Anforderungen an private Cluster.

    • DisableIMDSv1: Standardmäßig unterstützt jeder Knoten die Instance-Metadaten-Service-Version 1 (IMDSv1) und IMDSv2. Sie können IMDSv1 deaktivieren. Um zu verhindern, dass künftige Knoten und Pods in der Knotengruppe MDSv1 verwenden, legen Sie DisableIMDSv1 auf true fest. Weitere Informationen finden Sie unter Konfiguration des Instance-Metadatenservice. Weitere Informationen zum Einschränken des Zugriffs darauf auf Ihre Knoten finden Sie unter Beschränken Sie den Zugriff auf das Instance-Profil, das dem Worker-Knoten zugewiesen ist.

    • VpcId Geben Sie die ID für die VPC ein, die Sie in erstellt haben.

    • Subnetze: Wählen Sie die Subnetze aus, die Sie für Ihre VPC erstellt haben. Wenn Sie Ihre VPC anhand der unter Erstellen einer VPC für Ihren Amazon-EKS-Cluster beschriebenen Schritte erstellt haben, geben Sie nur die privaten Subnetze innerhalb der VPC an, in denen Ihre Knoten gestartet werden sollen. Sie können sehen, welche Subnetze privat sind, indem Sie den jeweiligen Subnetzlink in der Registerkarte Networking (Netzwerk) Ihres Clusters öffnen.

      Wichtig
      • Wenn es sich bei einem oder einigen der Subnetze um öffentliche Subnetze handelt, muss die Einstellung für die automatische Zuweisung öffentlicher IP-Adressen aktiviert sein. Wenn die Einstellung für das öffentliche Subnetz nicht aktiviert ist, wird allen Worker-Knoten, die Sie in diesem öffentlichen Subnetz bereitstellen, keine öffentliche IP-Adresse zugewiesen, und diese können nicht mit dem Cluster oder anderen AWS-Services kommunizieren. Wenn das Subnetz vor dem 26. März 2020 unter Verwendung einer der Amazon-EKS-AWS CloudFormationVPC-Vorlagen- oder von eksctl bereitgestellt wurde, ist die automatische Zuweisung öffentlicher IP-Adressen für öffentliche Subnetze deaktiviert. Informationen zum Aktivieren der öffentlichen IP-Adresszuweisung für ein Subnetz finden Sie unter Ändern des öffentlichen IPv4-Adressattributs für Ihr Subnetz. Wenn der Knoten in einem privaten Subnetz bereitgestellt wird, kann er über ein NAT-Gateway mit dem Cluster und anderen AWS-Services kommunizieren.

      • Wenn die Subnetze keinen Internetzugang haben, stellen Sie sicher, dass Sie die Überlegungen und zusätzlichen Schritte in Anforderungen an private Cluster kennen.

      • Wenn Sie die Knoten in einem Cluster der Version 1.18 oder früher bereitstellen, stellen Sie sicher, dass die ausgewählten Subnetze mit dem Clusternamen gekennzeichnet sind. Ersetzen Sie my-cluster durch den Namen Ihres Clusters. Führen Sie dann den folgenden Befehl aus, um eine Liste der Subnetze anzuzeigen, die derzeit mit Ihrem Clusternamen gekennzeichnet sind.

        aws ec2 describe-subnets --filters Name=tag:kubernetes.io/cluster/my-cluster,Values=shared | grep SubnetId

        Wenn das Subnetz, das Sie auswählen möchten, nicht in der Ausgabe des vorherigen Befehls zurückgegeben wird, müssen Sie das Tag manuell dem Subnetz hinzufügen. Weitere Informationen finden Sie unter Subnetz-Anforderungen und -Überlegungen.

      • Wenn Sie die Subnetze AWS Outposts, Wavelength oder Local Zone auswählen, dürfen diese Subnetze beim Erstellen des Clusters nicht übergeben worden sein.

  7. Treffen Sie die gewünschte Auswahl auf der Seite Configure stack options (Stackoptionen konfigurieren) und wählen Sie dann Next (Weiter) aus.

  8. Aktivieren Sie das Kontrollkästchen links neben I acknowledge that AWS CloudFormation might create IAM resources with custom names („Mir ist bewusst, dass AWS CloudFormation IAM-Ressourcen mit eigenen Namen erstellen kann“) und wählen Sie dann Create Stack (Stack erstellen) aus.

  9. Wenn Ihr Stack fertig erstellt wurde, wählen Sie ihn in der Konsole aus und klicken Sie auf Outputs (Ausgänge).

  10. Notieren Sie die NodeInstanceRole für die Knotengruppe, die erstellt wurde. Sie benötigen diese, wenn Sie Ihre Amazon-EKS-Arbeitsknoten konfigurieren.

Schritt 2: So aktivieren Sie die Knoten, die Ihrem Cluster beitreten sollen

Anmerkung

Wenn Sie Knoten innerhalb einer privaten VPC ohne ausgehenden Internetzugang gestartet haben, müssen Sie ihnen ermöglichen, Ihrem Cluster innerhalb der VPC beizutreten.

  1. Laden Sie die AWS IAM Authenticator-Konfigurationszuordnung herunter, bearbeiten Sie sie und wenden Sie sie an.

    1. Laden Sie die Konfigurationszuordnung mit dem folgenden Befehl herunter.

      curl -o aws-auth-cm.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Legen Sie den rolearn in der aws-auth-cm.yaml-Datei auf den Wert fest, den Sie im vorherigen Verfahren aufgezeichnet haben. Hierzu können Sie einen Texteditor verwenden oder my-node-instance-role ersetzen und den folgenden Befehl ausführen:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. Wenden Sie die Konfiguration an. Die Ausführung dieses Befehls kann einige Minuten dauern.

      kubectl apply -f aws-auth-cm.yaml
      Anmerkung

      Wenn Sie Autorisierungs- oder Ressourcenfehler erhalten, finden Sie weitere Informationen unter Nicht autorisiert oder Zugriff verweigert (kubectl) im Abschnitt zur Fehlerbehebung.

      Wenn Arbeitsknoten dem Cluster nicht beitreten können, finden Sie weitere Informationen unter Worker-Knoten können nicht mit dem Cluster verknüpft werden im Handbuch zur Fehlerbehebung.

  2. Sehen Sie sich den Status Ihrer Knoten an und warten Sie, bis diese in den Ready-Status eintreten.

    kubectl get nodes --watch

    Geben Sie Ctrl+C ein, um zu einer Shell-Eingabeaufforderung zurückzukehren.

  3. (Nur GPU-Knoten) Wenn Sie einen GPU-Instance-Typ und das von Amazon EKS optimierte beschleunigte AMI gewählt haben, müssen Sie das NVIDIA-Geräte-Plugin für Kubernetes mit dem folgenden Befehl als DaemonSet auf Ihren Cluster anwenden.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml
  4. (Optional) Bereitstellen einer -Beispielanwendung Stellen Sie eine Beispielanwendung bereit, um Ihren Cluster und Ihre Linux-Worker-Knoten zu testen.

  5. (Optional) Wenn die von AmazonEKS_CNI_Policy verwaltete IAM-Richtlinie (bei einem IPv4-Cluster) oder die AmazonEKS_CNI_IPv6_Policy (die Sie bei einem IPv6-Cluster selbst erstellt haben) an Ihre Amazon-EKS-Knoten-IAM-Rolle angefügt ist, sollten Sie sie stattdessen einer IAM-Rolle zuweisen, die Sie dem aws-node-Servicekonto für Kubernetes zuordnen. Weitere Informationen finden Sie unter Konfigurieren des Amazon VPC CNI plugin for Kubernetes zur Verwendung von IAM-Rollen für Servicekonten.

  6. Wir empfehlen, den Pod-Zugriff auf das IMDS zu blockieren, wenn die folgenden Bedingungen erfüllt sind:

    • Sie planen, allen Ihren Kubernetes-Servicekonten IAM-Rollen zuzuweisen, damit Pods nur die Mindestberechtigungen haben, die sie benötigen.

    • Keine Pods im Cluster benötigen aus anderen Gründen Zugriff auf den Amazon-EC2-Instance-Metadaten-Service (IMDS), zum Beispiel zum Abrufen der aktuellen AWS-Region.

    Weitere Informationen finden Sie unter Beschränken Sie den Zugriff auf das Instance-Profil, das dem Worker-Knoten zugewiesen ist.