Hantera nodpooler för ett kluster (AKS på Azure Stack HCI 23H2)

Gäller för: Azure Stack HCI, version 23H2

Anteckning

Information om hur du hanterar nodpooler i AKS på Azure Stack HCI 22H2 finns i Hantera nodpooler.

I AKS som aktiveras av Azure Arc grupperas noder med samma konfiguration i nodpooler. Dessa nodpooler innehåller de underliggande virtuella datorer som kör dina program. Den här artikeln visar hur du skapar och hanterar nodpooler för ett kluster i AKS Arc.

Skapa ett Kubernetes-kluster

Kom igång genom att skapa ett Kubernetes-kluster med en enda nodpool:

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>

Lägga till en nodpool

Du kan lägga till en nodpool i ett befintligt kluster med kommandot az aksarc nodepool add . Kontrollera att namnet på nodpoolen inte är samma namn som en befintlig nodpool:

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>

Hämta konfigurationsinformation för en nodpool

Om du vill se konfigurationen av dina nodpooler använder du az aksarc nodepool show kommandot:

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

Exempel på utdata:

{
"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"
}

Ange maximalt antal poddar som distribuerats till en nodpool

Du kan konfigurera maximalt antal poddar som kan distribueras till en nod när klustret skapas eller när du skapar nya nodpooler. Om du inte anger maxPods när du skapar nodpooler distribueras nodpoolen med ett standardvärde på högst 110 poddar:

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

Skala en nodpool

Du kan skala upp eller ned antalet noder i en nodpool.

Om du vill skala antalet noder i en nodpool använder du az aksarc nodepool scale kommandot . I följande exempel skalas antalet noder till 2 i en nodpool med namnet nodepool1:

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

Ta bort en nodpool

Om du behöver ta bort en nodpool använder du az aksarc nodepool delete kommandot:

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

Ange en taint eller etikett för en nodpool

När du skapar en nodpool kan du lägga till taints eller etiketter i den. När du lägger till en taint eller etikett får alla noder i nodpoolen också den tainten eller etiketten.

Viktigt

Du bör lägga till taints eller etiketter i noder för hela nodpoolen med hjälp av az aksarc nodepool. Vi rekommenderar inte att du använder kubectl för att tillämpa taints eller etiketter på enskilda noder i en nodpool.

Ange taints för nodpool

  1. Skapa en nodpool med en taint med kommandot az aksarc nodepool add . Ange namnet taintnp och använd parametern --node-taints för att ange sku=gpu:NoSchedule för taint:

    az aksarc nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name taintnp \
        --node-count 1 \
        --node-taints sku=gpu:NoSchedule \
        --no-wait
    
  2. Kontrollera statusen för nodpoolen az aksarc nodepool list med kommandot :

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

    Följande exempelutdata visar att nodpoolen taintnp skapar noder med angivna nodeTaints:

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

Taint-informationen visas i Kubernetes för hantering av schemaläggningsregler för noder. Kubernetes-schemaläggaren kan använda taints och toleranser för att begränsa vilka arbetsbelastningar som kan köras på noder.

  • En taint tillämpas på en nod som anger att endast specifika poddar kan schemaläggas på dem.
  • En tolerans tillämpas sedan på en podd som gör att de kan "tolerera" en nods taint.

Ange tolerationer för nodpooler

I föregående steg tillämpade sku=gpu:NoSchedule du taint när du skapade nodpoolen. I följande yaml-exempelmanifest används en tolerans för att kubernetes-schemaläggaren ska kunna köra en NGINX-podd på en nod i nodpoolen:

  1. Skapa en fil med namnet nginx-toleration.yaml och kopiera/klistra in följande exempel YAML:

    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. Schemalägg podden med kubectl apply kommandot :

    kubectl apply -f nginx-toleration.yaml
    

    Det tar några sekunder att schemalägga podden och hämta NGINX-avbildningen.

  3. Kontrollera statusen kubectl describe pod med kommandot :

    kubectl describe pod mypod
    

    Följande komprimerade exempelutdata visar att toleransen sku=gpu:NoSchedule tillämpas. I avsnittet Händelser tilldelade schemaläggaren podden till moc-lbeof1gn6x3 noden:

    [...]
    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
    

    Endast poddar som har den här toleransen kan schemaläggas på noder i taintnp. Andra poddar schemaläggs i nodepool1-nodpoolen . Om du skapar fler nodpooler kan du använda taints och toleranser för att begränsa vilka poddar som kan schemaläggas för dessa nodresurser.

Ange nodpooletiketter

Mer information finns i Använda etiketter i ett Azure Arc-aktiverat AKS-kluster. ::: zone-end

Nästa steg