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
Creare un gruppo di risorse usando il comando
az group create
.az group create --name myResourceGroup --location eastus
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-autoscaler
parametri , --min-count
e --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-autoscaler
parametri , --min-count
e --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 , random least-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 ilcluster-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 ilcluster-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.
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.Selezionare la sezione Log nel cluster.
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:
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
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
Il componente di scalabilità automatica del cluster scrive anche lo stato di integrità in un
configmap
oggetto denominatocluster-autoscaler-status
. È possibile recuperare questi log usando il comando seguentekubectl
: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.