

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à.

# Auto Scaling
<a name="autoscaling"></a>

## Abilita Auto Scaling
<a name="_enable_auto_scaling"></a>

[Puoi creare un cluster (o un gruppo di nodi in un cluster esistente) con un ruolo IAM che consentirà l'uso del cluster autoscaler:](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md)

```
eksctl create cluster --asg-access
```

Questo flag imposta anche `k8s.io/cluster-autoscaler/<clusterName>` tag, quindi la scoperta `k8s.io/cluster-autoscaler/enabled` dei gruppi di nodi dovrebbe funzionare.

Una volta che il cluster è in esecuzione, sarà necessario installare [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md) stesso.

È inoltre necessario aggiungere quanto segue alle definizioni dei gruppi di nodi gestiti o non gestiti per aggiungere i tag necessari affinché Cluster Autoscaler possa scalare il gruppo di nodi:

```
nodeGroups:
  - name: ng1-public
    iam:
      withAddonPolicies:
        autoScaler: true
```

### Scalabilità verso l'alto da 0
<a name="_scaling_up_from_0"></a>

Se desideri essere in grado di scalare il tuo gruppo di nodi da 0 e hai delle etichette and/or definite sui tuoi gruppi di nodi, dovrai propagarle come tag sui tuoi Auto Scaling Groups (ASG).

Un modo per farlo è impostare i tag ASG nel campo delle definizioni dei gruppi di nodi. `tags` Ad esempio, dato un gruppo di nodi con le seguenti etichette e sfumature:

```
nodeGroups:
  - name: ng1-public
    ...
    labels:
      my-cool-label: pizza
    taints:
      key: feaster
      value: "true"
      effect: NoSchedule
```

Dovresti aggiungere i seguenti tag ASG:

```
nodeGroups:
  - name: ng1-public
    ...
    labels:
      my-cool-label: pizza
    taints:
      feaster: "true:NoSchedule"
    tags:
      k8s.io/cluster-autoscaler/node-template/label/my-cool-label: pizza
      k8s.io/cluster-autoscaler/node-template/taint/feaster: "true:NoSchedule"
```

Sia per i gruppi di nodi gestiti che per quelli non gestiti, questa operazione può essere eseguita automaticamente impostando `propagateASGTags` su`true`, che aggiungerà le etichette e le tonalità come tag al gruppo Auto Scaling:

```
nodeGroups:
  - name: ng1-public
    ...
    labels:
      my-cool-label: pizza
    taints:
      feaster: "true:NoSchedule"
    propagateASGTags: true
```

### Zone-aware Auto Scaling
<a name="_zone_aware_auto_scaling"></a>

Se i tuoi carichi di lavoro sono specifici per zona, dovrai creare gruppi di nodi separati per ogni zona. Questo perché `cluster-autoscaler` presuppone che tutti i nodi di un gruppo siano esattamente equivalenti. Quindi, ad esempio, se un evento di scale-up viene attivato da un pod che necessita di un PVC specifico per una zona (ad esempio un volume EBS), il nuovo nodo potrebbe essere programmato nella AZ sbagliata e il pod non si avvierà.

Non avrai bisogno di un gruppo di nodi separato per ogni AZ se il tuo ambiente soddisfa i seguenti criteri:
+ Nessun requisito di archiviazione specifico per zona.
+ Nessun PodAffinity richiesto con topologia diversa dall'host.
+ Nessun NodeAffinity richiesto sull'etichetta della zona.
+ Nessun NodeSelector su un'etichetta di zona.

[(Leggi di più [qui e qui](https://github.com/kubernetes/autoscaler/pull/1802#issuecomment-474295002).)](https://github.com/eksctl-io/eksctl/pull/647#issuecomment-474698054)

Se soddisfi tutti i requisiti di cui sopra (e forse anche altri), dovresti essere al sicuro con un singolo gruppo di nodi che si estende su più AZ. Altrimenti ti consigliamo di creare gruppi di nodi Single-AZ separati:

PRIMA:

```
nodeGroups:
  - name: ng1-public
    instanceType: m5.xlarge
    # availabilityZones: ["eu-west-2a", "eu-west-2b"]
```

DOPO:

```
nodeGroups:
  - name: ng1-public-2a
    instanceType: m5.xlarge
    availabilityZones: ["eu-west-2a"]
  - name: ng1-public-2b
    instanceType: m5.xlarge
    availabilityZones: ["eu-west-2b"]
```