Usare il componente di scalabilità automatica del cluster nel servizio Azure Kubernetes (AKS)
Per restare al 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 autoscaler 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 2.0.76 o versioni successive. 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 comando
az aks create
e abilitare e configurare il ridimensionamento automatico del cluster nel pool di nodi per il cluster usando il parametro--enable-cluster-autoscaler
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 \ --generate-ssh-keys
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 comando
az aks update
e il parametro--disable-cluster-autoscaler
.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'autoscaler orizzontale dei pod, questo continua a funzionare con l'autoscaler del cluster disabilitato, ma i pod potrebbero finire per non poter essere pianificati se tutte le risorse dei nodi 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 comando az aks update
e specificando i parametri --enable-cluster-autoscaler
, --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 comando
az aks nodepool update
.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 comando
az aks nodepool update
e il parametro--disable-cluster-autoscaler
.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 comando az aks nodepool update
e specificando i parametri --enable-cluster-autoscaler
, --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 del componente 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 comando
az aks update
e aggiornare il ridimensionamento automatico del cluster usando il parametro--update-cluster-autoscaler
e specificando il nodo aggiornato--min-count
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 del componente di scalabilità automatica del cluster
È anche possibile configurare dettagli più granulari del componente di scalabilità automatica 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 si hanno carichi di lavoro che vengono eseguiti ogni 15 minuti, può essere opportuno modificare il profilo di scalabilità automatica in modo da 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 interessa tutti i pool di nodi che usano il componente di scalabilità automatica 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 della rivalutazione del cluster per l'aumento o la riduzione. | 10 secondi |
scale-down-delay-after-add |
Intervallo di tempo tra l'aumento e la ripresa della valutazione per la riduzione. | 10 minuti |
scale-down-delay-after-delete |
Intervallo di tempo tra l'eliminazione del nodo e la ripresa della valutazione per la riduzione. | scan-interval |
scale-down-delay-after-failure |
Intervallo di tempo tra un errore di riduzione e la ripresa della valutazione per la riduzione. | Tre minuti |
scale-down-unneeded-time |
Per quanto tempo un nodo non deve essere necessario prima di essere idoneo per la riduzione. | 10 minuti |
scale-down-unready-time |
Per quanto tempo un nodo non pronto non deve essere necessario prima di essere idoneo per la riduzione. | 20 minuti |
ignore-daemonsets-utilization |
Indica se i pod DaemonSet verranno ignorati durante il calcolo dell'utilizzo delle risorse per ridurre le prestazioni. | false |
daemonset-eviction-for-empty-nodes |
Indica se i pod DaemonSet verranno terminati normalmente da nodi vuoti. | false |
daemonset-eviction-for-occupied-nodes |
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 divisa per la capacità, in cui un nodo può essere considerato per la riduzione. | 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 comprendono 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 |
Nota
I parametri ignore-daemonsets-utilization, daemonset-eviction-for-empty-nodes e daemonset-eviction-for-occupied-nodes sono disponibili a livello generale dall'API versione 2024-05-01. Se si usa l'interfaccia della riga di comando per aggiornare questi flag, assicurarsi di usare la versione 2.63 o successiva.
Impostare il profilo di scalabilità automatica del cluster in un nuovo cluster
Creare un cluster del servizio Azure Kubernetes usando il comando
az aks create
e impostare il profilo di scalabilità automatica del cluster usando il parametrocluster-autoscaler-profile
.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 \ --generate-ssh-keys
Impostare il profilo del componente di scalabilità automatica del cluster in un cluster esistente
Impostare il ridimensionamento automatico del cluster in un cluster esistente usando il comando
az aks update
e il parametrocluster-autoscaler-profile
. Nell'esempio seguente l'intervallo di analisi viene impostato su 30 s:az aks update \ --resource-group myResourceGroup \ --name myAKSCluster \ --cluster-autoscaler-profile scan-interval=30s
Configurare il profilo di scalabilità automatica del cluster per la riduzione aggressiva
Nota
La riduzione in modo aggressivo non è consigliata per i cluster che riscontrano frequenti scale-out e scale-in entro brevi intervalli, poiché potrebbe comportare tempi di provisioning estesi dei nodi in tali circostanze. L'aumento di scale-down-delay-after-add
può essere utile in queste circostanze se si mantiene più a lungo il nodo 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=0m,scale-down-delay-after-failure=1m,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 di burst
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 comando
az aks update
.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 seguente query di esempio in Log Analytics:
AzureDiagnostics | where Category == "cluster-autoscaler"
Visualizzare gli eventi non attivati con 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
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/componente di scalabilità automatica.
Metriche del ridimensionamento automatico del cluster
È possibile abilitare le metriche del piano di controllo (anteprima) per visualizzare i log e le operazioni dal ridimensionamento automatico del cluster con il componente aggiuntivo del servizio gestito per Prometheus di Monitoraggio di Azure
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.
Azure Kubernetes Service