Usare il componente di scalabilità automatica del cluster nel servizio Azure Kubernetes (AKS)

Per mantenere il passo con le richieste delle applicazioni nel servizio Azure Kubernetes, potrebbe essere necessario modificare il numero di nodi che eseguono i carichi di lavoro. Il componente di scalabilità automatica del cluster controlla i pod nel cluster che non possono essere pianificati a causa di vincoli di risorse. Quando il ridimensionamento automatico del cluster rileva i problemi, aumenta il numero di nodi nel pool di nodi per soddisfare le esigenze dell'applicazione. Controlla regolarmente anche la mancanza di pod in esecuzione e riduce il numero di nodi in base alle esigenze.

Questo articolo illustra come abilitare e gestire il ridimensionamento automatico del cluster nel servizio Azure Kubernetes, basato sulla versione di Kubernetes open source.

Operazioni preliminari

Questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.0.76 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Usare il ridimensionamento automatico del cluster in un cluster del servizio Azure Kubernetes

Importante

Il ridimensionamento automatico del cluster è un componente di Kubernetes. Anche se il cluster del servizio Azure Kubernetes usa un set di scalabilità di macchine virtuali per i nodi, non abilitare o modificare manualmente le impostazioni per la scalabilità automatica del set di scalabilità. Consentire il ridimensionamento automatico del cluster Kubernetes di gestire le impostazioni di scalabilità necessaria. Per altre informazioni, consultare È possibile modificare le risorse del servizio Azure Kubernetes nel gruppo di risorse del nodo?

Abilitare l'utilità di scalabilità automatica del cluster in un nuovo cluster

  1. Creare un gruppo di risorse usando il comando az group create.

    az group create --name myResourceGroup --location eastus
    
  2. Creare un cluster del servizio Azure Kubernetes usando il az aks create comando e abilitare e configurare il ridimensionamento automatico del cluster nel pool di nodi per il cluster usando il --enable-cluster-autoscaler parametro e specificando un nodo --min-count e --max-count. Il comando di esempio seguente crea un cluster con un singolo nodo supportato da un set di scalabilità di macchine virtuali, abilita il ridimensionamento automatico del cluster, imposta un minimo di uno e un massimo di tre nodi:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3
    

    Sono necessari alcuni minuti per creare il cluster e configurare le impostazioni del componente di scalabilità automatica del cluster.

Abilitare l'utilità di scalabilità automatica del cluster per un cluster esistente

  • Aggiornare un cluster esistente usando il comando az aks update e abilitare e configurare l'utilità di scalabilità automatica nel pool di nodi usando il parametro --enable-cluster-autoscaler e specificando un nodo --min-count e--max-count. Il comando di esempio seguente aggiorna un cluster del servizio Azure Kubernetes esistente per abilitare l'utilità di scalabilità automatica del cluster nel pool di nodi per il cluster e imposta un minimo di uno e un massimo di tre nodi:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    Sono necessari alcuni minuti per aggiornare il cluster e configurare le impostazioni dell'utilità di scalabilità automatica del cluster.

Disabilitare l'utilità di scalabilità automatica del cluster in un cluster

  • Disabilitare il ridimensionamento automatico del cluster usando il az aks update comando e il --disable-cluster-autoscaler parametro .

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    I nodi non vengono rimossi quando il componente di scalabilità automatica del cluster è disabilitato.

Nota

È possibile ridimensionare manualmente il cluster dopo aver disabilitato l'utilità di scalabilità automatica del cluster usando il comando az aks scale. Se si usa l'utilità di scalabilità automatica orizzontale dei pod, continua a essere eseguita con il ridimensionamento automatico del cluster disabilitato, ma i pod potrebbero non essere pianificati se tutte le risorse del nodo sono in uso.

Riabilitare il ridimensionamento automatico del cluster in un cluster

È possibile riabilitare il ridimensionamento automatico del cluster in un cluster esistente usando il az aks update comando e specificando i --enable-cluster-autoscalerparametri , --min-counte --max-count .

Usare il ridimensionamento automatico del cluster nei pool di nodi

Usare il ridimensionamento automatico del cluster in più pool di nodi

È possibile usare il ridimensionamento automatico del cluster con più pool di nodi e abilitare il ridimensionamento automatico del cluster in ogni singolo pool di nodi e passarvi regole di scalabilità automatica univoche.

  • Aggiornare le impostazioni in un pool di nodi esistente usando il az aks nodepool update comando .

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Disabilitare il ridimensionamento automatico del cluster in un pool di nodi

  • Disabilitare il ridimensionamento automatico del cluster in un pool di nodi usando il az aks nodepool update comando e il --disable-cluster-autoscaler parametro .

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

Riabilitare il ridimensionamento automatico del cluster in un pool di nodi

È possibile riabilitare il ridimensionamento automatico del cluster in un pool di nodi usando il az aks nodepool update comando e specificando i --enable-cluster-autoscalerparametri , --min-counte --max-count .

Nota

Se si prevede di usare il ridimensionamento automatico del cluster con pool di nodi che si estendono su più zone e sfruttare le funzionalità di pianificazione correlate alle zone, ad esempio la pianificazione topologica del volume, è consigliabile avere un pool di nodi per zona e abilitare --balance-similar-node-groups tramite il profilo di scalabilità automatica. In questo modo il ridimensionamento automatico può aumentare e mantenere bilanciate le dimensioni dei pool di nodi.

Aggiornare le impostazioni di scalabilità automatica del cluster

Man mano che le esigenze dell'applicazione cambiano, potrebbe essere necessario modificare il numero di nodi del ridimensionamento automatico del cluster in modo da ridimensionare in modo efficiente.

  • Modificare il numero di nodi usando il az aks update comando e aggiornare il ridimensionamento automatico del cluster usando il --update-cluster-autoscaler parametro e specificando il nodo --min-count aggiornato e --max-count.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

Nota

Il componente di scalabilità automatica del cluster applica il conteggio minimo nei casi in cui il conteggio effettivo scende al di sotto del minimo a causa di fattori esterni, ad esempio durante una rimozione spot o quando si modifica il valore minimo del conteggio dall'API del servizio Azure Kubernetes.

Usare il profilo di scalabilità automatica del cluster

È possibile configurare dettagli più granulari del ridimensionamento automatico del cluster modificando i valori predefiniti nel profilo di scalabilità automatica a livello di cluster. Ad esempio, un evento di riduzione si verifica quando i nodi sono sottoutilizzati dopo 10 minuti. Se sono presenti carichi di lavoro eseguiti ogni 15 minuti, è possibile modificare il profilo di scalabilità automatica per ridurre i nodi sottoutilizzati dopo 15 o 20 minuti. Quando si abilita il componente di scalabilità automatica del cluster, viene usato un profilo predefinito, a meno che non si specifichino impostazioni diverse.

Importante

Il profilo di scalabilità automatica del cluster influisce su tutti i pool di nodi che usano il ridimensionamento automatico del cluster. Non è possibile impostare un profilo di scalabilità automatica per ogni pool di nodi. Quando si imposta il profilo, tutti i pool di nodi esistenti con il ridimensionamento automatico del cluster abilitato iniziano immediatamente a usare il profilo.

Impostazioni del profilo di scalabilità automatica del cluster

La tabella seguente elenca le impostazioni disponibili per il profilo di scalabilità automatica del cluster:

Impostazione Descrizione Default value
scan-interval Frequenza con cui il cluster viene rivalutato per aumentare o ridurre le prestazioni. 10 secondi
scale-down-delay-after-add Quanto tempo dopo la ripresa della scalabilità orizzontale della valutazione. 10 minuti
scale-down-delay-after-delete Quanto tempo dopo l'eliminazione del nodo che riduce la valutazione riprende. scan-interval
scale-down-delay-after-failure Quanto tempo dopo l'errore di riduzione delle prestazioni che aumentano le prestazioni della valutazione viene ripreso. Tre minuti
scale-down-unneeded-time Per quanto tempo un nodo non deve essere necessario prima che sia idoneo per la riduzione delle prestazioni. 10 minuti
scale-down-unready-time Per quanto tempo un nodo non letto deve non essere necessario prima che sia idoneo per la riduzione delle prestazioni. 20 minuti
ignore-daemonsets-utilization (Anteprima) Indica se i pod DaemonSet verranno ignorati durante il calcolo dell'utilizzo delle risorse per ridurre le prestazioni. false
daemonset-eviction-for-empty-nodes (Anteprima) Indica se i pod DaemonSet verranno terminati normalmente da nodi vuoti. false
daemonset-eviction-for-occupied-nodes (Anteprima) Indica se i pod DaemonSet verranno terminati normalmente da nodi non vuoti. true
scale-down-utilization-threshold Livello di utilizzo del nodo, definito come somma delle risorse richieste divise per capacità, in cui un nodo può essere considerato per ridurre le prestazioni. 0.5
max-graceful-termination-sec Numero massimo di secondi di attesa del componente di scalabilità automatica del cluster prima della terminazione del pod durante il tentativo di riduzione di un nodo. 600 secondi
balance-similar-node-groups Rileva pool di nodi simili e bilancia il numero di nodi tra di essi. false
expander Il tipo di espansione del pool di nodi usa in aumento delle prestazioni. I valori possibili includono most-pods, randomleast-waste, e priority. random
skip-nodes-with-local-storage Se true, il ridimensionamento automatico del cluster non elimina i nodi con pod con archiviazione locale, ad esempio EmptyDir o HostPath. false
skip-nodes-with-system-pods Se true, il componente di scalabilità automatica del cluster non elimina i nodi con pod da kube-system (ad eccezione di DaemonSet o pod mirror). true
max-empty-bulk-delete Numero massimo di nodi vuoti che possono essere eliminati contemporaneamente. 10 nodi
new-pod-scale-up-delay Per scenari come la scalabilità burst/batch in cui non si vuole che l'autorità di certificazione agisca prima che l'utilità di pianificazione kubernetes possa pianificare tutti i pod, è possibile indicare alla CA di ignorare i pod non pianificati prima che raggiungano una determinata età. 0 secondi
max-total-unready-percentage Percentuale massima di nodi non letti nel cluster. Dopo il superamento di questa percentuale, l'autorità di certificazione interrompe le operazioni. 45%
max-node-provision-time Tempo massimo di attesa per il provisioning di un nodo da parte dell'utilità di scalabilità automatica. 15 minuti
ok-total-unready-count Numero di nodi non letti consentiti, indipendentemente da max-total-unready-percentage. Tre nodi

Impostare il profilo di scalabilità automatica del cluster in un nuovo cluster

  • Creare un cluster del servizio Azure Kubernetes usando il az aks create comando e impostare il profilo di scalabilità automatica del cluster usando il cluster-autoscaler-profile parametro .

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3 \
      --cluster-autoscaler-profile scan-interval=30s
    

Impostare il profilo di scalabilità automatica del cluster in un cluster esistente

  • Impostare il ridimensionamento automatico del cluster in un cluster esistente usando il az aks update comando e il cluster-autoscaler-profile parametro . L'esempio seguente configura l'impostazione dell'intervallo di analisi come 30 secondi:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

Configurare il profilo di scalabilità automatica del cluster per ridurre le prestazioni aggressive

Nota

Il ridimensionamento in modo aggressivo non è consigliato per i cluster che riscontrano frequenti scale-out e scale-in entro brevi intervalli, in quanto potrebbe comportare tempi di provisioning estesi dei nodi in queste circostanze. L'aumento scale-down-delay-after-add può essere utile in queste circostanze mantenendo il nodo più a lungo per gestire i carichi di lavoro in ingresso.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Configurare il profilo di scalabilità automatica del cluster per carichi di lavoro bursty

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

Reimpostare il profilo di scalabilità automatica del cluster sui valori predefiniti

  • Reimpostare il profilo di scalabilità automatica del cluster usando il az aks update comando .

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

Recuperare i log e lo stato del componente di scalabilità automatica del cluster

È possibile recuperare i log e gli aggiornamenti dello stato dal componente di scalabilità automatica del cluster per diagnosticare ed eseguire il debug degli eventi di scalabilità automatica. AKS gestisce il componente di scalabilità automatica per conto dell'utente e lo esegue nel piano di controllo gestito. È possibile abilitare il nodo del piano di controllo per visualizzare i log e le operazioni dal componente di scalabilità automatica del cluster.

  1. Configurare una regola per i log delle risorse per eseguire il push dei log di scalabilità automatica del cluster in Log Analytics seguendo le istruzioni riportate qui. Assicurarsi di selezionare la casella per cluster-autoscaler quando si selezionano le opzioni per Log.

  2. Selezionare la sezione Log nel cluster.

  3. Immettere la query di esempio seguente in Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    Finché sono presenti log da recuperare, dovrebbero essere visualizzati log simili ai log seguenti:

    Screenshot dei log di Log Analytics.

  4. Visualizzare gli eventi non attivati per la scalabilità automatica del cluster nell'interfaccia della riga di comando

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. Visualizzare gli eventi di avviso di scalabilità automatica del cluster nell'interfaccia della riga di comando

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. Il componente di scalabilità automatica del cluster scrive anche lo stato di integrità in un configmap oggetto denominato cluster-autoscaler-status. È possibile recuperare questi log usando il comando seguente kubectl :

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

Per altre informazioni, vedere domande frequenti sul progetto GitHub Kubernetes/autoscaler.

Metriche del ridimensionamento automatico del cluster

È possibile abilitare le metriche del piano di controllo (anteprima) per visualizzare i log e le operazioni dal componente aggiuntivo Scalabilità automatica del cluster con il servizio gestito di Monitoraggio di Azure per Prometheus

Passaggi successivi

Questo articolo ha descritto come ridimensionare automaticamente il numero di nodi del servizio Azure Kubernetes. È anche possibile usare il componente di scalabilità automatica orizzontale dei pod per regolare automaticamente il numero di pod che eseguono l'applicazione. Per istruzioni sull'uso del componente di scalabilità automatica orizzontale dei pod, vedere Ridimensionare le applicazioni nel servizio Azure Kubernetes.

Per migliorare ulteriormente l'utilizzo delle risorse del cluster e liberare CPU e memoria per altri pod, vedere Scalabilità automatica verticale dei pod.