View a markdown version of this page

Arbeiten Sie mit 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.

Arbeiten Sie mit Knotengruppen

Knotengruppen erstellen

Sie können zusätzlich zu der ursprünglichen Knotengruppe, die zusammen mit dem Cluster erstellt wurde, eine oder mehrere Knotengruppen hinzufügen.

Um eine zusätzliche Knotengruppe zu erstellen, verwenden Sie:

eksctl create nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
Anmerkung

--versionFlag wird für verwaltete Knotengruppen nicht unterstützt. Es erbt immer die Version von der Steuerungsebene.

Standardmäßig erben neue, nicht verwaltete Knotengruppen die Version von der Steuerungsebene (--version=auto), aber Sie können eine andere Version angeben, die Sie auch verwenden können, um die Verwendung der neuesten Version --version=latest zu erzwingen.

Zusätzlich können Sie dieselbe Konfigurationsdatei verwenden, die für Folgendes verwendet wird: eksctl create cluster

eksctl create nodegroup --config-file=<path>

Erstellen einer Knotengruppe aus einer Konfigurationsdatei

Knotengruppen können auch über eine Cluster-Definition oder eine Konfigurationsdatei erstellt werden. Anhand der folgenden Beispielkonfigurationsdatei und eines vorhandenen Clusters mit dem Namen: dev-cluster

# dev-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 managedNodeGroups: - name: ng-1-workers labels: { role: workers } instanceType: m5.xlarge desiredCapacity: 10 volumeSize: 80 privateNetworking: true - name: ng-2-builders labels: { role: builders } instanceType: m5.2xlarge desiredCapacity: 2 volumeSize: 100 privateNetworking: true

Die Nodegroups ng-1-workers und ng-2-builders können mit diesem Befehl erstellt werden:

eksctl create nodegroup --config-file=dev-cluster.yaml

Lastausgleich

Wenn Sie sich bereits darauf vorbereitet haben, bestehende or/and Zielgruppen für klassische Load Balancer an die Nodegroups anzuhängen, können Sie diese in der Konfigurationsdatei angeben. Die or/and Zielgruppen der klassischen Load Balancer werden beim Erstellen von Nodegroups automatisch der ASG zugeordnet. Dies wird nur für selbstverwaltete Knotengruppen unterstützt, die über das Feld definiert sind. nodeGroups

# dev-cluster-with-lb.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 nodeGroups: - name: ng-1-web labels: { role: web } instanceType: m5.xlarge desiredCapacity: 10 privateNetworking: true classicLoadBalancerNames: - dev-clb-1 - dev-clb-2 asgMetricsCollection: - granularity: 1Minute metrics: - GroupMinSize - GroupMaxSize - GroupDesiredCapacity - GroupInServiceInstances - GroupPendingInstances - GroupStandbyInstances - GroupTerminatingInstances - GroupTotalInstances - name: ng-2-api labels: { role: api } instanceType: m5.2xlarge desiredCapacity: 2 privateNetworking: true targetGroupARNs: - arn:aws:elasticloadbalancing:eu-north-1:01234567890:targetgroup/dev-target-group-1/abcdef0123456789

Auswahl der Knotengruppe in den Konfigurationsdateien

Um eine create delete OR-Operation nur für eine Teilmenge der in einer Konfigurationsdatei angegebenen Knotengruppen auszuführen, gibt es zwei CLI-Flags, die eine Liste von Globs akzeptieren, und z. B.: –0— –1—

eksctl create nodegroup --config-file=<path> --include='ng-prod-*-??' --exclude='ng-test-1-ml-a,ng-test-2-?'

Mit der obigen Beispielkonfigurationsdatei kann man mit dem folgenden Befehl alle Worker-Knotengruppen außer der Workers-Knotengruppe erstellen:

eksctl create nodegroup --config-file=dev-cluster.yaml --exclude=ng-1-workers

Oder man könnte die Nodegroup des Builders löschen mit:

eksctl delete nodegroup --config-file=dev-cluster.yaml --include=ng-2-builders --approve

In diesem Fall müssen wir auch den --approve Befehl angeben, um die Nodegroup tatsächlich zu löschen.

Regeln einbeziehen und ausschließen

  • wenn nein --include oder angegeben --exclude ist, ist alles enthalten

  • wenn only angegeben --include ist, werden nur Knotengruppen aufgenommen, die diesen Globs entsprechen

  • wenn nur angegeben --exclude wird, werden alle Knotengruppen eingeschlossen, die nicht mit diesen Globs übereinstimmen

  • wenn beide angegeben sind, haben --exclude Regeln Vorrang vor --include (d. h. Knotengruppen, die den Regeln in beiden Gruppen entsprechen, werden ausgeschlossen)

Node-Gruppen auflisten

Um die Details einer Knotengruppe oder aller Knotengruppen aufzulisten, verwenden Sie:

eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>]

Um eine oder mehrere Knotengruppen im YAML- oder JSON-Format aufzulisten, das mehr Informationen ausgibt als die Standardprotokolltabelle, verwenden Sie:

# YAML format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=yaml # JSON format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=json

Unveränderlichkeit der Knotengruppe

Knotengruppen sind vom Design her unveränderlich. Das heißt, wenn Sie etwas ändern müssen (außer der Skalierung), wie etwa das AMI oder den Instance-Typ einer Nodegroup, müssten Sie eine neue Nodegroup mit den gewünschten Änderungen erstellen, den Load verschieben und die alte löschen. Weitere Informationen finden Sie im Abschnitt Löschen und Entleeren von Knotengruppen.

Skalieren von Knotengruppen

Die Skalierung von Nodegroups ist ein Vorgang, der bis zu einigen Minuten dauern kann. Wenn das --wait Flag nicht angegeben ist, erwartet eksctl Optimistically, dass die Nodegroup skaliert wird, und kehrt zurück, sobald die AWS-API-Anforderung gesendet wurde. Um die eksctl Wartezeit zu verkürzen, bis die Knoten verfügbar sind, fügen Sie ein --wait Flag wie im folgenden Beispiel hinzu.

Anmerkung

Das Skalieren einer Nodegroup down/in (d. h. das Reduzieren der Anzahl der Knoten) kann zu Fehlern führen, da wir uns ausschließlich auf Änderungen an der ASG verlassen. Dies bedeutet, dass der oder die Knoten, die gerade verwendet werden, removed/terminated nicht explizit geleert werden. Dies könnte in Zukunft ein Bereich sein, in dem Verbesserungen erforderlich sind.

Die Skalierung einer verwalteten Knotengruppe wird erreicht, indem direkt die EKS-API aufgerufen wird, die die Konfiguration einer verwalteten Knotengruppe aktualisiert.

Skalierung einer einzelnen Knotengruppe

Eine Knotengruppe kann mit dem folgenden Befehl skaliert werden: eksctl scale nodegroup

eksctl scale nodegroup --cluster=<clusterName> --nodes=<desiredCount> --name=<nodegroupName> [ --nodes-min=<minSize> ] [ --nodes-max=<maxSize> ] --wait

Um beispielsweise eine Nodegroup auf 5 Knoten zu skalieren, führen cluster-1 Sie ng-a345f4e1 Folgendes aus:

eksctl scale nodegroup --cluster=cluster-1 --nodes=5 ng-a345f4e1

Eine Knotengruppe kann auch skaliert werden, indem eine Konfigurationsdatei verwendet wird, die an sie übergeben wird, --config-file und den Namen der Knotengruppe angibt, mit der skaliert werden soll. --name Eksctl durchsucht die Konfigurationsdatei und entdeckt diese Knotengruppe sowie ihre Skalierungskonfigurationswerte.

Wenn die gewünschte Anzahl von Knoten NOT im Bereich der aktuellen minimalen und aktuellen maximalen Anzahl von Knoten liegt, wird ein bestimmter Fehler angezeigt. Diese Werte können auch --nodes-max jeweils mit Flags --nodes-min übergeben werden.

Skalierung mehrerer Knotengruppen

Eksctl kann alle Knotengruppen erkennen und skalieren, die in einer übergebenen Konfigurationsdatei gefunden wurden. --config-file

Ähnlich wie beim Skalieren einer einzelnen Knotengruppe gelten für jede Knotengruppe die gleichen Validierungen. Beispielsweise muss die gewünschte Anzahl von Knoten im Bereich der minimalen und maximalen Anzahl von Knoten liegen.

Knotengruppen löschen und leeren

Um eine Nodegroup zu löschen, führen Sie Folgendes aus:

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>

Mit diesem Befehl können auch Regeln zum Einschließen und Ausschließen verwendet werden.

Anmerkung

Dadurch werden alle Pods aus dieser Knotengruppe gelöscht, bevor die Instanzen gelöscht werden.

Führen Sie Folgendes aus, um die Regeln für das Löschen während des Drain-Vorgangs zu überspringen:

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Alle Knoten sind abgesperrt und alle Pods werden beim Löschen aus einer Knotengruppe entfernt. Wenn Sie jedoch eine Knotengruppe leeren müssen, ohne sie zu löschen, führen Sie Folgendes aus:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName>

Um eine Nodegroup zu entsperren, führe folgenden Befehl aus:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --undo

Um Räumungsregeln wie Einstellungen zu ignorieren, führe folgenden Befehl aus: PodDisruptionBudget

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Um den Entleerungsvorgang zu beschleunigen, können Sie die Anzahl der Knoten angeben--parallel <value>, die parallel entleert werden sollen.

Weitere Funktionen

Sie können auch SSH, ASG-Zugriff und andere Funktionen für eine Nodegroup aktivieren, z. B.:

eksctl create nodegroup --cluster=cluster-1 --node-labels="autoscaling=enabled,purpose=ci-worker" --asg-access --full-ecr-access --ssh-access

Beschriftungen aktualisieren

Es gibt keine spezifischen Befehleeksctl, um die Labels einer Nodegroup zu aktualisieren, aber dies kann leicht erreicht werdenkubectl, z. B. mit:

kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo

SSH-Zugriff

Sie können den SSH-Zugriff für Nodegroups aktivierenpublicKey, indem Sie eine von publicKeyName und publicKeyPath in Ihrer Nodegroup-Konfiguration konfigurieren. Alternativ können Sie AWS Systems Manager (SSM) für SSH-Verbindungen auf Knoten verwenden, indem Sie die Knotengruppe wie folgt konfigurieren: enableSsm

managedNodeGroups: - name: ng-1 instanceType: m5.large desiredCapacity: 1 ssh: # import public key from file publicKeyPath: ~/.ssh/id_rsa_tests.pub - name: ng-2 instanceType: m5.large desiredCapacity: 1 ssh: # use existing EC2 key publicKeyName: ec2_dev_key - name: ng-3 instanceType: m5.large desiredCapacity: 1 ssh: # import inline public key publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqZEdzvHnK/GVP8nLngRHu/GDi/3PeES7+Bx6l3koXn/Oi/UmM9/jcW5XGziZ/oe1cPJ777eZV7muEvXg5ZMQBrYxUtYCdvd8Rt6DIoSqDLsIPqbuuNlQoBHq/PU2IjpWnp/wrJQXMk94IIrGjY8QHfCnpuMENCucVaifgAhwyeyuO5KiqUmD8E0RmcsotHKBV9X8H5eqLXd8zMQaPl+Ub7j5PG+9KftQu0F/QhdFvpSLsHaxvBzA5nhIltjkaFcwGQnD1rpCM3+UnQE7Izoa5Yt1xoUWRwnF+L2TKovW7+bYQ1kxsuuiX149jXTCJDVjkYCqi7HkrXYqcC1sbsror someuser@hostname" - name: ng-4 instanceType: m5.large desiredCapacity: 1 ssh: # enable SSH using SSM enableSsm: true