

 **Contribuisci a migliorare questa pagina** 

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

Per contribuire a questa guida per l'utente, scegli il GitHub link **Modifica questa pagina** nel riquadro destro di ogni pagina.

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

# Ottimizzazione dei costi in modalità automatica EKS
<a name="auto-cost-control"></a>

EKS Auto Mode ottimizza continuamente i costi di elaborazione del cluster attraverso il consolidamento, il bin-packing e il corretto dimensionamento. Tuttavia, alcune configurazioni del carico di lavoro possono impedire queste ottimizzazioni. Questo argomento spiega come funziona l'ottimizzazione dei costi, cosa può bloccarla e come configurare il cluster per mantenere l'efficienza dei costi.

## In che modo EKS Auto Mode ottimizza i costi
<a name="_how_eks_auto_mode_optimizes_cost"></a>

EKS Auto Mode riduce i costi di elaborazione attraverso i seguenti meccanismi:
+  **Bin-packing**— Quando si pianificano i pod sui nodi, EKS Auto Mode seleziona i tipi di istanza che corrispondono strettamente alle richieste di risorse aggregate, riducendo al minimo la capacità inutilizzata.
+  **Consolidamento**: EKS Auto Mode valuta periodicamente i nodi in esecuzione e li sostituisce o li rimuove quando i carichi di lavoro possono essere eseguiti su un numero inferiore o meno costoso di istanze.
+  **Right-sizing**— Man mano che i carichi di lavoro si riducono, EKS Auto Mode consolida i pod su nodi più piccoli e termina le istanze sottoutilizzate.

Queste ottimizzazioni vengono eseguite continuamente senza intervento manuale. Tuttavia, alcune annotazioni e NodePool configurazioni dei pod possono impedire che il consolidamento abbia effetto.

## Built-in pool di nodi e barriere di costo
<a name="_built_in_node_pools_and_cost_guardrails"></a>

I pool integrati `general-purpose` e quelli a `system` nodi applicano già diverse impostazioni predefinite di protezione dei costi:
+  **Famiglie di istanze limitate a C, M e R**: non sono consentiti tipi di istanze accelerati (P, G, Inf, Trn) o esotici.
+  **On-demand solo capacità**: istanze No Spot, che evitano il tasso di abbandono dovuto alle interruzioni ma comportano anche l'assenza di risparmi Spot.
+  **Generazione 5 o successiva: sono escluse le generazioni di istanze più** vecchie e meno efficienti in termini di costi.

Se utilizzi solo i pool di nodi integrati, trarrai già vantaggio da questi guardrail. Le indicazioni contenute in questo argomento sull'[esclusione delle famiglie di istanze](#_exclude_instance_families_for_cost_control) e sulla [limitazione delle dimensioni delle istanze](#_constrain_instance_sizes) sono particolarmente importanti quando si creano istanze **personalizzate NodePools**, che non ereditano queste restrizioni.

Tuttavia, anche con i pool di nodi integrati, le seguenti sezioni si applicano comunque all'utente:
+  [Cosa blocca il consolidamento](#_what_blocks_consolidation)— L'`do-not-disrupt`annotazione e i PDB restrittivi bloccano il consolidamento indipendentemente da chi ha fornito il nodo. NodePool 
+  [Utilizzate NodePool i limiti come massimale di costo](#_use_nodepool_limits_as_a_cost_ceiling)— I pool di nodi integrati non dispongono di risorse configurate. `limits` Se i carichi di lavoro sono scalabili in modo significativo, prendi in considerazione la possibilità di crearne uno personalizzato NodePool con limiti anziché affidarti ai pool integrati illimitati.
+  [Ciclo di vita e costo dei nodi](#_node_lifecycle_and_cost)— La sovrapposizione di sostituzione dei nodi si applica a tutti i nodi, compresi quelli forniti dai pool integrati.


| Guardrail | Built-in pool di nodi | Personalizzato NodePools | 
| --- | --- | --- | 
| Esclusione accelerata delle istanze | Applicato | È necessario configurare | 
| Limiti di dimensione delle istanze | Non impostato | È necessario configurare | 
| Risorsa `limits` (CPU/memory soffitto) | Non impostato | È necessario configurare | 
| On-demand solo | Applicato | Scegli tu (Spot/On-Demand) | 
| Protezione dal consolidamento (`do-not-disrupt`/PDB) | La tua responsabilità | La tua responsabilità | 

## Cosa blocca il consolidamento
<a name="_what_blocks_consolidation"></a>

Il consolidamento viene bloccato quando EKS Auto Mode determina che l'interruzione di un nodo violerebbe i requisiti di disponibilità di un carico di lavoro. Le seguenti configurazioni impediscono il consolidamento:

### `L'annotazione «do-not-disrupt»`
<a name="_the_do_not_disrupt_annotation"></a>

L'`karpenter.sh/do-not-disrupt`annotazione indica a EKS Auto Mode di conservare un nodo finché il pod annotato è in esecuzione su di esso. Ciò impedisce che il nodo venga consolidato, sostituito o terminato, anche se il nodo è sottoutilizzato.

```
metadata:
  annotations:
    karpenter.sh/do-not-disrupt: "true"
```

**Importante**  
 **Implicazione dei costi**: quando un pod contiene l'`do-not-disrupt`annotazione, il nodo su cui viene eseguita è esente dal consolidamento. Ciò significa che:  
Il nodo continua a funzionare alla dimensione corrente dell'istanza indipendentemente dall'utilizzo effettivo.
L'utilizzo di vCPU e memoria su quel nodo può rimanere elevato anche se la domanda del carico di lavoro diminuisce.
Se più pod su più nodi contengono questa annotazione, il consolidamento a livello di cluster viene notevolmente ridotto, con conseguente aumento dei costi sostenuti.
L'`do-not-disrupt`annotazione è un meccanismo di disponibilità. Non tiene conto dei costi. Usalo solo per carichi di lavoro in cui un'interruzione durante l'esecuzione causa la perdita di dati o una significativa rilavorazione, ad esempio processi in batch di lunga durata o processi stateful senza checkpoint.

 **Alternative da considerare:**
+  **Pod Disruption Budgets (PDB)**: utilizzate i PDB per controllare la frequenza delle interruzioni anziché bloccarla completamente. I PDB consentono di procedere al consolidamento garantendo al contempo la disponibilità di un numero minimo di repliche.
+  **Shorter-lived carichi di lavoro**: per CI/CD i runner e gli agenti di compilazione, consentite le interruzioni e affidatevi alla logica di riprova integrata nel sistema CI anziché utilizzarla. `do-not-disrupt`
+  **Time-limited annotazioni**: applicale `do-not-disrupt` solo per la durata di un'operazione critica, quindi rimuovile a livello di codice al termine dell'operazione.

### Pod Disruption Budget (PDB)
<a name="_pod_disruption_budgets_pdbs"></a>

I PDB con un numero di repliche `minAvailable` pari `maxUnavailable: 0` o uguale a quello corrente bloccano di fatto ogni consolidamento per i pod interessati. Esamina i tuoi PDB per assicurarti che consentano l'interruzione di almeno un pod alla volta.

## Utilizzate NodePool i limiti come massimale di costo
<a name="_use_nodepool_limits_as_a_cost_ceiling"></a>

NodePool `limits`stabilisci un limite massimo alle risorse di elaborazione totali che una macchina NodePool può fornire. Quando viene raggiunto il limite, EKS Auto Mode interrompe il lancio di nuovi nodi a tale scopo. NodePool Ciò accade anche se i pod sono in sospeso.

`limits`Utilizzatelo come barriera ai costi, in particolare per NodePools carichi di lavoro non di produzione, di test o a intermittenza in cui la scalabilità illimitata non è appropriata.

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: ci-runners
spec:
  template:
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m"]
  limits:
    cpu: "500"
    memory: 1000Gi
```

In questo esempio, `ci-runners` NodePool non può superare 500 vCPU o 1000 GiB di memoria in totale su tutti i nodi di cui fornisce il provisioning. I pod che superano questo limite rimangono invariati fino a quando la capacità non viene `Pending` liberata.

**Suggerimento**  
Imposta `limits` in base alla dimensione massima prevista del burst più un buffer per la sostituzione dei nodi. Controlla regolarmente il tuo NodePool utilizzo e regola i limiti man mano che cambiano i modelli di carico di lavoro.

## Escludi le famiglie di istanze per il controllo dei costi
<a name="_exclude_instance_families_for_cost_control"></a>

Per impostazione predefinita, EKS Auto Mode seleziona tra un'ampia gamma di tipi di istanze per massimizzare la flessibilità di pianificazione. Per i carichi di lavoro che non richiedono hardware specializzato, limita le famiglie di istanze per evitare il lancio di costosi tipi di istanze.

### Escludi le istanze accelerate
<a name="_exclude_accelerated_instances"></a>

Se i tuoi carichi di lavoro non richiedono risorse GPU o acceleratori, escludi le famiglie di istanze accelerate dalle tue. NodePool In questo modo si evitano scenari in cui le istanze accelerate vengono selezionate durante i vincoli di capacità.

```
spec:
  template:
    spec:
      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m", "r"]
```

Specificando solo le categorie ottimizzate per il calcolo, per uso generico e ottimizzate per la memoria, si escludono dalla selezione le famiglie di istanze accelerate (P, G, Inf, Trn) e altre famiglie di istanze specializzate.

### In che modo la selezione delle istanze interagisce con i vincoli di capacità
<a name="_how_instance_selection_interacts_with_capacity_constraints"></a>

EKS Auto Mode riduce la priorità ai tipi di istanza accelerati ed esotici durante la normale selezione delle istanze. Tuttavia, quando si verificano errori di avvio prolungati, EKS Auto Mode verrà avviata da qualsiasi tipo di istanza disponibile rimanente per dare priorità alla disponibilità del carico di lavoro. Ad esempio, ciò accade quando le quote di servizio EC2 sono temporaneamente esaurite per tutti i tipi di istanze preferiti.

Per evitare questo comportamento fallback, limita esplicitamente i tuoi NodePool requisiti alle sole categorie di istanze richieste dal tuo carico di lavoro. Quando i tipi preferiti non sono disponibili e non sono consentiti altri tipi dalla NodePool configurazione, i pod rimangono invariati anziché essere programmati su `Pending` istanze costose.

### Limita le dimensioni delle istanze
<a name="_constrain_instance_sizes"></a>

Oltre a limitare le famiglie di istanze, puoi limitare la dimensione massima delle istanze all'interno delle tue. NodePool La limitazione delle dimensioni delle istanze limita l'esposizione ai costi di ogni singolo nodo che non può essere consolidato. Ad esempio, un nodo bloccato da un'`do-not-disrupt`annotazione non può ridursi anche se il carico di lavoro è ridotto.

Utilizzate l'`eks.amazonaws.com/instance-cpu`etichetta per limitare le dimensioni massime delle istanze in base ai vostri requisiti: NodePool 

```
requirements:
  - key: "eks.amazonaws.com/instance-cpu"
    operator: Lte
    values: ["32"]
```

Questa configurazione impedisce a EKS Auto Mode di avviare istanze più grandi di 32 vCPU al suo interno. NodePool

Per identificare le opportunità di ottimizzazione in un cluster esistente, esamina le istanze più grandi in esecuzione. Se il consolidamento dei nodi di grandi dimensioni viene costantemente bloccato, il costo per nodo di tale capacità inattiva è proporzionalmente più elevato.

## Schemi consigliati per carichi di lavoro intensi
<a name="_recommended_patterns_for_bursty_workloads"></a>

CI/CD le pipeline, i processi in batch e i runner temporanei creano modelli di burst-and-idle che richiedono una configurazione specifica per mantenere l'efficienza dei costi.

### Impostazioni predefinite consigliate per carichi di lavoro intensi
<a name="_recommended_defaults_for_bursty_workloads"></a>


| Configurazione | Raccomandazione | 
| --- | --- | 
|  `do-not-disrupt`  | Non utilizzare per i corridori. CI/CD Affidati invece ai meccanismi di riprova e coda del tuo sistema CI. | 
| NodePool `limits`  | Imposta un CPU/memory limite in base alla concorrenza massima prevista più il buffer per la sostituzione dei nodi e la sovrapposizione. | 
| Categorie di istanze | Limitato a `c` e `m` famiglie. Escludi le famiglie di istanze accelerate (P, G, Inf, Trn) per carichi di lavoro non GPU. | 
| Dimensioni dell'istanza | Prendi in considerazione la possibilità di limitarsi a dimensioni moderate (ad esempio, 4-32 vCPU) per limitare l'esposizione ai costi di ogni singolo nodo che viene bloccato dal consolidamento. | 
| Tempi di consolidamento | Usa l'impostazione predefinita`consolidateAfter`. Evita di impostare ritardi prolungati che mantengano online la capacità massima dopo che i corridori hanno completato il gioco. | 
| Tipo capacità | Usa le istanze Spot per i corridori con tolleranza ai guasti. Combinalo con On-Demand for build agent che mantengono lo stato durante l'esecuzione. | 

### Esempio: CI runner NodePool
<a name="_example_ci_runner_nodepool"></a>

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: ci-runners
spec:
  template:
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m"]
        - key: "eks.amazonaws.com/instance-cpu"
          operator: Lte
          values: ["32"]
        - key: "karpenter.sh/capacity-type"
          operator: In
          values: ["spot", "on-demand"]
  limits:
    cpu: "500"
    memory: 1000Gi
  disruption:
    consolidationPolicy: WhenEmptyOrUnderutilized
    consolidateAfter: 30s
```

Questa configurazione:
+ Limita a famiglie di istanze convenienti
+ Limita la NodePool capacità totale a 500 vCPU
+ Consente un consolidamento aggressivo (30 secondi dopo la rimozione dei pod)
+ Consente sia Spot che Capacity On-Demand 

## Ciclo di vita e costo dei nodi
<a name="_node_lifecycle_and_cost"></a>

La modalità automatica EKS sostituisce i nodi con discontinuità quando si discostano dalle specifiche desiderate (ad esempio, dopo il rilascio di una nuova AMI in modalità automatica) o quando la durata del nodo si avvicina alla scadenza. Durante la graziosa sostituzione:
+ Un nuovo nodo sostitutivo viene lanciato e diventa pronto.
+ I pod vengono scaricati dal vecchio nodo, rispettando i Pod Disruption Budgets.
+ Per un breve periodo, sia il vecchio nodo che quello sostitutivo funzionano contemporaneamente.

Per i cluster con nodi grandi o numerosi, questa sovrapposizione può comportare aumenti periodici dei costi. Per ridurre al minimo l'impatto:
+  **Esamina i budget per le interruzioni: assicurati che i budget** previsti per le interruzioni consentano un esaurimento tempestivo. I budget restrittivi prolungano il periodo di sovrapposizione durante il quale sono operativi sia i vecchi che i nuovi nodi.
+  **Right-size istanze: le istanze** più piccole riducono il costo assoluto della finestra di sovrapposizione.
+  **Riduzione della durata massima dei nodi**: valori di scadenza più bassi (ad esempio, 7 giorni) creano eventi di sostituzione più frequenti ma di dimensioni inferiori. Ciò ripartisce il costo in modo più uniforme nel tempo anziché concentrarlo.

Per ulteriori informazioni sul ciclo di vita dei nodi, consulta [Informazioni sulle istanze gestite in modalità automatica di Amazon EKS](automode-learn-instances.md).