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
--version
il 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'delete
operazione 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