View a markdown version of this page

Lavora con i gruppi di nodi - Guida per l'utente di Eksctl

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Lavora con i gruppi di nodi

Creazione di gruppi di nodi

È possibile aggiungere uno o più nodegroup oltre al nodegroup iniziale creato insieme al cluster.

Per creare un nodegroup aggiuntivo, usa:

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

--versionil flag non è supportato per i gruppi di nodi gestiti. Eredita sempre la versione dal piano di controllo.

Per impostazione predefinita, i nuovi gruppi di nodi non gestiti ereditano la versione dal piano di controllo (--version=auto), ma è possibile specificare una versione diversa, che può essere utilizzata anche --version=latest per forzare l'uso della versione più recente.

Inoltre, è possibile utilizzare lo stesso file di configurazione utilizzato per: eksctl create cluster

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

Creare un nodegroup da un file di configurazione

I gruppi di nodi possono essere creati anche tramite una definizione del cluster o un file di configurazione. Dato il seguente file di configurazione di esempio e un cluster esistente chiamato: 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

I nodegroups ng-1-workers e ng-2-builders possono essere creati con questo comando:

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

Bilanciamento del carico

Se siete già pronti per collegare i gruppi or/and target dei sistemi di bilanciamento del carico classici esistenti ai nodegroup, potete specificarli nel file di configurazione. I gruppi or/and target dei load balancer classici vengono automaticamente associati all'ASG durante la creazione di nodegroup. Questo è supportato solo per i gruppi di nodi autogestiti definiti tramite il campo. 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

Selezione dei gruppi di nodi nei file di configurazione

Per eseguire un'deleteoperazione create or solo su un sottoinsieme dei gruppi di nodi specificati in un file di configurazione, ci sono due flag CLI che accettano un elenco di globi e, ad esempio: –0— –1—

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

Usando il file di configurazione di esempio sopra riportato, si possono creare tutti i nodegroup dei worker tranne quello dei worker con il seguente comando:

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

Oppure si potrebbe eliminare il nodegroup dei costruttori con:

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

In questo caso, dobbiamo anche fornire il --approve comando per eliminare effettivamente il nodegroup.

Regole di inclusione ed esclusione

  • se no --include o --exclude è specificato tutto è incluso

  • se --include viene specificato only, verranno inclusi solo i gruppi di nodi che corrispondono a quei globi

  • se --exclude viene specificato solo, vengono inclusi tutti i gruppi di nodi che non corrispondono a quei globi

  • se vengono specificati entrambi, --exclude le regole hanno la precedenza --include (ad esempio, i gruppi di nodi che corrispondono alle regole di entrambi i gruppi saranno esclusi)

Elenco dei gruppi di nodi

Per elencare i dettagli su un nodegroup o su tutti i nodegroup, usa:

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

Per elencare uno o più gruppi di nodi in formato YAML o JSON, che restituisce più informazioni rispetto alla tabella di log predefinita, usa:

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

Immutabilità dei gruppi di nodi

In base alla progettazione, i gruppi di nodi sono immutabili. Ciò significa che se è necessario modificare qualcosa (diverso dal ridimensionamento) come l'AMI o il tipo di istanza di un nodegroup, è necessario creare un nuovo nodegroup con le modifiche desiderate, spostare il carico ed eliminare quello vecchio. Vedi la sezione Eliminazione e svuotamento dei gruppi di nodi.

Ridimensionamento dei gruppi di nodi

Il ridimensionamento dei gruppi di nodi è un processo che può richiedere alcuni minuti. Quando il --wait flag non è specificato, si aspetta eksctl ottimisticamente che il nodegroup venga ridimensionato e ritorna non appena la richiesta dell'API AWS è stata inviata. Per eksctl attendere che i nodi siano disponibili, aggiungi un --wait flag come nell'esempio seguente.

Nota

Il ridimensionamento di un nodegroup down/in (ovvero la riduzione del numero di nodi) può causare errori poiché ci affidiamo esclusivamente alle modifiche all'ASG. Ciò significa che i nodi in oggetto removed/terminated non vengono esauriti in modo esplicito. Questa potrebbe essere un'area di miglioramento in futuro.

Il ridimensionamento di un gruppo di nodi gestito si ottiene chiamando direttamente l'API EKS che aggiorna la configurazione di un gruppo di nodi gestito.

Ridimensionamento di un singolo gruppo di nodi

Un nodegroup può essere ridimensionato utilizzando il comando: eksctl scale nodegroup

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

Ad esempio, per ridimensionare nodegroup ng-a345f4e1 a 5 nodi, cluster-1 esegui:

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

Un nodegroup può anche essere ridimensionato utilizzando un file di configurazione passato a --config-file e specificando il nome del nodegroup con cui deve essere ridimensionato. --name Eksctl cercherà nel file di configurazione e scoprirà quel nodegroup e i suoi valori di configurazione di ridimensionamento.

Se il numero di nodi desiderato è compreso NOT nell'intervallo tra il numero minimo attuale e il numero massimo attuale di nodi, verrà visualizzato un errore specifico. Questi valori possono essere trasmessi anche con flag --nodes-min e --nodes-max rispettivamente.

Ridimensionamento di più gruppi di nodi

Eksctl può scoprire e ridimensionare tutti i gruppi di nodi presenti in un file di configurazione che viene passato con. --config-file

Analogamente al ridimensionamento di un singolo nodegroup, lo stesso set di convalide si applica a ciascun nodegroup. Ad esempio, il numero di nodi desiderato deve essere compreso nell'intervallo tra il numero minimo e massimo di nodi.

Eliminazione e svuotamento dei gruppi di nodi

Per eliminare un nodegroup, esegui:

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

Le regole di inclusione ed esclusione possono essere utilizzate anche con questo comando.

Nota

Questo eliminerà tutti i pod da quel nodegroup prima che le istanze vengano eliminate.

Per saltare le regole di sfratto durante il processo di drenaggio, esegui:

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

Tutti i nodi vengono isolati e tutti i pod vengono rimossi da un nodegroup al momento dell'eliminazione, ma se hai bisogno di svuotare un nodegroup senza eliminarlo, esegui:

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

Per separare un nodegroup, esegui:

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

Per ignorare le regole di sfratto come le impostazioni, esegui: PodDisruptionBudget

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

Per velocizzare il processo di drenaggio, puoi specificare --parallel <value> il numero di nodi da drenare in parallelo.

Altre funzionalità

Puoi anche abilitare l'accesso SSH, ASG e altre funzionalità per un nodegroup, ad esempio:

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

Aggiorna le etichette

Non ci sono comandi specifici eksctl per aggiornare le etichette di un nodegroup, ma può essere facilmente ottenuto utilizzandokubectl, ad esempio:

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

Accesso SSH

Puoi abilitare l'accesso SSH per i gruppi di nodi configurando uno dei publicKeyName e publicKeyPath nella configurazione del publicKey tuo nodegroup. In alternativa, puoi usare AWS Systems Manager (SSM) per SSH sui nodi, configurando il nodegroup con: 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