Esercizio - Configurare più nodi e abilitare il ridimensionamento a zero in un cluster del servizio Azure Kubernetes
Il servizio Azure Kubernetes consente di creare pool di nodi diversi per associare carichi di lavoro specifici ai nodi in esecuzione in ogni pool.
Si ricordi dall'esempio di rilevamento dei droni che il team ha sviluppato un nuovo servizio di modellazione predittiva che elabora le informazioni sul percorso di volo in condizioni meteorologiche estreme e crea itinerari di volo ottimali. Questo servizio richiede il supporto delle macchine virtuali basate su GPU e viene eseguito solo in giorni specifici della settimana. Il team vuole assicurarsi che non vengano usate macchine virtuali quando il servizio non è in esecuzione.
Si procederà alla creazione di un cluster Kubernetes gestito dal servizio Azure Kubernetes (AKS). Successivamente, si configurerà il cluster per supportare più pool di nodi e si consentirà ai cluster di ridimensionare i nodi nei pool di nodi. Si aggiungerà quindi un secondo pool di nodi per supportare i carichi di lavoro utente con un conteggio di nodi dinamico. Infine, si ridurrà il numero di nodi a zero per ridurre il costo dei nodi usati nel cluster del servizio Azure Kubernetes.
Creare un nuovo gruppo di risorse
Accedere ad Azure Cloud Shell usando il proprio account Azure. Selezionare la versione Bash di Cloud Shell.
I valori creati qui verranno riutilizzati in tutti gli esercizi di questo modulo. Salvare l'output per l'utilizzo futuro.
Scegliere un'area in cui ospitare il gruppo di risorse. Le funzionalità degli esercizi successivi non sono disponibili in tutte le aree. Per questo motivo, è consigliabile selezionare Stati Uniti orientali. Se si sceglie di usare un valore diverso, modificare il valore di
REGION_NAME
.Eseguire i comandi seguenti per registrare le variabili:
REGION_NAME=eastus RESOURCE_GROUP=rg-akscostsaving AKS_CLUSTER_NAME=akscostsaving-$RANDOM
Suggerimento
È possibile usare il pulsante Copia per copiare i comandi negli Appunti. Per incollare, fare clic con il pulsante destro del mouse su una nuova riga nel terminale di Cloud Shell e scegliere Incolla oppure usare i tasti di scelta rapida MAIUSC+INS (⌘+V in macOS).
È possibile controllare ogni valore eseguendo il
echo
comando ,echo $REGION_NAME
ad esempio .Prendere nota del valore di
AKS_CLUSTER_NAME
. In tutti gli esercizi si userà questo valore in un secondo momento per le impostazioni di pulizia e configurazione per il cluster.echo $AKS_CLUSTER_NAME
Creare un nuovo gruppo di risorse denominato rg-akscostsaving. Tutte le risorse create in questi esercizi verranno distribuite in questo gruppo di risorse. Un singolo gruppo di risorse semplifica la pulizia delle risorse al termine del modulo.
az group create \ --name $RESOURCE_GROUP \ --location $REGION_NAME
Creare il cluster del servizio Azure Kubernetes
Dopo aver creato il gruppo di risorse, è possibile creare cluster del servizio Azure Kubernetes all'interno del gruppo. Il primo passaggio consiste nel ottenere la versione di Kubernetes nell'area selezionata. Questa versione è impostata per configurare il cluster.
Per ottenere la versione di Kubernetes, eseguire il comando
az aks get-versions
. La query seguente restituisce una versione kubernetes non di anteprima. Archiviare il valore in una variabile Bash denominataVERSION
. Per recuperare e archiviare il numero di versione, eseguire il comando seguente:VERSION=$(az aks get-versions \ --location $REGION_NAME \ --query "values[?isPreview==null].version | [-1]" \ --output tsv) echo $VERSION
Eseguire il
az aks create
comando per creare il cluster del servizio Azure Kubernetes. Il cluster viene eseguito con due nodi nel pool di nodi di sistema. Il completamento di questo comando può richiedere alcuni minuti.az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --location $REGION_NAME \ --kubernetes-version $VERSION \ --node-count 2 \ --load-balancer-sku standard \ --vm-set-type VirtualMachineScaleSets \ --generate-ssh-keys
Il comando
az aks create
dispone di diversi parametri che consentono una configurazione precisa del cluster Kubernetes. Esistono due parametri importanti per la configurazione del supporto corretto nel cluster per il ridimensionamento e la presenza di più pool di nodi:Parametro e valore Descrizione --load-balancer-sku standard
Il supporto del servizio di bilanciamento del carico predefinito nel servizio Azure Kubernetes è basic
. Il servizio di bilanciamento del caricobasic
non è supportato quando si usano più pool di nodi. Impostare il valore sustandard
.--vm-set-type VirtualMachineScaleSets
Per usare le funzionalità di ridimensionamento nel servizio Azure Kubernetes, sono necessari i set di scalabilità di macchine virtuali. Questo parametro abilita il supporto per i set di scalabilità. Si noti che vengono configurati due nodi nel pool di nodi predefinito usando il parametro
--node-count 2
. Si ricordi da una descrizione precedente che i servizi di sistema essenziali vengono eseguiti in questo pool di nodi di sistema. È importante che i cluster di produzione usino almeno--node-count 3
per garantire l'affidabilità operativa del cluster. In questo esercizio vengono usati solo due nodi per considerazioni sui costi.Eseguire il comando
az aks nodepool list
per elencare i pool di nodi nel nuovo cluster:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Ecco un esempio dell'output del comando :
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Si noti che il pool di
mode
nodi è impostato suSystem
e che l'oggettoname
viene assegnato automaticamente.
Aggiungere un pool di nodi
Il cluster ha un singolo pool di nodi. Aggiungere un secondo pool di nodi eseguendo il comando
az aks nodepool add
. Eseguire il comando in questo passaggio per creare un pool di nodi utente con tre nodi denominatobatchprocpl
. Tenere presente che i nomi dei pool di nodi devono iniziare con una lettera minuscola e contenere solo caratteri alfanumerici. I nomi dei pool di nodi possono essere costituiti da un massimo di 12 caratteri per i pool di nodi Linux e di sei caratteri per i pool di nodi Windows.Esegui questo comando:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl \ --node-count 2
Eseguire il comando
az aks nodepool list
per elencare il nuovo pool di nodi nel nuovo cluster:az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
Ecco un esempio dell'output del comando :
[ { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl", "mode": "User", "name": "batchprocpl", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }, { "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 2, "enableAutoScaling": null, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1", "mode": "System", "name": "nodepool1", ... "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": null, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null } ]
Si noti che l'elemento
mode
del nuovo pool di nodi è impostato suUser
e che ilname
èbatchprocpl
.
Ridimensionare il numero di nodi del pool a zero
Eseguire il az aks nodepool scale
comando per ridimensionare manualmente i nodi in un pool di nodi.
Eseguire il comando az aks nodepool scale
e usare il parametro --node-count
per impostare il valore del numero di nodi su 0.
Di seguito è riportato un esempio del comando:
az aks nodepool scale \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name batchprocpl \
--node-count 0
Ecco un esempio dell'output del comando :
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 0,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "User",
"name": "batchprocpl",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
"nodeLabels": null,
"nodeTaints": null,
"orchestratorVersion": "1.17.9",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "rg-akscostsaving",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Si noti che il valore del parametro count
del pool di nodi è impostato su 0 e che il valore enableAutoScaling
è impostato su null
. Per pianificare i carichi di lavoro, è necessario aumentare manualmente il numero di nodi per questo pool, perché la creazione dei nodi non verrà eseguita automaticamente.
Configurare il contesto di Kubernetes
Nell'output del comando precedente il numero di pool di nodi è impostato su 0. È possibile verificare i nodi disponibili nel cluster eseguendo il comando kubectl get nodes
.
Eseguire
kubectl
per interagire con il server API del cluster. È necessario configurare un contesto del cluster Kubernetes per consentire la connessione dikubectl
. Il contesto contiene l'indirizzo del cluster, un utente e uno spazio dei nomi. Eseguire il comandoaz aks get-credentials
per configurare il contesto Kubernetes in Cloud Shell.Recuperare le credenziali del cluster eseguendo questo comando:
az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME
Di seguito è riportato un esempio di output del comando.
Merged "akscostsaving-17835" as current context in /home/user/.kube/config
Elencare i nodi nei pool di nodi.
kubectl get nodes
Di seguito è riportato un esempio di output del comando:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37990379-vmss000000 Ready agent 32m v1.17.9 aks-nodepool1-37990379-vmss000001 Ready agent 32m v1.17.9
Si noti che anche se il comando
az aks nodepool list
elenca due pool di nodi, sono disponibili solo due nodi nel cluster ed entrambi derivano danodepool1
.
Per ottimizzare i costi sul servizio Azure Kubernetes quando si gestiscono direttamente le richieste di carico di lavoro, una strategia efficace consiste nel:
- Ridimensionare manualmente il numero di nodi nei pool di nodi.
- Ridimensionare a zero i pool di nodi utente costosi basati su NV.
Si esaminerà ora una strategia in cui è necessario ridimensionare i nodi, ma non si controlla direttamente la richiesta.