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ù gruppi di nodi oltre al gruppo di nodi iniziale creato insieme al cluster.

Per creare un gruppo di nodi 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, da utilizzare 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 gruppo di nodi da un file di configurazione

I gruppi di nodi possono essere creati anche tramite una definizione del cluster o un file di configurazione. Dati 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

Il nodo si raggruppa ng-1-workers e ng-2-builders può essere creato con questo comando:

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

Bilanciamento del carico

Se vi siete già preparati a collegare i gruppi or/and target di Classic Load Balancer esistenti ai gruppi di nodi, potete specificarli nel file di configurazione. I gruppi or/and target dei sistemi di bilanciamento del carico classici vengono associati automaticamente all'ASG durante la creazione dei gruppi di nodi. 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 del gruppo 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 globs e, ad esempio: –0— –1—

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

Utilizzando il file di configurazione di esempio sopra riportato, è possibile creare tutti i nodegroup di lavoratori tranne quelli di lavoro 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 only, vengono inclusi tutti i gruppi di nodi che non corrispondono a quei globi

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

Elenco dei gruppi di nodi

Per elencare i dettagli su un gruppo di nodi o su tutti i gruppi di nodi, 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 gruppo di nodi, è necessario creare un nuovo gruppo di nodi con le modifiche desiderate, spostare il carico ed eliminare quello vecchio. Vedi la sezione Eliminazione e drenaggio dei gruppi di nodi.

Ridimensionamento dei gruppi di nodi

Il ridimensionamento dei gruppi di nodi è un processo che può richiedere fino a qualche minuto. Quando il --wait flag non è specificato, si aspetta eksctl ottimisticamente che il nodegroup venga ridimensionato e ritorna non appena la richiesta 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 gruppo di nodi down/in (ovvero la riduzione del numero di nodi) può causare errori poiché ci basiamo esclusivamente sulle modifiche all'ASG. Ciò significa che i nodi in questione removed/terminated non vengono svuotati in modo esplicito. Questa potrebbe essere un'area di miglioramento in futuro.

La scalabilità 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 gruppo di nodi 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 il nodegroup fino a 5 nodi, ng-a345f4e1 cluster-1 esegui:

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

Un gruppo di nodi può anche essere ridimensionato utilizzando un file di configurazione passato a --config-file e specificando il nome del gruppo di nodi 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 NOT rientra nell'intervallo del numero minimo corrente e del numero massimo attuale, verrà visualizzato un errore specifico. Questi valori possono essere passati anche con flag --nodes-min e --nodes-max rispettivamente.

Ridimensionamento di più gruppi di nodi

Eksctl può scoprire e scalare tutti i gruppi di nodi presenti in un file di configurazione trasmesso con. --config-file

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

Eliminazione e svuotamento dei gruppi di nodi

Per eliminare un gruppo di nodi, esegui:

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

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

Nota

Questo prosciugherà tutti i pod da quel gruppo di nodi 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 sono isolati e tutti i pod vengono rimossi da un gruppo di nodi al momento dell'eliminazione, ma se hai bisogno di drenare un gruppo di nodi senza eliminarlo, esegui:

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

Per unire un gruppo di nodi, 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 è possibile specificare --parallel <value> il numero di nodi da drenare in parallelo.

Altre funzionalità

Puoi anche abilitare SSH, accesso ASG e altre funzionalità per un gruppo di nodi, 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 gruppo di nodi, ma può essere facilmente ottenuto utilizzandokubectl, ad esempio:

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

Accesso SSH

È possibile abilitare l'accesso SSH per i gruppi di nodi configurando uno dei gruppi di nodi publicKeyName e publicKeyPath nella configurazione del publicKey gruppo di nodi. 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