Opzioni di ridimensionamento per le applicazioni nel servizio Azure Kubernetes

Quando si eseguono applicazioni nel servizio Azure Kubernetes potrebbe risultare necessario aumentare o ridurre la quantità di risorse di calcolo. Se si cambia il numero di istanze dell'applicazione disponibili, potrebbe risultare necessario cambiare il numero di nodi Kubernetes sottostanti. Potrebbe anche essere necessario effettuare il provisioning di un numero elevato di altre istanze dell'applicazione.

Questo articolo presenta i concetti di base relativi al ridimensionamento delle applicazioni del servizio Azure Kubernetes, tra cui il ridimensionamento manuale di pod o nodi, usando la scalabilità automatica dei pod orizzontale, usando il ridimensionamento automatico del cluster e l'integrazione con Istanze di Azure Container (ACI).

Ridimensionare manualmente i pod o i nodi

È possibile ridimensionare manualmente le repliche (pod) e i nodi per verificare come risponde l'applicazione a una modifica delle risorse disponibili e dello stato. Il ridimensionamento manuale delle risorse consente di definire una quantità specifica di risorse da usare per mantenere un costo fisso, ad esempio il numero di nodi. Per eseguire il ridimensionamento manuale, è necessario definire il numero di repliche o nodi. L'API Kubernetes pianifica quindi la creazione di più pod o lo svuotamento dei nodi in base a tale numero di repliche o nodi.

Quando si riducono i nodi, l'API Kubernetes chiama l'API Calcolo di Azure pertinente associata al tipo di calcolo usato dal cluster. Ad esempio, per i cluster basati su set di scalabilità di macchine virtuali, set di scalabilità di macchine virtuali API determina quali nodi rimuovere. Per altre informazioni su come vengono selezionati i nodi per la rimozione su scala ridotta, vedere le domande frequenti set di scalabilità di macchine virtuali.

Per iniziare a ridimensionare manualmente i nodi, vedere Ridimensionare manualmente i nodi in un cluster del servizio Azure Kubernetes. Per ridimensionare manualmente il numero di pod, vedere il comando kubectl scale.

Utilità di scalabilità automatica orizzontale dei pod

Kubernetes usa l'utilità di ridimensionamento automatico orizzontale dei pod (HPA) per monitorare la richiesta di risorse e adattare automaticamente il numero di pod. Per impostazione predefinita, l'utilità HPA controlla l'API Metriche ogni 15 secondi per rilevare eventuali modifiche richieste del numero di repliche e l'API Metriche recupera i dati da Kubelet ogni 60 secondi. L'utilità HPA viene quindi aggiornata ogni 60 secondi. Quando sono necessarie modifiche, il numero di repliche viene aumentato o ridotto di conseguenza. HPA funziona con i cluster del servizio Azure Kubernetes che hanno distribuito il server delle metriche per Kubernetes versione 1.8 e successive.

Ridimensionamento automatico orizzontale dei pod Kubernetes

Quando si configura HPA per una distribuzione specifica, si definisce il numero minimo e massimo di repliche che può essere eseguito. È anche possibile definire le metriche da monitorare e su cui basare qualsiasi decisione per il ridimensionamento, ad esempio l'utilizzo della CPU.

Per informazioni introduttive sul ridimensionamento automatico orizzontale dei pod in servizio Azure Kubernetes, vedere Scalare automaticamente i pod.

Raffreddamento degli eventi di ridimensionamento

Poiché l'utilità HPA viene effettivamente aggiornata ogni 60 secondi, gli eventi di ridimensionamento precedenti potrebbero non essere stati completati correttamente prima che venga effettuato un altro controllo. A causa di questo comportamento, l'utilità HPA potrebbe modificare il numero di repliche prima che l'evento di ridimensionamento precedente riceva il carico di lavoro dell'applicazione e le richieste di risorse, in modo da adattarsi di conseguenza.

Per ridurre al minimo gli eventi di race condition, viene impostato un valore di ritardo. Questo valore definisce il tempo di attesa da parte dell'utilità HPA dopo un evento di ridimensionamento prima che possa essere attivato un altro evento di ridimensionamento. Questo comportamento consente al nuovo numero di repliche di diventare effettivo e all'API Metriche di rispecchiare il carico di lavoro distribuito. Non è previsto alcun ritardo per gli eventi di aumento delle prestazioni a partire da Kubernetes 1.12, ma il ritardo predefinito per gli eventi di riduzione delle prestazioni è di 5 minuti.

Ridimensionamento automatico del cluster

Per rispondere alle variazioni della domanda di pod, l'utilità di scalabilità automatica del cluster di Kubernetes regola il numero di nodi in base alle risorse di calcolo richieste nel pool di nodi. Per impostazione predefinita, l'utilità di scalabilità automatica del cluster controlla il server API Metriche ogni 10 secondi per verificare se sono presenti eventuali modifiche necessarie nel numero di nodi. Se l'utilità di scalabilità automatica del cluster determina che è necessaria una modifica, il numero di nodi nel cluster servizio Azure Kubernetes viene aumentato o ridotto di conseguenza. L'utilità di scalabilità automatica del cluster funziona con i cluster servizio Azure Kubernetes abilitati per il Controllo degli accessi in base al ruolo che eseguono Kubernetes 1.10.x o versione successiva.

Ridimensionamento automatico del cluster Kubernetes

L'utilità di scalabilità automatica del cluster viene in genere usata insieme all'utilità di scalabilità automatica orizzontale dei pod. Se vengono usate insieme, l'utilità di scalabilità automatica orizzontale dei pod aumenta o diminuisce il numero di pod in base alla domanda dell'applicazione e l'utilità di scalabilità automatica del cluster regola il numero di nodi per l'esecuzione di più pod.

Per iniziare a usare il ridimensionamento automatico del cluster nel servizio Azure Kubernetes, vedere Scalabilità automatica del cluster nel servizio Azure Kubernetes.

Eventi di aumento del numero di istanze

Se un nodo non ha risorse di calcolo sufficienti per eseguire un pod richiesto, quel pod non può procedere nel processo di pianificazione. Il pod non può essere avviato a meno che non siano disponibili più risorse di calcolo all'interno del pool di nodi.

Quando il ridimensionamento automatico del cluster rileva i pod che non possono essere pianificati a causa di vincoli di risorse del pool di nodi, il numero di nodi all'interno del pool di nodi viene aumentato per fornire risorse di calcolo aggiuntive. Quando i nodi vengono distribuiti correttamente e disponibili per l'uso all'interno del pool di nodi, i pod vengono quindi pianificati per l'esecuzione su di essi.

Se l'applicazione deve essere ridimensionata rapidamente, alcuni pod potrebbero rimanere in uno stato in attesa di essere pianificati fino a quando altri nodi distribuiti dal ridimensionamento automatico del cluster possono accettare i pod pianificati. Per le applicazioni con richieste burst elevate, è possibile gestire il ridimensionamento con nodi virtuali e Istanze di Azure Container.

Eventi di riduzione del numero di istanze

L'utilità di scalabilità automatica del cluster esegue anche il monitoraggio dello stato di pianificazione dei pod per i nodi che non hanno ricevuto di recente nuove richieste di pianificazione. Questo scenario indica che il pool di nodi ha più risorse di calcolo del necessario e il numero di nodi può essere ridotto. Per impostazione predefinita, i nodi che superano una soglia poiché non risultano più necessari da 10 minuti sono inclusi nella pianificazione per l'eliminazione. Quando si verifica questa situazione, i pod vengono pianificati per l'esecuzione su altri nodi all'interno del pool di nodi e il ridimensionamento automatico del cluster riduce il numero di nodi.

Le applicazioni potrebbero riscontrare alcuni problemi mentre i pod vengono pianificati per nodi diversi quando il ridimensionamento automatico del cluster riduce il numero di nodi. Per ridurre al minimo i disagi, evitare le applicazioni che usano una singola istanza di pod.

Scalabilità automatica guidata dagli eventi di Kubernetes (KEDA)

La scalabilità automatica basata su eventi di Kubernetes è un componente open source per la scalabilità automatica basata su eventi dei carichi di lavoro. Ridimensiona i carichi di lavoro in modo dinamico in base al numero di eventi ricevuti. KEDA estende Kubernetes con una definizione di risorsa personalizzata (CRD), denominata ScaledObject, per descrivere come le applicazioni devono essere ridimensionate in risposta a traffico specifico.

La scalabilità KEDA è utile negli scenari in cui i carichi di lavoro ricevono picchi di traffico o gestiscono volumi elevati di dati. È diverso da Horizontal Pod Autoscaler, poiché KEDA è basato sugli eventi e ridimensiona in base al numero di eventi, mentre HPA è basato sulle metriche in base all'utilizzo delle risorse (ad esempio, CPU e memoria).

Per iniziare a usare il componente aggiuntivo KEDA nel servizio Azure Kubernetes, vedere panoramica di KEDA.

Burst in Istanze di Azure Container (ACI)

Per ridimensionare rapidamente il cluster del servizio Azure Kubernetes, è possibile ricorrere all'integrazione con Istanze di Azure Container. Kubernetes include componenti predefiniti per modificare il numero di repliche e di nodi. Tuttavia, se l'applicazione deve essere ridimensionata rapidamente, l'utilità di scalabilità automatica orizzontale dei pod può pianificare più pod di quanto sia possibile fornire dalle risorse di calcolo esistenti nel pool di nodi. Se configurato, questo scenario attiverà quindi il ridimensionamento automatico del cluster per distribuire più nodi nel pool di nodi, ma potrebbero essere necessari alcuni minuti prima che tali nodi eseguano correttamente il provisioning e consentano all'utilità di pianificazione Kubernetes di eseguire i pod.

Ridimensionamento burst di Kubernetes in Istanze di contenitore di Azure

ACI consente di distribuire rapidamente istanze di contenitore senza sovraccarico aggiuntivo dell'infrastruttura. Quando ci si connette con il servizio Azure Kubernetes, Istanze di Azure Container diventa un'estensione logica protetta del cluster servizio Azure Kubernetes. Il componente nodi virtuali, basato su Kubelet virtuale, viene installato nel cluster del servizio Azure Kubernetes che presenta ACI come nodo Kubernetes virtuale. Kubernetes può quindi pianificare i pod che vengono eseguiti come istanze di Istanze di Azure Container tramite i nodi virtuali e non come pod sui nodi macchina virtuale direttamente nel cluster del servizio Azure Kubernetes.

L'applicazione non richiede modifiche per l'uso dei nodi virtuali. Le distribuzioni possono essere ridimensionate tra il servizio Azure Kubernetes e Istanze di Azure Container e senza alcun ritardo perché utilità di scalabilità automatica del cluster distribuisce nuovi nodi nel cluster del servizio Azure Kubernetes.

I nodi virtuali vengono distribuiti in un'altra subnet nella stessa rete virtuale del cluster del servizio Azure Kubernetes. Questa configurazione di rete virtuale protegge il traffico tra Istanze di Azure Container e servizio Azure Kubernetes. Come un cluster del servizio Azure Kubernetes, un'istanza di Istanze di Azure Container è una risorsa di calcolo logica e sicura isolata dagli altri utenti.

Passaggi successivi

Per iniziare a ridimensionare le applicazioni, vedere le risorse seguenti:

Per altre informazioni sui concetti fondamentali di Kubernetes e del servizio Azure Kubernetes, vedere gli articoli seguenti: