Gestire i pool di nodi per un cluster (servizio Azure Kubernetes in Azure Stack HCI 23H2)

Si applica a: Azure Stack HCI, versione 23H2

Nota

Per informazioni sulla gestione dei pool di nodi nel servizio Azure Kubernetes in Azure Stack HCI 22H2, vedere Gestire i pool di nodi.

Nel servizio Azure Kubernetes abilitato da Azure Arc, i nodi della stessa configurazione vengono raggruppati in pool di nodi. Questi pool di nodi contengono le macchine virtuali sottostanti che eseguono le applicazioni. Questo articolo illustra come creare e gestire i pool di nodi per un cluster in AKS Arc.

Creare un cluster Kubernetes

Per iniziare, creare un cluster Kubernetes con un singolo pool di nodi:

az aksarc create -n <cluster name> -g <resource group> --custom-location <custom location Id> --vnet-ids <vnet id> --generate-ssh-keys --load-balancer-count <load balancer count>

Aggiungere un pool di nodi

È possibile aggiungere un pool di nodi a un cluster esistente usando il az aksarc nodepool add comando . Assicurarsi che il nome del pool di nodi non sia lo stesso nome di un pool di nodi esistente:

az aksarc nodepool add --name <node pool name> -g <resource group> --cluster-name <cluster name> --os-sku <Linux or Windows> --node-count <count> --node-vm-size <vm size>

Ottenere informazioni di configurazione per un pool di nodi

Per visualizzare la configurazione dei pool di nodi, usare il az aksarc nodepool show comando:

az aksarc nodepool show --cluster-name <cluster name> -n <node pool name> -g <resource group>

Output di esempio:

{
"availabilityZones": null,
"count": 1,
"extendedLocation": null,
"id":
"/subscriptions/&lt;subscription&gt;/resourceGroups/edgeci-registration-rr1s46r1710&lt;resource
group&gt;/providers/Microsoft.Kubernetes/connectedClusters/&lt;cluster
name&gt;/providers/Microsoft.HybridContainerService/provisionedClusterInstances/default/agentPools/&lt;nodepoolname&gt;",
"location": "westeurope",
"name": "nodepoolname",
"nodeImageVersion": null,
"osSku": "CBLMariner",
"osType": "Linux",
"provisioningState": "Succeeded",
"resourceGroup": "resourcegroup",
"status": {
  "errorMessage": null,
  "operationStatus": null,
  "readyReplicas": [
   {
    "count": 1,
    "vmSize": "Standard\_A4\_v2"
   }
  ]
},
"systemData": {
…
},
"tags": null,
"type":
"microsoft.hybridcontainerservice/provisionedclusterinstances/agentpools",
"vmSize": "Standard\_A4\_v2"
}

Specificare i pod massimi distribuiti in un pool di nodi

È possibile configurare i pod massimi distribuiti in un nodo in fase di creazione del cluster o quando si creano nuovi pool di nodi. Se non si specifica maxPods quando si creano pool di nodi, il pool di nodi viene distribuito con un valore predefinito di un massimo di 110 pod:

az aksarc nodepool add --cluster-name <cluster name> -n <node pool name> -g <resource group> --max-pods 50 --yes

Ridimensionare un pool di nodi

È possibile ridimensionare il numero di nodi verso l'alto o verso il basso in un pool di nodi.

Per ridimensionare il numero di nodi in un pool di nodi, usare il az aksarc nodepool scale comando . Nell'esempio seguente viene ridimensionato il numero di nodi a 2 in un pool di nodi denominato nodepool1:

az aksarc nodepool scale --cluster-name <cluster name> -n nodepool1 -g <resource group> --node-count 2 --yes

Eliminare un pool di nodi

Se è necessario eliminare un pool di nodi, usare il az aksarc nodepool delete comando:

az aksarc nodepool delete --cluster-name <cluster name> -n <node pool name> -g <resource group> --yes

Specificare un taint o un'etichetta per un pool di nodi

Quando si crea un pool di nodi, è possibile aggiungere taints o etichette a tale pool. Quando si aggiunge un taint o un'etichetta, tutti i nodi all'interno del pool di nodi ottengono anche tale taint o etichetta.

Importante

È necessario aggiungere taints o etichette ai nodi per l'intero pool di nodi usando az aksarc nodepool. Non è consigliabile usare kubectl per applicare taints o etichette ai singoli nodi in un pool di nodi.

Impostare le taints del pool di nodi

  1. Creare un pool di nodi con un taint usando il az aksarc nodepool add comando . Specificare il nome taintnp e usare il --node-taints parametro per specificare sku=gpu:NoSchedule per il taint:

    az aksarc nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name taintnp \
        --node-count 1 \
        --node-taints sku=gpu:NoSchedule \
        --no-wait
    
  2. Controllare lo stato del pool di nodi usando il az aksarc nodepool list comando:

    az aksarc nodepool list -g myResourceGroup --cluster-name myAKSCluster
    

    L'output di esempio seguente mostra che il taintnp pool di nodi crea nodi con l'oggetto specificato nodeTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "taintnp",
        ...
        "provisioningState": "Succeeded",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

Le informazioni di taint sono visibili in Kubernetes per gestire le regole di pianificazione per i nodi. L'utilità di pianificazione Kubernetes può usare taints e tolerations per limitare i carichi di lavoro che possono essere eseguiti nei nodi.

  • Un taint viene applicato a un nodo per indicare che possono essere pianificati solo pod specifici.
  • Una tolerazione viene quindi applicata a un pod che consente loro di "tollerare" il taint di un nodo.

Impostare le tolerazioni del pool di nodi

Nel passaggio precedente è stato applicato il sku=gpu:NoSchedule taint quando è stato creato il pool di nodi. Nell'esempio seguente il manifesto YAML usa una tolerazione per consentire all'utilità di pianificazione Kubernetes di eseguire un pod NGINX in un nodo nel pool di nodi:

  1. Creare un file denominato nginx-toleration.yaml e copiare/incollare l'esempio YAML seguente:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 1
            memory: 2G
      tolerations:
      - key: "sku"
        operator: "Equal"
        value: "gpu"
        effect: "NoSchedule"
    
  2. Pianificare il pod usando il kubectl apply comando:

    kubectl apply -f nginx-toleration.yaml
    

    Richiede alcuni secondi per pianificare il pod e eseguire il pull dell'immagine NGINX.

  3. Controllare lo stato usando il kubectl describe pod comando:

    kubectl describe pod mypod
    

    L'output dell'esempio condensato seguente mostra che viene applicata la sku=gpu:NoSchedule tolerazione. Nella sezione Eventi , l'utilità di pianificazione ha assegnato il pod al moc-lbeof1gn6x3 nodo:

    [...]
    Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                     node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
                     sku=gpu:NoSchedule
    Events:
      Type    Reason     Age    From                Message
      ----    ------     ----   ----                -------
      Normal  Scheduled  54s  default-scheduler   Successfully assigned default/mypod to moc-lbeof1gn6x3
      Normal  Pulling    53s  kubelet             Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
      Normal  Pulled     48s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 3.025148695s (3.025157609s including waiting)
      Normal  Created    48s  kubelet             Created container
      Normal  Started    48s  kubelet             Started container
    

    Solo i pod con questa tolerazione applicata possono essere pianificati nei nodi in taintnp. Tutti gli altri pod vengono pianificati nel pool di nodi nodepool1 . Se si creano più pool di nodi, è possibile usare taints e tolerations per limitare le pianificazioni dei pod in tali risorse del nodo.

Impostazione delle etichette del pool di nodi

Per altre informazioni, vedere Usare le etichette in un cluster del servizio Azure Arc abilitato per il servizio Azure Kubernetes. ::: zone-end

Passaggi successivi