

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
<a name="general-nodegroups"></a>

## Creazione di gruppi di nodi
<a name="_creating_nodegroups"></a>

È 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**  
 `--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, 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
<a name="_creating_a_nodegroup_from_a_config_file"></a>

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
<a name="_load_balancing"></a>

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
<a name="_nodegroup_selection_in_config_files"></a>

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 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
<a name="node-include"></a>
+ 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
<a name="_listing_nodegroups"></a>

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
<a name="_nodegroup_immutability"></a>

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](#nodegroup-delete).

## Ridimensionamento dei gruppi di nodi
<a name="_scaling_nodegroups"></a>

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
<a name="_scaling_a_single_nodegroup"></a>

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
<a name="_scaling_multiple_nodegroups"></a>

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
<a name="nodegroup-delete"></a>

Per eliminare un nodegroup, esegui:

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

 [Le regole di inclusione ed esclusione ](#node-include) 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à
<a name="_other_features"></a>

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
<a name="_update_labels"></a>

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

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

### Accesso SSH
<a name="_ssh_access"></a>

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) ](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) 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
```