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

Die von Amazon EKS verwalteten Knotengruppen sind 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-optimierte 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 über mehrere AWS-VPC-Verfügbarkeitszonen und Subnetze erstrecken kann, um eine hohe Verfügbarkeit zu gewährleisten.

NEU: Launch Template-Unterstützung 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 von nicht verwalteten Knotengruppen, und verwaltete Knotengruppen werden mit dem Feld definiert. managedNodeGroups

Verwaltete Knotengruppen erstellen

$ eksctl create nodegroup

Neue Cluster

Führen Sie folgenden Befehl aus, um einen neuen Cluster mit einer verwalteten Knotengruppe zu erstellen

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 Funktionsparität 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.

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

# 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 Support für benutzerdefiniertes AMI, SicherheitsgruppeninstancePrefix,instanceName,ebsOptimized,volumeType,volumeName,volumeEncrypted,volumeKmsKeyID,volumeIOPS,maxPodsPerNode,preBootstrapCommands,overrideBootstrapCommand, und 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 erfordert die Angabe von zwei), stellen Sie sicher, dass Sie die Availability Zone zu Ihrer Knotengruppen-Anfrage 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 gelten, 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 im managedNodeGroups Feld und führen Sie Folgendes aus:

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

Verwaltete Knotengruppen aktualisieren

Sie können eine Knotengruppe jederzeit auf die neueste EKS-optimierte AMI-Release-Version für den von Ihnen verwendeten AMI-Typ aktualisieren.

Wenn Ihre Knotengruppe dieselbe Kubernetes-Version wie der Cluster hat, können Sie auf die neueste AMI-Release-Version für diese Kubernetes-Version des AMI-Typs aktualisieren, den Sie verwenden. Wenn Ihre Knotengruppe die vorherige Kubernetes-Version der Kubernetes-Version des Clusters ist, können Sie die Knotengruppe auf die neueste AMI-Release-Version aktualisieren, die der Kubernetes-Version der Knotengruppe entspricht, oder auf die neueste AMI-Release-Version aktualisieren, die der Kubernetes-Version des Clusters entspricht. Sie können eine Knotengruppe nicht auf eine frühere Kubernetes-Version zurücksetzen.

Um eine verwaltete Knotengruppe auf die neueste AMI-Release-Version zu aktualisieren:

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

Die Knotengruppe kann wie folgt auf die neueste AMI-Version für eine bestimmte Kubernetes-Version aktualisiert werden:

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

Um auf eine bestimmte AMI-Release-Version statt auf die neueste Version zu aktualisieren, übergeben Sie--release-version:

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

Wenn die verwalteten Knoten benutzerdefiniert bereitgestellt werden AMIs, muss der folgende Workflow 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)
  • eine neue Version des benutzerdefinierten AMI erstellen (mithilfe der AWS EKS-Konsole).

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

  • führen Sie ein Upgrade der Knoten auf die neue Version der Startvorlage durch. z. B.

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

Handhabung parallel Upgrades für Knoten

Mehrere verwaltete Knoten können gleichzeitig aktualisiert werden. Um parallel Upgrades zu konfigurieren, definieren Sie beim Erstellen updateConfig der Knotengruppe die einer Knotengruppe. Ein Beispiel finden updateConfig Sie hier.

Um Ausfallzeiten Ihrer Workloads aufgrund der gleichzeitigen Aktualisierung 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 für angeben. updateConfig Verwenden Sie alternativmaxUnavailablePercentage, wodurch die maximale Anzahl nicht verfügbarer Knoten als Prozentsatz der Gesamtzahl der Knoten definiert wird.

Beachten Sie, dass dieser Wert maxUnavailable nicht höher sein kann alsmaxSize. Ebenfalls 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 UpdateConfigAbschnitts einer verwalteten Knotengruppe. Dieser Abschnitt definiert zwei Felder. MaxUnavailableundMaxUnavailablePercentage. Ihre Knotengruppen sind während des Updates nicht betroffen, sodass mit Ausfallzeiten nicht zu rechnen ist.

Der Befehl update nodegroup sollte mit einer Konfigurationsdatei unter Verwendung des Flags verwendet werden. --config-file Die Nodegroup sollte einen nodeGroup.updateConfig Abschnitt enthalten. Weitere Informationen finden Sie hier.

Gesundheitsprobleme bei Nodegroup

EKS Managed Nodegroups überprüft automatisch die Konfiguration Ihrer Knotengruppe und Knoten auf Integritätsprobleme und meldet diese über die EKS-API und -Konsole. So zeigen Sie Gesundheitsprobleme für eine Knotengruppe an:

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 Knotengruppe angewendet werden. Dies wird während der Cluster- oder Knotengruppenerstellung über das labels Feld in eksctl angegeben.

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

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

So löschen oder entfernen Sie Labels aus einer Knotengruppe:

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

So zeigen Sie alle Labels an, die für eine Knotengruppe gesetzt sind:

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

Skalierung 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