Gestire i pool di nodi di sistema nel servizio Azure Kubernetes

In servizio Azure Kubernetes (servizio Azure Kubernetes) i nodi della stessa configurazione vengono raggruppati in pool di nodi. I 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 servono allo scopo principale di ospitare pod di sistema critici, CoreDNS ad esempio e metrics-server. I pool di nodi utente servono allo 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 illustra 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

È necessaria l'interfaccia della riga di comando di Azure versione 2.3.1 o successiva installata e configurata. 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

Le limitazioni seguenti si applicano quando si creano e gestiscono cluster del servizio Azure Kubernetes che supportano i pool di nodi di sistema.

  • Vedere Quote, restrizioni relative alle dimensioni delle macchine virtuali e disponibilità dell'area 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à pool di aggiornamento.
  • 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 arm o chiamate API dirette.

Pool di nodi di sistema e utente

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 vm 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 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 coreDNS pod, componenti aggiuntivi da 3 a 4 e versioni successive e così via).
  • I pool di nodi spot richiedono pool di nodi utente.
  • L'aggiunta di un altro pool di nodi di sistema o la modifica di 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 riduce un pool di nodi che esegue pod di sistema che in precedenza erano un pool di nodi di sistema, tali pod di sistema vengono ridistribuiti con la pianificazione preferita al 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é nel cluster del servizio Azure Kubernetes sia presente un altro pool di nodi di sistema.
  • 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 preferire i nodi pianificati in base alle etichette dei nodi. È possibile impostare su keykubernetes.azure.com, operator su Ine values di user o system su YAML, applicando questa definizione usando kubectl 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 in modo esplicito il parametro mode.

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 -g 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 taint per i CriticalAddonsOnly=true:NoSchedulepool di nodi di sistema.

Il comando seguente aggiunge un sistema di tipi di nodi dedicato con un conteggio 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 -g myResourceGroup --cluster-name myAKSCluster -n systempool

Viene definita una modalità di tipo System per i pool di nodi di sistema e viene definita una modalità di tipo User 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. 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 -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode user

Questo comando modifica un pool di nodi utente in un pool di nodi di sistema.

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n 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 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 -g myResourceGroup --cluster-name myAKSCluster -n mynodepool

Pulire le risorse

Per eliminare il cluster, usare il comando az group delete per eliminare il gruppo di risorse del 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.