Gestire i pool di nodi di sistema nel servizio Azure Kubernetes
Nel servizio Azure Kubernetes (AKS), i nodi della stessa configurazione vengono raggruppati in pool di nodi. Questi pool di nodi contengono le macchine virtuali sottostanti che eseguono le applicazioni. I pool di nodi di sistema e i pool di nodi utente sono due diverse modalità di pool di nodi per i cluster del servizio Azure Kubernetes. I pool di nodi di sistema vengono usati principalmente per l'hosting di pod di sistema critici, tra cui CoreDNS
e metrics-server
. I pool di nodi utente hanno lo scopo principale di ospitare i pod dell'applicazione. Tuttavia, i pod dell'applicazione possono essere pianificati nei pool di nodi di sistema se si vuole avere un solo pool nel cluster del servizio Azure Kubernetes. Ogni cluster del servizio Azure Kubernetes deve contenere almeno un pool di nodi di sistema con almeno due nodi.
Importante
Se si esegue un singolo pool di nodi di sistema per il cluster del servizio Azure Kubernetes in un ambiente di produzione, è consigliabile usare almeno tre nodi per il pool di nodi.
Questo articolo spiega come gestire i pool di nodi di sistema nel servizio Azure Kubernetes. Per informazioni su come usare più pool di nodi, vedere usare più pool di nodi.
Operazioni preliminari
È necessario che sia installata e configurata l'interfaccia della riga di comando di Azure 2.3.1 o versione successiva. 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.
Limiti
Quando si creano e si gestiscono cluster del servizio Azure Kubernetes che supportano pool di nodi multipli, si applicano le limitazioni seguenti:
- Vedere Quote, restrizioni relative alle dimensioni delle macchine virtuali e disponibilità delle regioni nel servizio Azure Kubernetes.
- Per impostare una modalità pool di nodi, è necessario usare una versione API 2020-03-01 o successiva. I cluster creati nelle versioni API precedenti alla versione 2020-03-01 contengono solo pool di nodi utente, ma possono essere migrati per contenere pool di nodi di sistema seguendo i passaggi della modalità aggiornare i pool.
- Il nome di un pool di nodi può contenere solo caratteri alfanumerici minuscoli e deve iniziare con una lettera minuscola. Per i pool di nodi Linux, la lunghezza deve essere compresa tra 1 e 12 caratteri. Per i pool di nodi Windows, la lunghezza deve essere compresa tra uno e sei caratteri.
- La modalità di un pool di nodi è una proprietà obbligatoria e deve essere impostata in modo esplicito quando si usano modelli di Resource Manager o chiamate API dirette.
Pool di nodi utente e di sistema
Per un pool di nodi di sistema, il servizio Azure Kubernetes assegna automaticamente l'etichetta kubernetes.azure.com/mode: sistema ai relativi nodi. In questo modo, il servizio Azure Kubernetes preferisce pianificare i pod di sistema nei pool di nodi che contengono questa etichetta. Questa etichetta non impedisce di pianificare i pod dell'applicazione nei pool di nodi di sistema. È tuttavia consigliabile isolare i pod di sistema critici dai pod dell'applicazione per evitare che i pod dell'applicazione non configurati correttamente o non autorizzati eliminino accidentalmente i pod di sistema.
È possibile applicare questo comportamento creando un pool di nodi di sistema dedicato. Usare il CriticalAddonsOnly=true:NoSchedule
taint per impedire che i pod dell'applicazione vengano pianificati nei pool di nodi di sistema.
I pool di nodi di sistema hanno le restrizioni seguenti:
- I pool di nodi di sistema devono supportare almeno 30 pod come descritto dalla formula di valore minimo e massimo per i pod.
- I pool di sistema osType devono essere Linux.
- I pool di nodi utente osType possono essere Linux o Windows.
- I pool di sistema devono contenere almeno due nodi e i pool di nodi utente possono contenere zero o più nodi.
- I pool di nodi di sistema richiedono uno SKU di macchina virtuale di almeno 4 vCPU e 4 GB di memoria.
- Le macchine virtuali serie B non sono supportate per i pool di nodi di sistema.
- È consigliabile prevedere almeno tre nodi di 8 vCPU o due nodi di almeno 16 vCPU (ad esempio, Standard_DS4_v2), soprattutto per cluster di grandi dimensioni (repliche multiple del pod coreDNS, componenti aggiuntivi 3-4+ e così via).
- I pool di nodi spot richiedono pool di nodi utente.
- L'aggiunta di un altro pool di nodi di sistema o cambiare quale pool di nodi è un pool di nodi di sistema non sposta automaticamente i pod di sistema. I pod di sistema possono continuare a essere eseguiti nello stesso pool di nodi, anche se lo si modifica in un pool di nodi utente. Se si elimina o si ridimensiona un pool di nodi che esegue pod di sistema che in precedenza erano un pool di nodi di sistema, questi pod di sistema vengono distribuiti nuovamente con una pianificazione preferenziale nel nuovo pool di nodi di sistema.
È possibile eseguire le operazioni seguenti con i pool di nodi:
- Creare un pool di nodi di sistema dedicato (preferire la pianificazione dei pod di sistema ai pool di nodi di
mode:system
) - Modificare un pool di nodi di sistema in modo che sia un pool di nodi utente, purché vi sia un altro pool di nodi di sistema che possa sostituirlo nel cluster del servizio Azure Kubernetes.
- Modificare un pool di nodi utente in modo che sia un pool di nodi di sistema.
- Eliminare i pool di nodi utente.
- È possibile eliminare i pool di nodi di sistema, purché nel cluster del servizio Azure Kubernetes sia presente un altro pool di nodi di sistema.
- Un cluster del servizio Azure Kubernetes può avere più pool di nodi di sistema e richiede almeno un pool di nodi di sistema.
- Se si desidera modificare varie impostazioni non modificabili nei pool di nodi esistenti, è possibile creare nuovi pool di nodi per sostituirli. Un esempio consiste nell'aggiungere un nuovo pool di nodi con una nuova impostazione maxPods ed eliminare il pool di nodi precedente.
- Usare l'affinità dei nodi per richiedere o stabilire quali nodi pianificare in base alle etichette dei nodi. È possibile impostare da
key
akubernetes.azure.com
, daoperator
aIn
evalues
diuser
osystem
su YAML, applicando questa definizione usandokubectl apply -f yourYAML.yaml
.
Creare un nuovo cluster del servizio Azure Kubernetes con un pool di nodi di sistema
Quando si crea un nuovo cluster del servizio Azure Kubernetes, per impostazione predefinita il pool di nodi iniziale viene impostato su una modalità di tipo system
. Quando si creano nuovi pool di nodi con az aks nodepool add
, tali pool di nodi sono pool di nodi utente, a meno che non si specifichi esplicitamente il parametro modalità.
L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nell'area eastus.
az group create --name myResourceGroup --location eastus
Usare il comando az aks create per creare un cluster del servizio Azure Kubernetes. L'esempio seguente crea un cluster denominato myAKSCluster con un pool di sistema dedicato contenente due nodi. Per i carichi di lavoro di produzione, assicurarsi di usare pool di nodi di sistema con almeno tre nodi. Il completamento dell'operazione può richiedere alcuni minuti.
# Create a new AKS cluster with a single system pool
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys
Aggiungere un pool di nodi di sistema dedicato a un cluster del servizio Azure Kubernetes esistente
È possibile aggiungere uno o più pool di nodi di sistema ai cluster del servizio Azure Kubernetes esistenti. È consigliabile pianificare i pod dell'applicazione nei pool di nodi utente e dedicare i pool di nodi di sistema solo ai pod di sistema critici. Ciò impedisce ai pod dell'applicazione non autorizzati di eliminare accidentalmente i pod di sistema. Applicare questo comportamento con il CriticalAddonsOnly=true:NoSchedule
taint per i pool di nodi di sistema.
Il comando seguente aggiunge un sistema di tipi di nodi dedicato con un numero predefinito di tre nodi.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name systempool \
--node-count 3 \
--node-taints CriticalAddonsOnly=true:NoSchedule \
--mode System
Visualizzare i dettagli per il pool di nodi
È possibile controllare i dettagli del pool di nodi con il comando seguente.
az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name systempool
Viene definita una modalità di tipo Sistema per i pool di nodi di sistema e una modalità di tipo Utente per i pool di nodi utente. Per un pool di sistema, verificare che il taint sia impostato su CriticalAddonsOnly=true:NoSchedule
, che impedirà ai pod dell'applicazione di essere pianificati in questo pool di nodi.
{
"agentPoolType": "VirtualMachineScaleSets",
"availabilityZones": null,
"count": 3,
"enableAutoScaling": null,
"enableNodePublicIp": false,
"id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
"maxCount": null,
"maxPods": 110,
"minCount": null,
"mode": "System",
"name": "systempool",
"nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
"nodeLabels": {},
"nodeTaints": [
"CriticalAddonsOnly=true:NoSchedule"
],
"orchestratorVersion": "1.16.10",
"osDiskSizeGb": 128,
"osType": "Linux",
"provisioningState": "Succeeded",
"proximityPlacementGroupId": null,
"resourceGroup": "myResourceGroup",
"scaleSetEvictionPolicy": null,
"scaleSetPriority": null,
"spotMaxPrice": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"upgradeSettings": {
"maxSurge": null
},
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null
}
Aggiornare il sistema del cluster esistente e i pool di nodi utente
Nota
Per impostare una modalità pool di nodi di sistema, è necessario usare una versione API 2020-03-01 o successiva. Pertanto, i cluster creati nelle versioni API precedenti al 2020-03-01 contengono solo pool di nodi utente. Per ricevere funzionalità e vantaggi del pool di nodi di sistema nei cluster meno recenti, aggiornare la modalità dei pool di nodi esistenti con i comandi seguenti nella versione più recente dell'interfaccia della riga di comando di Azure.
È possibile modificare le modalità sia per i pool di nodi di sistema che per i pool di nodi utente. È possibile modificare un pool di nodi di sistema in un pool di utenti solo se nel cluster del servizio Azure Kubernetes esiste già un altro pool di nodi di sistema.
Questo comando modifica un pool di nodi di sistema in un pool di nodi utente.
az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode user
Questo comando modifica un pool di nodi utente in un pool di nodi di sistema.
az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode system
Eliminare un pool di nodi di sistema
Nota
Per usare i pool di nodi di sistema nei cluster del servizio Azure Kubernetes prima della versione API 2020-03-02, aggiungere un nuovo pool di nodi di sistema, quindi eliminare il pool di nodi predefinito originale.
È necessario disporre di almeno due pool di nodi di sistema nel cluster del servizio Azure Kubernetes prima di poterli eliminare.
az aks nodepool delete --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool
Pulire le risorse
Per eliminare il cluster, usare il comando eliminare az group per eliminare il gruppo di risorse servizio Azure Kubernetes:
az group delete --name myResourceGroup --yes --no-wait
Passaggi successivi
In questo articolo si è appreso come creare e gestire pool di nodi di sistema in un cluster del servizio Azure Kubernetes. Per informazioni su come avviare e arrestare i pool di nodi del servizio Azure Kubernetes, vedere Avviare e arrestare i pool di nodi del servizio Azure Kubernetes.
Azure Kubernetes Service