

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

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

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

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

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

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

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

Per eliminare un gruppo di nodi, 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 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à
<a name="_other_features"></a>

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

Non ci sono comandi specifici `eksctl` per aggiornare le etichette di un gruppo di nodi, 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>

È 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)](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
```