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
--version
Flag 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
). Sie können jedoch auch eine andere Version angeben und damit die Verwendung der jeweils neuesten Version --version=latest
erzwingen.
Darüber hinaus können Sie dieselbe Konfigurationsdatei verwenden, die für Folgendes verwendet wurde: eksctl create cluster
eksctl create nodegroup --config-file=<path>
Eine Knotengruppe aus einer Konfigurationsdatei erstellen
Knotengruppen können auch über eine Clusterdefinition oder eine Konfigurationsdatei erstellt werden. Ausgehend von der folgenden Beispiel-Konfigurationsdatei und einem vorhandenen Cluster 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 Classic Load or/and Balancer-Zielgruppen an die Nodegroups anzuhängen, können Sie diese in der Konfigurationsdatei angeben. Die or/and Zielgruppen der klassischen Load Balancer werden bei der Erstellung von Nodegroups automatisch mit der ASG verknüpft. Dies wird nur für selbstverwaltete Knotengruppen unterstützt, die über das Feld definiert wurden. 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
Oder-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, 0—
und z. B.: 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 Worker-Knotengruppe erstellen:
eksctl create nodegroup --config-file=dev-cluster.yaml --exclude=ng-1-workers
Oder man könnte die Builder-Knotengruppe 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 Knotengruppe tatsächlich zu löschen.
Regeln einschließen und ausschließen
-
wenn kein
--include
oder angegeben--exclude
ist, ist alles enthalten -
wenn only angegeben
--include
ist, werden nur Knotengruppen eingeschlossen, die diesen Globs entsprechen -
wenn only angegeben
--exclude
ist, werden alle Knotengruppen eingeschlossen, die nicht zu diesen Globs passen -
wenn beide angegeben sind, haben
--exclude
Regeln Vorrang vor--include
(d. h. Knotengruppen, die den Regeln in beiden Gruppen entsprechen, werden ausgeschlossen)
Knotengruppen auflisten
Um die Details zu einer Knotengruppe oder allen 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 als die Standard-Logtabelle ausgibt, 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 konstruktionsbedingt unveränderlich. Das heißt, wenn Sie etwas (außer Skalierung) ändern müssen, wie das AMI oder den Instance-Typ einer Knotengruppe, müssten Sie eine neue Knotengruppe mit den gewünschten Änderungen erstellen, die Last verschieben und die alte löschen. Weitere Informationen finden Sie im Abschnitt Löschen und Löschen von Knotengruppen.
Skalieren von Knotengruppen
Die Skalierung von Knotengruppen ist ein Vorgang, der bis zu einigen Minuten dauern kann. Wenn das --wait
Flag nicht angegeben ist, erwartet eksctl
optimistisch, dass die Knotengruppe skaliert wird, und kehrt zurück, sobald die AWS-API-Anfrage gesendet wurde. Um zu eksctl
warten, bis die Knoten verfügbar sind, fügen Sie ein --wait
Flag wie im folgenden Beispiel hinzu.
Anmerkung
Die Skalierung einer Knotengruppe down/in (d. h. die Reduzierung der Anzahl der Knoten) kann zu Fehlern führen, da wir uns ausschließlich auf Änderungen an der ASG verlassen. Das bedeutet, dass die Knoten, die gerade bearbeitet werden, removed/terminated nicht explizit entleert werden. Dies könnte in future verbesserungswürdig sein.
Die Skalierung einer verwalteten Knotengruppe erfolgt durch den direkten Aufruf der EKS-API, 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 Knotengruppe auf 5 Knoten zu skalieren, führen Sie folgenden ng-a345f4e1
Befehl cluster-1
aus:
eksctl scale nodegroup --cluster=cluster-1 --nodes=5 ng-a345f4e1
Eine Knotengruppe kann auch skaliert werden, indem eine Konfigurationsdatei verwendet wird, die an die Knotengruppe übergeben wird, --config-file
und indem der Name der Knotengruppe angegeben wird, 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
innerhalb des Bereichs der aktuellen minimalen und aktuellen maximalen Anzahl von Knoten liegt, wird ein bestimmter Fehler angezeigt. Diese Werte können auch mit Flags --nodes-min
und --nodes-max
entsprechend übergeben werden.
Skalierung mehrerer Knotengruppen
Eksctl kann alle Knotengruppen in einer mitgelieferten Konfigurationsdatei erkennen und skalieren. --config-file
Ähnlich wie bei der Skalierung 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.
Löschen und Entleeren von Knotengruppen
Um eine Knotengruppe zu löschen, führen Sie folgenden Befehl 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.
Um die Räumungsregeln während des Löschvorgangs zu überspringen, führen Sie folgenden Befehl aus:
eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction
Alle Knoten sind gesperrt 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 folgenden Befehl aus:
eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName>
Um eine Knotengruppe abzukoppeln, führen Sie folgenden Befehl aus:
eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --undo
Um Räumungsregeln wie Einstellungen zu ignorieren, führen Sie folgenden Befehl aus: PodDisruptionBudget
eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction
Um den Entleerungsprozess zu beschleunigen, können Sie --parallel <value>
die Anzahl der Knoten angeben, die parallel entleert werden sollen.
Weitere Funktionen
Sie können auch SSH-, ASG-Zugriff und andere Funktionen für eine Knotengruppe 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 speziellen Befehleeksctl
, um die Labels einer Knotengruppe zu aktualisieren, aber es kann leicht erreicht werdenkubectl
, z. B. mit:
kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo
SSH-Zugang
Sie können den SSH-Zugriff für Knotengruppen aktivieren, indem Sie eine von publicKeyName
und publicKeyPath
in Ihrer publicKey
Knotengruppen-Konfiguration konfigurieren. Alternativ können Sie AWS Systems Manager (SSM) verwenden, um per SSH auf Knoten zuzugreifen, 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