View a markdown version of this page

Von EKS verwaltete Knotengruppen - Eksctl-Benutzerhandbuch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Von EKS verwaltete Knotengruppen

Von Amazon EKS verwaltete Nodegroups ist eine Funktion, die die Bereitstellung und das Lebenszyklusmanagement von Knoten (EC2-Instances) für Amazon EKS Kubernetes-Cluster automatisiert. Kunden können optimierte Knotengruppen für ihre Cluster bereitstellen, und EKS hält ihre Knoten mit den neuesten Kubernetes- und Host-Betriebssystemversionen auf dem neuesten Stand.

Eine von EKS verwaltete Knotengruppe ist eine Autoscaling-Gruppe und zugehörige EC2-Instances, die von AWS für einen Amazon EKS-Cluster verwaltet werden. Jede Knotengruppe verwendet das Amazon EKS-optimized Amazon Linux 2-AMI. Amazon EKS macht es einfach, Bugfixes und Sicherheitspatches auf Knoten anzuwenden und sie auf die neuesten Kubernetes-Versionen zu aktualisieren. Jede Knotengruppe startet eine Autoscaling-Gruppe für Ihren Cluster, die sich aus Gründen der Hochverfügbarkeit über mehrere AWS VPC-Verfügbarkeitszonen und Subnetze erstrecken kann.

NEUE Unterstützung für Startvorlagen für verwaltete Knotengruppen

Anmerkung

Der Begriff „nicht verwaltete Knotengruppen“ wurde verwendet, um sich auf Knotengruppen zu beziehen, die eksctl von Anfang an unterstützt hat (dargestellt durch das Feld). nodeGroups Die ClusterConfig Datei verwendet das nodeGroups Feld weiterhin zur Definition nicht verwalteter Knotengruppen, und verwaltete Knotengruppen werden mit dem Feld definiert. managedNodeGroups

Verwaltete Knotengruppen erstellen

$ eksctl create nodegroup

Neue Cluster

Um einen neuen Cluster mit einer verwalteten Knotengruppe zu erstellen, führen Sie den Befehl aus

eksctl create cluster

Um mehrere verwaltete Knotengruppen zu erstellen und mehr Kontrolle über die Konfiguration zu haben, kann eine Konfigurationsdatei verwendet werden.

Anmerkung

Verwaltete Knotengruppen haben keine vollständige Funktionsgleichheit mit nicht verwalteten Knotengruppen.

# cluster.yaml # A cluster with two managed nodegroups --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large minSize: 2 maxSize: 3

Ein weiteres Beispiel für eine Konfigurationsdatei zum Erstellen einer verwalteten Knotengruppe finden Sie hier. https://github.com/eksctl-io/eksctl/blob/main/examples/15-managed-nodes.yaml

Es ist möglich, einen Cluster mit verwalteten und nicht verwalteten Knotengruppen zu haben. Nicht verwaltete Knotengruppen werden nicht in der AWS EKS-Konsole angezeigt, es eksctl get nodegroup werden jedoch beide Arten von Knotengruppen aufgeführt.

# cluster.yaml # A cluster with an unmanaged nodegroup and two managed nodegroups. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 nodeGroups: - name: ng-1 minSize: 2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large privateNetworking: true minSize: 2 maxSize: 3

NEU Unterstützung für benutzerdefinierte AMI, Sicherheitsgruppen,,instancePrefix,instanceName,ebsOptimized,,volumeType,volumeName, volumeEncryptedvolumeKmsKeyID, und volumeIOPS maxPodsPerNode preBootstrapCommands overrideBootstrapCommand disableIMDSv1

# cluster.yaml # A cluster with a managed nodegroup with customization. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: custom-ng ami: ami-0e124de4755b2734d securityGroups: attachIDs: ["sg-1234"] maxPodsPerNode: 80 ssh: allow: true volumeSize: 100 volumeName: /dev/xvda volumeEncrypted: true # defaults to true, which enforces the use of IMDSv2 tokens disableIMDSv1: false overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh managed-cluster --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=custom-ng,eks.amazonaws.com/nodegroup-image=ami-0e124de4755b2734d'

Wenn Sie einen Instance-Typ anfordern, der nur in einer Zone verfügbar ist (und die eksctl-Konfiguration die Angabe von zwei erfordert), stellen Sie sicher, dass Sie die Verfügbarkeitszone zu Ihrer Knotengruppenanfrage hinzufügen:

# cluster.yaml # A cluster with a managed nodegroup with "availabilityZones" --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: flux-cluster region: us-east-2 version: "1.23" availabilityZones: ["us-east-2b", "us-east-2c"] managedNodeGroups: - name: workers instanceType: hpc6a.48xlarge minSize: 64 maxSize: 64 labels: { "fluxoperator": "true" } availabilityZones: ["us-east-2b"] efaEnabled: true placement: groupName: eks-efa-testing

Dies kann für Instance-Typen wie die Hpc6-Familie zutreffen, die nur in einer Zone verfügbar sind.

Bestehende Cluster

eksctl create nodegroup --managed

Tipp: Wenn Sie eine ClusterConfig Datei verwenden, um Ihren gesamten Cluster zu beschreiben, beschreiben Sie Ihre neue verwaltete Knotengruppe in dem managedNodeGroups Feld und führen Sie Folgendes aus:

eksctl create nodegroup --config-file=YOUR_CLUSTER.yaml

Aktualisierung verwalteter Knotengruppen

Sie können eine Nodegroup jederzeit auf die neueste EKS-optimized AMI-Release-Version für den AMI-Typ aktualisieren, den Sie verwenden.

Wenn Ihre Nodegroup dieselbe Kubernetes-Version wie der Cluster hat, können Sie auf die neueste AMI-Release-Version für diese Kubernetes-Version des von Ihnen verwendeten AMI-Typs aktualisieren. Wenn es sich bei Ihrer Nodegroup um die vorherige Kubernetes-Version der Kubernetes-Version des Clusters handelt, können Sie die Nodegroup auf die neueste AMI-Release-Version aktualisieren, die der Kubernetes-Version der Nodegroup entspricht, oder auf die neueste AMI-Release-Version aktualisieren, die der Kubernetes-Version des Clusters entspricht. Sie können eine Nodegroup nicht auf eine frühere Kubernetes-Version zurücksetzen.

So aktualisieren Sie eine verwaltete Knotengruppe auf die neueste AMI-Release-Version:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster

Die Nodegroup kann auf die neueste AMI-Version für eine bestimmte Kubernetes-Version aktualisiert werden, indem Sie:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --kubernetes-version=<kubernetes-version>

Um ein Upgrade auf eine bestimmte AMI-Release-Version statt auf die neueste Version durchzuführen, geben Sie Folgendes ein: --release-version

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --release-version=1.19.6-20210310
Anmerkung

Wenn die verwalteten Knoten mithilfe benutzerdefinierter AMIs bereitgestellt werden, muss der folgende Arbeitsablauf befolgt werden, um eine neue Version des benutzerdefinierten AMI bereitzustellen.

  • Die anfängliche Bereitstellung der Knotengruppe muss mithilfe einer Startvorlage erfolgen. z. B.

    managedNodeGroups: - name: launch-template-ng launchTemplate: id: lt-1234 version: "2" #optional (uses the default version of the launch template if unspecified)
  • erstellen Sie eine neue Version des benutzerdefinierten AMI (mithilfe der AWS EKS-Konsole).

  • erstellen Sie eine neue Version der Startvorlage mit der neuen AMI-ID (mithilfe der AWS EKS-Konsole).

  • aktualisieren Sie die Knoten auf die neue Version der Startvorlage. z. B.

    eksctl upgrade nodegroup --name nodegroup-name --cluster cluster-name --launch-template-version new-template-version

Durchführung paralleler Upgrades für Knoten

Mehrere verwaltete Knoten können gleichzeitig aktualisiert werden. Um parallele Upgrades zu konfigurieren, definieren Sie bei der Erstellung updateConfig der Knotengruppe den Wert einer Knotengruppe. Ein Beispiel finden updateConfig Sie hier. https://github.com/eksctl-io/eksctl/blob/main/examples/15-managed-nodes.yaml

Um Ausfallzeiten Ihrer Workloads aufgrund des gleichzeitigen Upgrades mehrerer Knoten zu vermeiden, können Sie die Anzahl der Knoten begrenzen, die während eines Upgrades nicht verfügbar sein können, indem Sie dies im maxUnavailable Feld eines updateConfig angeben. Verwenden Sie alternativmaxUnavailablePercentage, was die maximale Anzahl nicht verfügbarer Knoten als Prozentsatz der Gesamtzahl der Knoten definiert.

Beachten Sie, dass dieser Wert maxUnavailable nicht höher als sein kannmaxSize. Außerdem maxUnavailable und maxUnavailablePercentage kann nicht gleichzeitig verwendet werden.

Diese Funktion ist nur für verwaltete Knoten verfügbar.

Verwaltete Knotengruppen werden aktualisiert

eksctlermöglicht das Aktualisieren des UpdateConfig Abschnitts einer verwalteten Knotengruppe. Dieser Abschnitt definiert zwei Felder. MaxUnavailableundMaxUnavailablePercentage. Ihre Nodegroups sind während des Updates nicht betroffen, daher sollten Sie nicht mit Ausfallzeiten rechnen.

Der Befehl update nodegroup sollte zusammen mit einer Konfigurationsdatei verwendet werden, die das Flag verwendet. --config-file Die Knotengruppe sollte einen nodeGroup.updateConfig Abschnitt enthalten. Weitere Informationen finden Sie hier. https://geoffcline.github.io/eksctl-schema-demo/#nodeGroups-updateConfig

Gesundheitsprobleme der Nodegroup

EKS Managed Nodegroups überprüft automatisch die Konfiguration Ihrer Nodegroup und Nodes auf Integritätsprobleme und meldet diese über die EKS-API und -Konsole. Um Gesundheitsprobleme für eine Knotengruppe anzuzeigen:

eksctl utils nodegroup-health --name=managed-ng-1 --cluster=managed-cluster

Labels verwalten

EKS Managed Nodegroups unterstützt das Anhängen von Labels, die auf die Kubernetes-Knoten in der Nodegroup angewendet werden. Dies wird während der Cluster- oder Nodegroup-Erstellung über das labels Feld in eksctl angegeben.

Um neue Labels zu setzen oder bestehende Labels für eine Nodegroup zu aktualisieren:

eksctl set labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by=eks,kubernetes.io/role=worker

Um Labels für eine Knotengruppe aufzuheben oder aus einer Knotengruppe zu entfernen:

eksctl unset labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by,kubernetes.io/role

Um alle Labels anzuzeigen, die für eine Knotengruppe festgelegt sind:

eksctl get labels --cluster managed-cluster --nodegroup managed-ng-1

Skalieren verwalteter Knotengruppen

eksctl scale nodegroupunterstützt auch verwaltete Knotengruppen. Die Syntax für die Skalierung einer verwalteten oder nicht verwalteten Knotengruppe ist dieselbe.

eksctl scale nodegroup --name=managed-ng-1 --cluster=managed-cluster --nodes=4 --nodes-min=3 --nodes-max=5

Weitere Informationen