Uso di Kubernetes Cluster Autoscaler

Scopri come utilizzare l'Autoscaler del cluster Kubernetes per ridimensionare automaticamente i pool di nodi gestiti in un cluster creato utilizzando Kubernetes Engine (OKE).

Nota

Non è possibile utilizzare Kubernetes Cluster Autoscaler con pool di nodi virtuali.

È possibile utilizzare Kubernetes Cluster Autoscaler per ridimensionare automaticamente i pool di nodi gestiti di un cluster in base alle richieste del carico di lavoro dell'applicazione. Ridimensionando automaticamente i pool di nodi di un cluster, puoi garantire la disponibilità dell'applicazione e ottimizzare i costi.

Autoscaler del cluster Kubernetes:

  • Aggiunge nodi di lavoro a un pool di nodi quando non è possibile pianificare un pod nel cluster a causa di vincoli di risorse insufficienti.
  • Rimuove i nodi di lavoro da un pool di nodi quando i nodi sono stati sottoutilizzati per un periodo di tempo prolungato e quando i pod possono essere posizionati su altri nodi esistenti.

L'Autoscaler del cluster Kubernetes aumenta o diminuisce la dimensione di un pool di nodi automaticamente in base alle richieste di risorse, anziché in base all'utilizzo delle risorse dei nodi nel pool di nodi.

L'Autoscaler del cluster Kubernetes funziona in base al pool per nodo. È possibile utilizzare un file di configurazione per specificare i pool di nodi di destinazione per l'espansione e la contrazione, le dimensioni minima e massima per ogni pool di nodi e la modalità di esecuzione del ridimensionamento automatico. I pool di nodi a cui non viene fatto riferimento nel file di configurazione non sono gestiti dall'Autoscaler del cluster Kubernetes.

Per consentire all'Autoscaler del cluster Kubernetes di ridimensionare automaticamente i pool di nodi di un cluster in base alle richieste del carico di lavoro dell'applicazione, includere sempre i limiti delle richieste di risorse nelle specifiche dei pod (requests: in resources:).

È possibile distribuire Kubernetes Cluster Autoscaler su un cluster Kubernetes in due modi:

Per ulteriori informazioni su Kubernetes Cluster Autoscaler, vedere Cluster Autoscaler e Domande frequenti su GitHub.

Suggerimenti per l'uso di Kubernetes Cluster Autoscaler negli ambienti di produzione

Prendere in considerazione i seguenti suggerimenti:

  • Disporre sempre di almeno un pool di nodi in un cluster non gestito da Kubernetes Cluster Autoscaler. Questo pool di nodi è necessario per eseguire componenti aggiuntivi di cluster critici e l'Autoscaler del cluster Kubernetes stesso. È inoltre responsabilità dell'utente ridimensionare manualmente tutti i pool di nodi non gestiti da Kubernetes Cluster Autoscaler.
  • Definire sempre più repliche per la distribuzione di Kubernetes Cluster Autoscaler nel file di configurazione. Se è presente una sola replica che viene rimossa e non può essere ripianificata, il gestore automatico cluster Kubernetes non è in grado di creare più nodi di lavoro.
  • Nel file di configurazione, impostare max-node-provision-time su 25 minuti. In genere, il provisioning dei nuovi nodi di lavoro viene eseguito e si passa alla condizione Ready in un tempo notevolmente inferiore a questo. Tuttavia, quando a un pool di nodi vengono aggiunti più nodi contemporaneamente, il provisioning di tali nodi può richiedere più tempo. Tenere presente che la console visualizza un'avvertenza accanto ai nodi di lavoro che richiedono più di 20 minuti per l'inizializzazione. Se si presuppone che i nodi di lavoro passino alla condizione Pronto entro il tempo specificato per max-node-provision-time, è possibile ignorare l'avvertenza.
  • Nel file di configurazione è possibile specificare il numero massimo di nodi consentiti nel pool di nodi. Assicurarsi che il numero massimo di nodi specificato non superi il limite della tenancy per la forma del nodo di lavoro definita per il pool di nodi. Il gestore automatico del cluster Kubernetes non creerà mai più nodi rispetto al limite della tenancy. Se si specifica un numero maggiore del limite della tenancy, l'Autoscaler del cluster Kubernetes tenterà periodicamente di creare nodi aggiuntivi, ma non lo farà fino a quando il limite della tenancy non verrà aumentato.
  • Quando si definiscono i cluster che si desidera gestire con Autoscaler del cluster Kubernetes, si consiglia di creare più pool di nodi con un dominio di disponibilità specificato per ogni pool di nodi.
  • Progetta sempre le applicazioni per tollerare le interruzioni che possono verificarsi quando l'Autoscaler del cluster Kubernetes rimuove i nodi di lavoro o sposta i pod in un nodo di lavoro diverso prima di rimuovere un nodo di lavoro sottoutilizzato. Ad esempio, progetta applicazioni che sfruttano i budget per l'interruzione dei pod (vedere Specifica di un budget per l'interruzione dell'applicazione nella documentazione di Kubernetes).
  • Non modificare manualmente i pool di nodi gestiti da Autoscaler del cluster Kubernetes. Ad esempio, non aggiungere o rimuovere nodi utilizzando kubectl o utilizzando la console (o l'interfaccia CLI o l'API di Oracle Cloud Infrastructure). L'Autoscaler del cluster Kubernetes potrebbe ignorare tali modifiche o modificarne il funzionamento. Ad esempio, se si desidera rimuovere tutti i nodi in un pool di nodi gestito da Kubernetes Cluster Autoscaler, utilizzare sempre Kubernetes Cluster Autoscaler per ridimensionare il pool di nodi a zero.

Parametri di Autoscaler del cluster Kubernetes supportati

Puoi controllare il modo in cui Kubernetes Cluster Autoscaler ridimensiona i pool di nodi di un cluster utilizzando i parametri di configurazione.

I parametri di configurazione che è possibile utilizzare per gestire i cluster creati da Kubernetes Engine e come specificarli dipendono dal fatto che si stia utilizzando Kubernetes Cluster Autoscaler come programma standalone o come componente aggiuntivo cluster.

  • Utilizzo di Kubernetes Cluster Autoscaler come programma standalone

    Se si utilizza Kubernetes Cluster Autoscaler come programma standalone, specificare i parametri di configurazione in un file di configurazione.

    Quando si utilizza Kubernetes Cluster Autoscaler come programma standalone, non è possibile utilizzare i seguenti parametri di configurazione per gestire i cluster creati da Kubernetes Engine:

    • --node-autoprovisioning-enabled=true : non supportato.
    • --gpu-total : non supportato (specifico del provider cloud).
    • --expander=price : non supportato (specifico del provider cloud).

    Ad eccezione dei parametri precedenti, è possibile utilizzare uno qualsiasi dei parametri di configurazione quando si utilizza Kubernetes Cluster Autoscaler come programma standalone.

    Per un elenco completo dei parametri di configurazione Autoscaler del cluster Kubernetes, vedere Quali sono i parametri per CA? nelle domande frequenti su Cluster Autoscaler all'indirizzo GitHub.

  • Utilizzo di Kubernetes Cluster Autoscaler come componente aggiuntivo del cluster

    Se si utilizza Kubernetes Cluster Autoscaler come componente aggiuntivo cluster, specificare i parametri di configurazione in un file di configurazione (quando si utilizza l'interfaccia CLI o l'API) o nella console.

    Quando si utilizza Kubernetes Cluster Autoscaler come componente aggiuntivo cluster, non è possibile utilizzare i seguenti parametri di configurazione per gestire i cluster creati da Kubernetes Engine:

    • --node-autoprovisioning-enabled=true : non supportato.
    • --gpu-total : non supportato (specifico del provider cloud).
    • --expander=price : non supportato (specifico del provider cloud).

    Tenere presente che alcuni altri parametri di configurazione Kubernetes Cluster Autoscaler non sono supportati anche quando si utilizza Kubernetes Cluster Autoscaler come componente aggiuntivo cluster.

    Per un elenco dei parametri di configurazione supportati quando si utilizza Kubernetes Cluster Autoscaler come componente aggiuntivo cluster, insieme ai nomi da utilizzare quando vengono specificati, vedere Argomenti di configurazione dei componenti aggiuntivi di Cluster Autoscaler.

Note su Kubernetes Cluster Autoscaler

Tenere presente quanto riportato di seguito.

  • Il gestore automatico cluster Kubernetes aggiunge e rimuove i nodi da e verso i pool di nodi esistenti nei cluster esistenti. In particolare, ricorda che il Cluster Autoscaler di Kubernetes:

  • Quando si rimuovono i nodi di lavoro da un pool di nodi, Kubernetes Cluster Autoscaler rispetta le regole di pianificazione e rimozione dei pod. Queste regole possono impedire al gestore automatico del cluster Kubernetes di rimuovere un nodo di lavoro.

    Ad esempio, per impostazione predefinita, l'Autoscaler del cluster Kubernetes non rimuoverà i nodi che eseguono pod del sistema kube (ad esempio pod coredns), ad eccezione di DaemonSet o pod mirror. È possibile controllare questo funzionamento utilizzando un parametro di configurazione (skip-nodes-with-system-pods quando viene distribuito come programma standalone, skipNodesWithSystemPods quando viene distribuito come componente aggiuntivo cluster). Il parametro viene impostato automaticamente su true.

    Per ulteriori informazioni, vedere Quali tipi di pod possono impedire alla CA di rimuovere un nodo? nelle Domande frequenti su Cluster Autoscaler all'indirizzo GitHub.

  • Se si utilizza sia Terraform che Kubernetes Cluster Autoscaler per gestire i pool di nodi, si noti che Terraform potrebbe ripristinare le modifiche alla dimensione di un pool di nodi apportate da Kubernetes Cluster Autoscaler. Per evitare tale comportamento, utilizzare la funzione ignore_changes di Terraform, destinata in modo specifico alle situazioni in cui Terraform condivide la responsabilità di gestire un singolo oggetto con un altro processo. Ad esempio, quando una risorsa viene creata con riferimento a dati che potrebbero cambiare in futuro, ma non si desidera che tali potenziali modifiche ai dati influiscano sulla risorsa dopo la sua creazione. Il meta-argomento ignore_changes specifica gli attributi delle risorse che Terraform deve ignorare durante la pianificazione degli aggiornamenti all'oggetto remoto associato. Per ulteriori informazioni, vedere Il meta-argomento del ciclo di vita nella documentazione di Terraform.

    Ad esempio:

    resource "node_pool_1" "example" {
      # ...
    
      lifecycle {
        ignore_changes = [
          node_config_details.size
        ]
      }
    }
  • Quando esegui l'upgrade di un cluster a una nuova versione di Kubernetes, è tua responsabilità aggiornare manualmente l'Autoscaler del cluster Kubernetes per renderlo compatibile con la nuova versione di Kubernetes del cluster. L'upgrade automatico del cluster Kubernetes non viene eseguito automaticamente.
  • Per utilizzare l'Autoscaler del cluster Kubernetes per gestire un cluster creato con Kubernetes Engine, il cluster deve eseguire determinate versioni di Kubernetes come indicato di seguito.
    • Quando si utilizza Kubernetes Cluster Autoscaler come programma standalone, i cluster devono eseguire Kubernetes versione 1.17 o successiva.
    • Quando si utilizza Kubernetes Cluster Autoscaler come componente aggiuntivo cluster, i cluster devono eseguire Kubernetes versione 1.25 o successiva.
  • È possibile utilizzare l'Autoscaler del cluster Kubernetes con pool di nodi gestiti, ma non con pool di nodi virtuali.