Configurare più nodi e abilitare la scalabilità a zero usando il servizio Azure Kubernetes

Completato

Il servizio Azure Kubernetes consente di creare pool di nodi diversi per associare carichi di lavoro specifici ai nodi in esecuzione in ogni pool. Il processo di corrispondenza dei carichi di lavoro ai nodi consente di pianificare il consumo di calcolo e ottimizzare i costi.

La soluzione di monitoraggio di droni dell'azienda è distribuita nel servizio Azure Kubernetes, come numerosi servizi e applicazioni in contenitori. Il team ha sviluppato un nuovo servizio di modellazione predittiva che consente di elaborare le informazioni sulla traiettoria di volo in condizioni meteorologiche estreme e di creare rotte di volo ottimali. Questo servizio richiede il supporto delle macchine virtuali basate su GPU e viene eseguito solo in giorni specifici della settimana.

Si vuole configurare un pool di nodi del cluster dedicato all'elaborazione delle informazioni sulle traiettorie di volo. Il processo viene eseguito solo per un paio di ore al giorno e si vuole usare un pool di nodi basato su GPU. Si vuole tuttavia pagare il costo dei nodi solo quando sono in uso.

Si esaminerà ora il modo in cui i pool di nodi e il modo in cui il servizio Azure Kubernetes usa i nodi, quindi come ridimensionare il numero di nodi in un pool di nodi.

Che cos'è un pool di nodi?

Un pool di nodi descrive un gruppo di nodi con la stessa configurazione in un cluster del servizio Azure Kubernetes. Questi nodi contengono le macchine virtuali sottostanti che eseguono le applicazioni. È possibile creare due tipi di pool di nodi in un cluster Kubernetes gestito dal servizio Azure Kubernetes:

  • Pool di nodi di sistema

  • Pool di nodi utente

Pool di nodi di sistema

I pool di nodi di sistema ospitano pod di sistema critici che costituiscono il piano di controllo del cluster. Un pool di nodi di sistema consente solo l'uso di Linux come sistema operativo del nodo ed esegue solo carichi di lavoro basati su Linux. I nodi in un pool di nodi di sistema sono riservati ai carichi di lavoro di sistema e in genere non vengono usati per eseguire carichi di lavoro personalizzati. Ogni cluster del servizio Azure Kubernetes deve contenere almeno un pool di nodi di sistema con almeno un nodo ed è necessario definire le dimensioni delle macchine virtuali sottostanti per i nodi.

Pool di nodi utente

I pool di nodi utente supportano i carichi di lavoro personalizzati ed è possibile specificare Windows o Linux come sistema operativo del nodo. È anche possibile definire le dimensioni delle macchine virtuali sottostanti per i nodi ed eseguire carichi di lavoro specifici. La soluzione di monitoraggio di droni prevede, ad esempio, un servizio di elaborazione batch distribuito in un pool di nodi configurato con macchine virtuali per utilizzo generico. Il nuovo servizio di modellazione predittiva richiede macchine virtuali basate su GPU con capacità superiore. Si decide di configurare un pool di nodi separato e di configurarlo in modo da usare nodi abilitati per la GPU.

Numero di nodi in un pool

È possibile configurare fino a 100 nodi in un pool di nodi. Il numero di nodi che si sceglie di configurare dipende tuttavia dal numero di pod in esecuzione per ogni nodo.

In un pool di nodi di sistema, ad esempio, è essenziale impostare su 30 il numero massimo di pod da eseguire in un singolo nodo. Questo valore assicura che sia disponibile spazio sufficiente per l'esecuzione dei pod di sistema critici per l'integrità del cluster. Quando il numero di pod supera questo valore minimo, nel pool sono necessari nuovi nodi per pianificare i carichi di lavoro aggiuntivi. Per questo motivo, il pool di nodi di sistema richiede almeno un nodo nel pool. Per gli ambienti di produzione, il numero di nodi consigliato per un pool di nodi di sistema è costituito da un minimo di tre nodi.

I pool di nodi utente sono progettati per eseguire carichi di lavoro personalizzati e non prevedono il requisito di 30 pod. I pool di nodi utente consentono di impostare il numero di nodi per un pool su zero.

Gestire la richiesta delle applicazioni in un cluster del servizio Azure Kubernetes

Nel servizio Azure Kubernetes, quando si aumenta o diminuisce la quantità di risorse di calcolo in un cluster Kubernetes, si sta ridimensionando. È possibile ridimensionare il numero di istanze del carico di lavoro che devono essere eseguite o il numero di nodi in cui vengono eseguiti questi carichi di lavoro. È possibile ridimensionare i carichi di lavoro in un cluster gestito dal servizio Azure Kubernetes in due modi. La prima opzione consiste nel ridimensionare i pod o i nodi manualmente, in base alle esigenze. La seconda opzione prevede l'uso dell'automazione mediante l'utilità di scalabilità automatica orizzontale dei pod per ridimensionare i pod e l'utilità di scalabilità automatica dei cluster per ridimensionare i nodi.

Come ridimensionare un pool di nodi manualmente

Se i carichi di lavoro vengono eseguiti per un tempo specifico a intervalli definiti, il ridimensionamento manuale delle dimensioni del pool di nodi è un modo appropriato per controllare i costi dei nodi.

Si supponga che il servizio di modellazione predittiva richieda un pool di nodi basato su GPU e venga eseguito per un'ora ogni giorno a mezzogiorno. È possibile configurare il pool di nodi con nodi specifici basati su GPU e ridimensionare il pool a zero nodi quando non si usa il cluster.

Di seguito è riportato un esempio del comando az aks node pool add che è possibile usare per creare il pool di nodi. Si noti il parametro --node-vm-size, che specifica le dimensioni della macchina virtuale basata su GPU Standard_NC6 per i nodi del pool.

az aks nodepool add \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

Quando il pool è pronto, è possibile usare il comando az aks nodepool scale per ridimensionare il pool a zero nodi. Si noti che il parametro --node-count è impostato su zero. Di seguito è riportato un esempio del comando:

az aks nodepool scale \
    --resource-group resourceGroup \
    --cluster-name aksCluster \
    --name gpunodepool \
    --node-count 0

Come ridimensionare un cluster automaticamente

Diagram that shows how the cluster autoscaler adds nodes and how the horizontal pod autoscaler adds pods.

Il servizio Azure Kubernetes usa l'utilità di scalabilità automatica dei cluster Kubernetes per ridimensionare automaticamente i carichi di lavoro. Il cluster può eseguire il ridimensionamento usando due opzioni:

  • Utilità di scalabilità automatica orizzontale dei pod

  • Utilità di scalabilità automatica dei cluster

Verranno esaminate ora queste due opzioni, iniziando dall'utilità di scalabilità automatica orizzontale dei pod.

Utilità di scalabilità automatica orizzontale dei pod

Usare l'utilità di scalabilità automatica orizzontale dei pod di Kubernetes per monitorare la richiesta di risorse in un cluster e ridimensionare automaticamente il numero di repliche dei carichi di lavoro.

Il server delle metriche Kubernetes raccoglie le metriche relative a memoria e processore da controller, nodi e contenitori in esecuzione nel cluster del servizio Azure Kubernetes. Per accedere a queste informazioni è possibile usare l'API delle metriche. L'utilità di scalabilità automatica orizzontale dei pod controlla l'API delle metriche ogni 30 secondi per stabilire se l'applicazione necessita di istanze aggiuntive per soddisfare la domanda.

Si supponga che l'azienda abbia anche di un servizio di elaborazione batch che pianifica le traiettorie di volo dei droni. Si noti che il servizio viene inondato con le richieste e crea un backlog di consegne, causando ritardi e frustrazioni per i clienti. L'aumento del numero di repliche del servizio di elaborazione batch potrebbe consentire l'elaborazione tempestiva degli ordini.

Per risolvere il problema, configurare il ridimensionamento automatico orizzontale del pod per aumentare il numero di repliche del servizio quando necessario. Quando il numero di richieste batch diminuisce, diminuisce il numero di repliche del servizio.

L'utilità di scalabilità automatica orizzontale dei pod, tuttavia, ridimensiona solo i pod nei nodi disponibili nei pool di nodi del cluster configurati.

Ridimensionamento automatico del cluster

Quando l'utilità di scalabilità automatica orizzontale dei pod non è in grado di pianificare un altro pod nei nodi esistenti in un pool, viene attivato un vincolo di risorse. È necessario usare l'utilità di scalabilità automatica dei cluster per ridimensionare il numero di nodi nei pool di nodi di un cluster nei periodi dei vincoli. L'utilità di scalabilità automatica dei cluster controlla le metriche definite e ridimensiona il numero di nodi, aumentandoli o riducendoli in base alle risorse di calcolo necessarie.

L'utilità di scalabilità automatica dei cluster viene usata in combinazione all'utilità di scalabilità automatica orizzontale dei pod.

L'utilità di scalabilità automatica dei cluster monitora gli eventi di scalabilità verticale, sia di aumento che di riduzione, e consente al cluster Kubernetes di modificare il numero di nodi in un pool quando le richieste di risorse cambiano.

È possibile configurare ogni pool di nodi con regole di scalabilità diverse. Ad esempio, potrebbe essere necessario configurare un solo pool di nodi per consentire la scalabilità automatica oppure configurare un pool di nodi per la scalabilità solo a un numero specifico di nodi.

Importante

Se si abilita l'utilità di scalabilità automatica dei cluster in un pool di nodi, non è più possibile ridimensionare il numero di nodi a zero. È invece possibile impostare il conteggio minimo su zero per risparmiare sulle risorse del cluster.

Verificare le conoscenze

1.

Si supponga di avere una soluzione software con tre componenti critici. Il primo componente è un'applicazione Web. Il secondo è un servizio che elabora gli ordini online. Il terzo è un servizio di rendering e analisi dei video che viene eseguito solo se necessario e che richiede macchine virtuali basate su GPU. Per ottimizzare i costi, quanti pool di nodi è necessario distribuire in un cluster del servizio Azure Kubernetes per gestire la soluzione?

2.

Completare l'affermazione seguente. L'utilità di scalabilità automatica dei cluster Kubernetes ridimensiona...