Gestire i pool di nodi di sistema in Servizio Azure Kubernetes (AKS)

In Servizio Azure Kubernetes (AKS) i nodi della stessa configurazione vengono raggruppati in pool node. 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. Questo articolo spiega come gestire i pool di nodi di sistema in AKS. Per informazioni su come usare più pool di nodi, vedere Creare pool di nodi.

  • Pool di nodi di sistema: lo scopo principale è ospitare pod di sistema critici come CoreDNS e metrics-server. I pool di nodi di sistema non devono essere usati per eseguire l'applicazione. I pool di nodi di sistema usano Ubuntu Linux o Azure Linux.
  • Pool di nodi utente: lo scopo principale è ospitare i pod dell'applicazione e isolare le applicazioni dal pool di nodi di sistema. Questo isolamento impedisce a un'applicazione di causare instabilità con il pool di nodi di sistema del cluster. I pool di nodi utente possono usare Ubuntu Linux, Azure Linux o Windows.

Un cluster di produzione AKS con un singolo pool di nodi di sistema deve contenere almeno due nodi. La raccomandazione per un cluster del servizio Azure Kubernetes di produzione con un singolo pool di nodi di sistema prevede almeno tre nodi per migliorare la tolleranza di errore e le zone di disponibilità. Ad esempio, il numero di nodi predefinito del comando az aks create è tre e crea un nuovo cluster con un singolo pool di nodi di sistema Linux e tre nodi Linux.

È possibile, ma non consigliabile, pianificare i pod dell'applicazione in un pool di nodi di sistema se nel tuo cluster AKS è presente un solo pool di nodi. Una soluzione migliore consiste nel creare un pool di nodi utente per l'applicazione.

Operazioni preliminari

È necessaria la interfaccia della riga di comando di Azure versione 2.3.1 o successiva installata e configurata. Per trovare la versione, eseguire il comando az --version. Se è necessario installare o aggiornare, vedere Installare interfaccia della riga di comando di Azure.

Limiti

Quando si creano e si gestiscono cluster AKS che supportano pool di nodi di sistema, si applicano le limitazioni seguenti:

  • Consulta Quote, restrizioni relative alle dimensioni delle macchine virtuali e disponibilità delle regioni in AKS.
  • Per impostare una modalità pool di nodi, è necessario usare una versione API di 2020-03-01 o versione successiva. I cluster creati nelle versioni dell'API precedenti a 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à di aggiornamento del 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 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 Azure Resource Manager o chiamate API dirette.

Pool di nodi utente e di sistema

Per un pool di nodi di sistema, AKS assegna automaticamente l'etichetta kubernetes.azure.com/mode: system ai relativi nodi. In questo modo, AKS preferisce allocare 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 taint CriticalAddonsOnly=true:NoSchedule per impedire che i pod dell'applicazione vengano schedulati 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 osType di sistema devono essere Linux.
  • I pool di nodi utente osType possono essere Linux o Windows.
  • I pool di sistema devono contenere almeno due nodi, ma la raccomandazione è di tre nodi. 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 i pool di nodi degli utenti.
  • 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 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 (è preferibile pianificare i pod di sistema nei 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 AKS sia presente un altro pool di nodi di sistema.
  • Un cluster AKS può contenere 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 maxPods impostazione 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, da operator a Ine values di user o system su YAML, applicando questa definizione usando kubectl apply -f yourYAML.yaml.

Creare un nuovo cluster AKS 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à.

Creare variabili per il gruppo di risorse, il nome del cluster e la posizione per i comandi usati in questo articolo. Questo articolo specifica i valori oppure è possibile usare valori personalizzati.

export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"

L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nell'area eastus.

az group create --name $RESOURCE_GROUP --location $LOCATION

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 di questa operazione richiede alcuni minuti.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 2 --generate-ssh-keys

Aggiungere un pool di nodi di sistema dedicato a un cluster AKS esistente

È possibile aggiungere uno o più pool di nodi di sistema ai cluster AKS 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. Questa separazione impedisce ai pod dell'applicazione non autorizzati di eliminare per errore i pod del sistema. Applicare questo comportamento con il CriticalAddonsOnly=true:NoScheduletaint per i pool di nodi di sistema.

Il comando seguente aggiunge un pool di nodi dedicato del tipo modalità System con tre nodi. Il az aks nodepool add comando aggiunge tre nodi per impostazione predefinita, ma si usa il --node-count parametro per specificare il numero di nodi desiderati.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --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 $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"

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 il pool di sistema, verificare che la proprietà nodeTaints sia impostata su CriticalAddonsOnly=true:NoSchedule, così da impedire ai pod dell'applicazione di essere assegnati a questo pool di nodi.

{
  "Count": 3,
  "Mode": "System",
  "NodePool": "systempool",
  "NodeTaint": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "ResourceGroup": "myResourceGroup"
}

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 di 2020-03-01 o versione successiva. Di conseguenza, i cluster creati nelle versioni dell'API precedenti a 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 interfaccia della riga di comando di Azure più recente.

È 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 nodi utente solo se esiste già un altro pool di nodi di sistema nel cluster del servizio Azure Kubernetes.

Eseguire questo comando per creare un nuovo pool di nodi in modalità di sistema.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --node-count 3 \
  --mode System

È possibile verificare la modalità con il comando seguente.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
System

Eseguire questo comando per modificare un pool di nodi di sistema in un pool di nodi utente.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode User

È possibile verificare la modalità modificata con il comando seguente.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
User

Eseguire questo comando per modificare un pool di nodi utente in un pool di nodi di sistema.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode System

Eseguire il comando precedente per verificare che la modalità sia cambiata.

Eliminare un pool di nodi di sistema

Nota

Per usare i pool di nodi di sistema nei cluster di Azure Kubernetes Service (AKS) prima della versione 2020-03-01 dell'API, 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 $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL

Dopo aver eliminato il pool di nodi di sistema, è necessario avere il pool di nodi di sistema originale creato con il cluster e il pool di nodi di sistema creato nella sezione aggiungere un pool di nodi di sistema dedicato a un cluster del servizio Azure Kubernetes esistente.

az aks nodepool list \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --query "[].{Name:name, Mode:mode}" --output table

Pulire le risorse

Quando si elimina il gruppo di risorse del cluster AKS, tutte le risorse del cluster e il relativo gruppo di risorse nodo (MC_) vengono eliminate.

Per eliminare il cluster, usare il comando az group delete per eliminare il gruppo di risorse AKS.

az group delete --name $RESOURCE_GROUP --yes --no-wait

Passaggi successivi

In questo articolo hai imparato come creare e gestire pool di nodi di sistema in un cluster AKS. 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.