Panoramica della scalabilità di Servizio Azure Kubernetes (AKS) — HPA, VPA, Cluster Autoscaler e KEDA

Quando si eseguono applicazioni in Servizio Azure Kubernetes (AKS), è possibile ridimensionare pod, risorse pod, nodi o carichi di lavoro basati su eventi in modo che corrispondano alle variazioni della domanda. Il servizio Azure Kubernetes supporta la scalabilità manuale, il controller di scalabilità automatica orizzontale dei pod (HPA), il controller di scalabilità automatica verticale dei pod (VPA), l'utilità di scalabilità automatica dei cluster, KEDA (Kubernetes Event-driven Autoscaling), il provisioning automatico dei nodi e la scalabilità in modalità burst con Istanze di Azure Container.

Scegliere il metodo di ridimensionamento corretto

Metodo di ridimensionamento Migliore per Metrica chiave Guide
Horizontal Pod Autoscaler (HPA) Carichi di lavoro senza stato o partizionabili con domanda variabile Utilizzo della CPU, RPS, profondità della coda Quando è consigliabile usare la scalabilità automatica orizzontale dei pod in Kubernetes?
Controller di scalabilità automatica verticale dei pod (VPA) Carichi di lavoro non parallelizzabili; corretto dimensionamento delle richieste di risorse dei pod Utilizzo delle risorse CPU/memoria Usare il controller di scalabilità automatica verticale dei pod nel servizio Azure Kubernetes
Cluster Autoscaler Capacità a livello di nodo quando i pod rimangono in stato Pending Pod in sospeso Usare l'utilità di scalabilità automatica dei cluster nel servizio Azure Kubernetes
Provisioning automatico dei nodi (NAP) Carichi di lavoro in sospeso che richiedono capacità di macchina virtuale di dimensioni corrette Requisiti delle risorse dei pod in sospeso Panoramica del provisioning automatico dei nodi
KEDA Carichi di lavoro basati su eventi; ridimensionamento a zero obbligatorio Lunghezza della coda, arretrato di eventi Panoramica del componente aggiuntivo KEDA
Scalabilità in modalità burst di Istanze di Azure Container Carichi di lavoro Linux con richiesta burst che soddisfano le limitazioni dei nodi virtuali Picco di domanda Creare nodi virtuali con Istanze di Azure Container

Quando usare ogni metodo di ridimensionamento

  • Usare HPA quando il carico di lavoro può eseguire più repliche identiche e la domanda varia in base a CPU, memoria o frequenza delle richieste.
  • Usare VPA quando il carico di lavoro non può essere ridimensionato orizzontalmente (non parallelizzabile) o è necessario ridimensionare correttamente le richieste di risorse per una pianificazione migliore.
  • Usa Cluster Autoscaler quando hai pool di nodi predefiniti e devi aggiungere o rimuovere nodi in base alla richiesta dei pod in sospeso.
  • Usa NAP quando vuoi selezionare automaticamente lo SKU della VM ed eseguire il provisioning dei nodi senza configurare manualmente i pool di nodi.
  • Usare KEDA quando la scalabilità deve rispondere a eventi esterni (code, flussi, messaggi) o è necessaria una funzionalità di scalabilità a zero.
  • Usare la scalabilità in modalità burst di Istanze di Azure Container quando è necessaria un'espansione rapida della capacità per i carichi di lavoro Linux senza attendere il provisioning delle macchine virtuali (in genere da 2 a 5 minuti).

Raccomandazione rapida

Per la maggior parte dei carichi di lavoro di produzione, è consigliabile iniziare con AKS Automatic, che preconfigura NAP, VPA e KEDA. In AKS Standard, abiliti e configuri queste funzionalità esplicitamente.

Ridimensionare manualmente i pod o i nodi

È possibile ridimensionare manualmente le repliche e i nodi dei pod per testare il modo in cui l'applicazione risponde alle modifiche apportate alle risorse disponibili o per mantenere una quantità fissa di capacità. Per ridimensionare manualmente, definire il numero di repliche o nodi necessario. Kubernetes crea o rimuove quindi i pod, mentre AKS aggiunge o rimuove nodi nel pool di nodi appropriato.

Quando si riduce il numero di nodi, AKS chiama l'API Azure Compute pertinente per il tipo di calcolo del cluster. Per i cluster basati su set di scalabilità di macchine virtuali, l'API set di scalabilità di macchine virtuali determina quali nodi rimuovere. Per altre informazioni, vedere le domande frequenti sulle set di scalabilità di macchine virtuali.

Per iniziare, consultare la sezione:

Utilità di scalabilità automatica orizzontale dei pod

Usa HPA quando il carico di lavoro può eseguire più repliche identiche e la domanda varia. Scala in base alla CPU o alla memoria, alle metriche dell'applicazione (richieste al secondo, latenza) o alle metriche esterne delle code e del backlog. Quando le repliche potrebbero superare la capacità dei nodi esistenti, utilizzare la funzionalità NAP preconfigurata in AKS Automatic oppure configurare Cluster Autoscaler o NAP in AKS Standard.

Non usare HPA e VPA nelle stesse metriche di CPU o memoria. Per usare entrambe le funzionalità di scalabilità automatica, usare vpa in modalità di raccomandazione o configurare HPA per usare metriche personalizzate distinte.

Schermata di un diagramma che mostra come funziona Horizontal Pod Autoscaler con AKS.

Altre informazioni: Quando è consigliabile usare la scalabilità automatica orizzontale dei pod (HPA) in Kubernetes?

Vedi anche: Usa Vertical Pod Autoscaler in AKS per ridimensionare correttamente le richieste di CPU e memoria dei pod.

Scalabilità automatica dei pod verticali

La scalabilità automatica verticale dei pod analizza l'utilizzo della CPU e della memoria dei pod e consiglia o applica le richieste di risorse appropriate. Usare vpa per carichi di lavoro di dimensioni appropriate che non possono essere ridimensionati in modo efficiente aggiungendo repliche o per migliorare la pianificazione e l'utilizzo delle risorse.

A seconda della modalità di aggiornamento, VPA può applicare le raccomandazioni quando i pod vengono creati oppure terminare e ricreare i pod con richieste di risorse aggiornate. Esaminare i requisiti di disponibilità del carico di lavoro prima di consentire all'vpa di applicare automaticamente le modifiche.

Per iniziare, vedi Usare Vertical Pod Autoscaler in AKS.

Utilità di scalabilità automatica dei cluster

Il componente di scalabilità automatica del cluster regola il numero di nodi in un pool di nodi in base ai requisiti di pianificazione dei pod. Aggiunge nodi quando i pod non possono essere schedulati a causa della capacità insufficiente dei nodi e rimuove i nodi sottoutilizzati quando i relativi carichi di lavoro possono essere eseguiti altrove.

Screenshot di un diagramma che mostra come funziona il Cluster Autoscaler con AKS.

Cluster Autoscaler è comunemente utilizzato con HPA. HPA regola il numero di repliche dei pod in base alle esigenze del carico di lavoro, mentre Cluster Autoscaler regola la capacità dei nodi per ospitare tali pod.

Per iniziare, vedi Usare Cluster Autoscaler in AKS.

Eventi di scalabilità orizzontale

Se un pool di nodi non dispone di risorse di calcolo sufficienti per un pod, il pod rimane in sospeso. Quando Cluster Autoscaler rileva i pod che non possono essere schedulati per via dei vincoli di risorse del pool di nodi, aumenta il numero di nodi nel pool di nodi. Kubernetes pianifica i pod in sospeso dopo il provisioning dei nuovi nodi e quando questi diventano attivi.

Il provisioning dei nodi basati su vm può richiedere alcuni minuti. Per i carichi di lavoro con un picco improvviso della domanda, è consigliabile usare nodi virtuali e Istanze di Azure Container.

Ridurre gli eventi

L'utilità di scalabilità automatica dei cluster monitora i nodi per rilevare una scarsa utilizzazione e determina se i pod possono essere eseguiti su altri nodi. Quando un nodo non è più necessario, Kubernetes ripianifica i pod e AKS rimuove il nodo dal pool di nodi.

Le operazioni di scale-in possono causare interruzioni nei carichi di lavoro quando i pod si spostano tra i nodi. Eseguire più repliche dei pod e configurare adeguati controlli di disponibilità per ridurre al minimo le interruzioni.

Scalabilità automatica basata su eventi di Kubernetes

La scalabilità automatica guidata dagli eventi di Kubernetes è un componente open source che ridimensiona i carichi di lavoro in base agli eventi. KEDA estende Kubernetes con risorse personalizzate, tra cui ScaledObject, che descrivono come un carico di lavoro deve rispondere a un'origine evento o a una metrica.

KEDA è utile per i carichi di lavoro che elaborano code, flussi, messaggi o altri accumuli di eventi. Può ridimensionare i carichi di lavoro supportati a zero quando non sono disponibili eventi e aumentare le repliche man mano che aumenta il backlog.

Non combinare un KEDA ScaledObject con un HPA separato per lo stesso carico di lavoro. KEDA crea e usa internamente un HPA, quindi gli autoscaler entrerebbero in competizione tra loro.

Per iniziare, consulta la panoramica del componente aggiuntivo KEDA.

Provisioning automatico dei nodi

Il provisioning automatico dei nodi (NAP) utilizza il progetto open-source Karpenter per eseguire il provisioning e gestire i nodi in base ai requisiti dei pod in sospeso. NAP seleziona uno SKU di macchina virtuale appropriato e un numero di nodi adeguato per soddisfare le richieste del carico di lavoro in tempo reale.

Il provisioning automatico dei nodi parte da un insieme consentito di SKU di macchine virtuali e seleziona la capacità per i carichi di lavoro in attesa. È possibile definire i limiti delle risorse e le preferenze di pianificazione per controllare il modo in cui effettua il provisioning dei nodi e distribuisce i carichi di lavoro.

Ridimensionamento e misure di sicurezza del piano di controllo

AKS ridimensiona automaticamente i componenti del piano di controllo in base alle dimensioni del cluster e all'utilizzo delle risorse del server API. Queste indicazioni si applicano ad AKS Automatic e ad AKS Standard. Usare il piano tariffario Standard o Premium per carichi di lavoro di produzione o su larga scala.

Kubernetes dispone di una busta di scala multidimensionale in cui ogni tipo di risorsa inserisce richieste diverse sul piano di controllo. Ad esempio, i segreti vengono spesso visualizzati da più controller e pod che effettuano una chiamata LIST iniziale, creando più carico del piano di controllo rispetto alle risorse osservate meno frequentemente. La scalabilità elevata in una dimensione può ridurre la capacità in altre. Ad esempio, eseguire centinaia di migliaia di pod può ridurre il tasso di mutazione dei pod che il piano di controllo può supportare. Per consigli, vedere Procedure consigliate per i client Kubernetes per cluster AKS su larga scala.

Per verificare se il piano di controllo è stato aumentato, esaminare large-cluster-control-plane-scaling-status ConfigMap:

kubectl describe configmap large-cluster-control-plane-scaling-status -n kube-system

La presenza di questo oggetto ConfigMap conferma che AKS aumenta il piano di controllo.

Misure di sicurezza del piano di controllo

Se il ridimensionamento automatico del server API non riesce a stabilizzarlo in condizioni di carico elevato, AKS può distribuire una protezione gestita per il server API. Questa misura di protezione di ultima istanza limita le richieste dei client non di sistema per evitare che il piano di controllo diventi non responsivo. Le chiamate al server API fondamentali per il sistema da componenti come kubelet continuano a funzionare.

Per determinare se è stata applicata la protezione del server API gestita, verificare la presenza di aks-managed-apiserver-guardFlowSchema e PriorityLevelConfiguration:

kubectl get flowschemas
kubectl get prioritylevelconfigurations

La protezione è attiva quando aks-managed-apiserver-guard viene visualizzata in entrambi gli output dei comandi.

Se queste risorse sono presenti, vedere la guida alla risoluzione dei problemi del server API e etcd per indicazioni sulla mitigazione.

Ridimensionamento burst in Istanze di Azure Container

È possibile integrare AKS con Istanze di Azure Container per gestire rapidi aumenti della domanda. La scalabilità automatica dei pod può creare più repliche di quante il pool di nodi esistente possa supportare, mentre il provisioning di nodi aggiuntivi basati su VM può richiedere diversi minuti. ACI offre capacità di calcolo senza richiedere nodi di macchina virtuale aggiuntivi.

I nodi virtuali (nodi Kubernetes virtuali basati su ACI) supportano pod e nodi Linux e richiedono un cluster AKS che usa la rete Azure CNI. Non supportano alcuni scenari comuni, tra cui intervalli IP autorizzati del server API, volumi persistenti e attestazioni di volumi persistenti, IPv6 e identità gestite collegate ai nodi virtuali. Esaminare le limitazioni dei nodi virtuali prima di usare il ridimensionamento burst ACI.

Schermata di un diagramma che mostra il funzionamento di Istanze di Azure Container con AKS.

Il componente AKS nodi virtuali si basa su Virtual Kubelet e presenta ACI come un nodo Kubernetes virtuale. Kubernetes può schedulare i pod idonei tramite il nodo virtuale per eseguirli come istanze di contenitore di ACI anziché direttamente nei nodi VM di AKS.

I nodi virtuali utilizzano un'altra subnet nella stessa rete virtuale del cluster AKS. Questa configurazione consente la connettività di rete privata tra AKS e ACI, permettendo al contempo ad ACI di fungere da estensione logica del cluster.

Usare le risorse seguenti per implementare il metodo di ridimensionamento adatto al carico di lavoro:

Per ulteriori informazioni sui concetti fondamentali di Kubernetes e di AKS, vedi: