Creare pool di nodi per un cluster nel servizio Azure Kubernetes

Nel servizio Azure Kubernetes i nodi della stessa configurazione vengono raggruppati in pool di nodi. Questi pool di nodi contengono le macchine virtuali sottostanti che eseguono le applicazioni. Quando si crea un cluster del servizio Azure Kubernetes, si definisce il numero iniziale di nodi e le relative dimensioni (SKU), che crea un pool di nodi di sistema.

Per supportare applicazioni con esigenze di calcolo o archiviazione diverse, è possibile creare pool di nodi utente. I pool di nodi di sistema vengono usati principalmente per l'hosting di pod di sistema critici, tra cui CoreDNS e konnectivity. I pool di nodi utente servono allo scopo principale di ospitare i pod dell'applicazione. Ad esempio, usare più pool di nodi utente per fornire GPU per applicazioni a elevato utilizzo di calcolo o per l'accesso a risorse di archiviazione SSD ad alte prestazioni. Tuttavia, se si vuole avere un solo pool nel cluster del servizio Azure Kubernetes, è possibile pianificare i pod dell'applicazione nei pool di nodi di sistema.

Nota

Questa funzionalità consente un maggiore controllo sulla creazione e la gestione di più pool di nodi e richiede comandi separati per operazioni CRUD (create/update/delete). In precedenza, le operazioni del cluster tramite az aks create o az aks update usavano l'API managedCluster ed erano le uniche opzioni per modificare il piano di controllo e un singolo pool di nodi. Questa funzionalità espone un set di operazioni separato per i pool di agenti tramite l'API agentPool e richiede l'uso az aks nodepool del set di comandi per eseguire operazioni in un singolo pool di nodi.

Questo articolo illustra come creare uno o più pool di nodi in un cluster del servizio Azure Kubernetes.

Operazioni preliminari

Limiti

Quando si creano cluster del servizio Azure Kubernetes che supportano pool di nodi multipli, si applicano le limitazioni seguenti:

  • Vedere Quote, limitazioni delle dimensioni delle macchine virtuali e disponibilità delle aree nel servizio Azure Kubernetes (AKS).
  • È possibile eliminare i pool di nodi di sistema se si dispone di un altro pool di nodi di sistema per occuparne la posizione nel cluster del servizio Azure Kubernetes. In caso contrario, non è possibile eliminare il pool di nodi di sistema.
  • I pool di sistema devono contenere almeno un nodo e i pool di nodi utente possono contenere zero o più nodi.
  • Il cluster del servizio Azure Kubernetes deve usare il servizio di bilanciamento del carico dello SKU Standard per usare più pool di nodi. Questa funzionalità non è supportata con i servizi di bilanciamento del carico dello SKU Basic.
  • Il cluster del servizio Azure Kubernetes deve usare i set di scalabilità di macchine virtuali per i nodi.
  • 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 1 e 6 caratteri.
  • Tutti i pool di nodi devono trovarsi nella stessa rete virtuale.
  • Quando si creano più pool di nodi in fase di creazione del cluster, le versioni di Kubernetes per i pool di nodi devono corrispondere al set di versione per il piano di controllo.

Creare un cluster del servizio Azure Kubernetes

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. Se un nodo si arresta, si perdono le risorse del piano di controllo e la ridondanza viene compromessa. È possibile ridurre questo rischio avendo più nodi del piano di controllo.

  1. Creare un gruppo di risorse di Azure usando il comando az group create.

    az group create --name myResourceGroup --location eastus
    
  2. Creare un cluster del servizio Azure Kubernetes con un pool a nodo singolo usando il comando az aks create.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --generate-ssh-keys \
        --load-balancer-sku standard
    

    La creazione del cluster richiede alcuni minuti.

  3. Quando il cluster è pronto, ottenere le credenziali del cluster usando il comando az aks get-credentials.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Aggiungere un pool di nodi

Il cluster creato nel passaggio precedente ha un singolo pool di nodi. In questa sezione viene aggiunto un secondo pool di nodi al cluster.

  1. Creare un nuovo pool di nodi usando il comando az aks nodepool add. L'esempio seguente crea un pool di nodi denominato mynodepool che esegue tre nodi:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3
    
  2. Controllare lo stato dei pool di nodi usando il comando az aks node pool list e specificare il gruppo di risorse e il nome del cluster.

    az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
    

    L'output di esempio seguente mostra che mynodepool è stato creato correttamente con tre nodi. Quando il cluster del servizio Azure Kubernetes è stato creato nel passaggio precedente, è stato creato un nodepool1 predefinito con un numero di nodi pari a2.

    [
      {
        ...
        "count": 3,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

Pool di nodi ARM64

Il processore ARM64 offre un calcolo a bassa potenza per i carichi di lavoro Kubernetes. Per creare un pool di nodi ARM64, è necessario scegliere una macchina virtuale Dpsv5, Dplsv5 o Epsv5 .

Limiti

  • I pool di nodi ARM64 non sono supportati nei cluster abilitati per Defender.
  • I pool di nodi abilitati per FIPS non sono supportati con GLI SKU ARM64.

Aggiungere un pool di nodi ARM64

  • Aggiungere un pool di nodi ARM64 nel cluster esistente usando az aks nodepool add.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name armpool \
        --node-count 3 \
        --node-vm-size Standard_D2pds_v5
    

Pool di nodi Linux di Azure

L'host contenitore Linux di Azure per il servizio Azure Kubernetes è una distribuzione Linux open source disponibile come host contenitore del servizio Azure Kubernetes. Offre affidabilità, sicurezza e coerenza elevate. Include solo il set minimo di pacchetti necessari per l'esecuzione dei carichi di lavoro dei contenitori, che migliorano i tempi di avvio e le prestazioni complessive.

Aggiungere un pool di nodi Linux di Azure

  • Aggiungere un pool di nodi Linux di Azure nel cluster esistente usando il az aks nodepool add comando e specificare --os-sku AzureLinux.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name azlinuxpool \
        --os-sku AzureLinux
    

Eseguire la migrazione di nodi Ubuntu ai nodi Linux di Azure

È possibile eseguire la migrazione dei nodi Ubuntu esistenti in Linux di Azure usando uno dei metodi seguenti:

Pool di nodi con subnet univoche

Un carico di lavoro può richiedere la suddivisione dei nodi del cluster in pool separati per l'isolamento logico. Le subnet separate dedicate a ogni pool di nodi nel cluster possono supportare questo isolamento, che può soddisfare i requisiti, ad esempio la presenza di spazio di indirizzi di rete virtuale non contiguo da suddividere tra i pool di nodi.

Nota

Assicurarsi di usare la versione 2.35.0 dell'interfaccia della riga di comando di Azure o versioni successive.

Limiti

  • Tutte le subnet assegnate ai pool di nodi devono appartenere alla stessa rete virtuale.
  • I pod di sistema devono avere accesso a tutti i nodi e i pod nel cluster per fornire funzionalità critiche, ad esempio la risoluzione DNS e il tunneling del proxy kubectl logs/exec/port-forward.
  • Se si espande la rete virtuale dopo aver creato il cluster, è necessario aggiornare il cluster prima di aggiungere una subnet all'esterno del blocco CIDR originale. Mentre gli errori del servizio Azure Kubernetes nel pool di agenti aggiungono, l'aks-preview estensione dell'interfaccia della riga di comando di Azure (versione 0.5.66 e successive) supporta ora l'esecuzione az aks update del comando con solo gli argomenti -g <resourceGroup> -n <clusterName>necessari. Questo comando esegue un'operazione di aggiornamento senza apportare modifiche, che possono ripristinare un cluster bloccato in uno stato di errore.
  • Nei cluster con versione kubernetes precedente alla 1.23.3, il traffico SNAT kube-proxy da nuove subnet può causare l'eliminazione dei pacchetti da Criteri di rete di Azure.
  • Il traffico SNAT dei nodi di Windows verso le nuove subnet fino a quando il pool di nodi non viene ricreato l'immagine.
  • Per impostazione predefinita, i servizi di bilanciamento del carico interni sono una delle subnet del pool di nodi.

Aggiungere un pool di nodi con una subnet univoca

  • Aggiungere un pool di nodi con una subnet univoca nel cluster esistente usando il az aks nodepool add comando e specificare --vnet-subnet-id.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>
    

Pool di nodi abilitati per FIPS

Per altre informazioni sull'abilitazione di Federal Information Process Standard (FIPS) per il cluster del servizio Azure Kubernetes, vedere Abilitare FIPS (Federal Information Process Standard) per i pool di nodi del servizio Azure Kubernetes.

Pool di nodi di Windows Server con containerd

A partire da Kubernetes versione 1.20 e successive, è possibile specificare containerd come runtime del contenitore per i pool di nodi di Windows Server 2019. A partire da Kubernetes 1.23, containerd è il runtime del contenitore predefinito e solo per Windows.

Importante

Quando si usa containerd con i pool di nodi di Windows Server 2019:

  • Sia il piano di controllo che i pool di nodi di Windows Server 2019 devono usare Kubernetes versione 1.20 o successiva.
  • Quando si crea o si aggiorna un pool di nodi per eseguire contenitori di Windows Server, il valore predefinito per --node-vm-size è Standard_D2s_v3, ovvero le dimensioni minime consigliate per i pool di nodi di Windows Server 2019 prima di Kubernetes versione 1.20. Le dimensioni minime consigliate per i pool di nodi di Windows Server 2019 che usano containerd sono Standard_D4s_v3. Quando si imposta il parametro --node-vm-size, controllare l'elenco delle dimensioni delle macchine virtuali con restrizioni.
  • È consigliabile usare taints o etichette con i pool di nodi di Windows Server 2019 in esecuzione containerd e tolleranze o selettori di nodi con le distribuzioni per garantire che i carichi di lavoro siano pianificati correttamente.

Aggiungere un pool di nodi di Windows Server con containerd

  • Aggiungere un pool di nodi di Windows Server con containerd nel cluster esistente usando . az aks nodepool add

    Nota

    Se non si specifica l'WindowsContainerRuntime=containerdintestazione personalizzata, il pool di nodi usa containerd comunque come runtime del contenitore per impostazione predefinita.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --os-type Windows \
        --name npwcd \
        --node-vm-size Standard_D4s_v3 \
        --kubernetes-version 1.20.5 \
        --aks-custom-headers WindowsContainerRuntime=containerd \
        --node-count 1
    

Aggiornare un pool di nodi Windows Server specifico a containerd

  • Aggiornare un pool di nodi specifico da Docker a containerd usando il az aks nodepool upgrade comando .

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name npwd \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

Aggiornare tutti i pool di nodi di Windows Server esistenti a containerd

  • Aggiornare tutti i pool di nodi da Docker a containerd usando il az aks nodepool upgrade comando .

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

Eliminare un pool di nodi

Se non è più necessario un pool di nodi, è possibile eliminarlo e rimuovere i nodi della macchina virtuale sottostanti.

Attenzione

Quando si elimina un pool di nodi, il servizio Azure Kubernetes non esegue operazioni di blocco e svuotamento e non sono disponibili opzioni di ripristino per la perdita di dati che possono verificarsi quando si elimina un pool di nodi. Se i pod non possono essere pianificati in altri pool di nodi, tali applicazioni diventano non disponibili. Assicurarsi di non eliminare un pool di nodi quando le applicazioni in uso non hanno backup dei dati o la possibilità di essere eseguiti in altri pool di nodi nel cluster. Per ridurre al minimo l'interruzione dei pod di riprogrammazione attualmente in esecuzione nel pool di nodi da eliminare, eseguire un blocco e svuotare in tutti i nodi del pool di nodi prima di eliminarli.

  • Eliminare un pool di nodi usando il comando az aks nodepool delete e specificare il nome del pool di nodi.

    az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait
    

    L'eliminazione dei nodi e del pool di nodi richiede alcuni minuti.

Passaggi successivi

In questo articolo si è appreso come creare più pool di nodi in un cluster del servizio Azure Kubernetes. Per informazioni su come gestire più pool di nodi, vedere Gestire più pool di nodi per un cluster nel servizio Azure Kubernetes .