Gerir conjuntos de nós para um cluster (AKS no Azure Stack HCI 23H2)

Aplica-se a: Azure Stack HCI, versão 23H2

Nota

Para obter informações sobre a gestão de conjuntos de nós no AKS no Azure Stack HCI 22H2, veja Gerir conjuntos de nós.

No AKS ativado pelo Azure Arc, os nós da mesma configuração são agrupados em conjuntos de nós. Estes conjuntos de nós contêm as VMs subjacentes que executam as suas aplicações. Este artigo mostra-lhe como criar e gerir conjuntos de nós para um cluster no AKS Arc.

Criar um cluster do Kubernetes

Para começar, crie um cluster do Kubernetes com um único conjunto de nós:

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>

Adicionar um conjunto de nós

Pode adicionar um conjunto de nós a um cluster existente com o az aksarc nodepool add comando . Certifique-se de que o nome do conjunto de nós não é o mesmo nome que um conjunto de nós existente:

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>

Obter informações de configuração para um conjunto de nós

Para ver a configuração dos conjuntos de nós, utilize o az aksarc nodepool show comando:

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

Exemplo de saída:

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

Especificar pods máximos implementados num conjunto de nós

Pode configurar os pods máximos implementáveis num nó na hora de criação do cluster ou ao criar novos conjuntos de nós. Se não especificar maxPods quando cria conjuntos de nós, o conjunto de nós é implementado com um valor predefinido de um máximo de 110 pods:

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

Dimensionar um conjunto de nós

Pode aumentar ou reduzir verticalmente o número de nós num conjunto de nós.

Para dimensionar o número de nós num conjunto de nós, utilize o az aksarc nodepool scale comando . O exemplo seguinte dimensiona o número de nós para 2 num conjunto de nós com o nome nodepool1:

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

Eliminar um conjunto de nós

Se precisar de eliminar um conjunto de nós, utilize o az aksarc nodepool delete comando:

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

Especificar um taint ou etiqueta para um conjunto de nós

Quando cria um conjunto de nós, pode adicionar taints ou etiquetas ao mesmo. Quando adiciona um taint ou etiqueta, todos os nós nesse conjunto de nós também obtêm essa taint ou etiqueta.

Importante

Deve adicionar taints ou etiquetas aos nós para todo o conjunto de nós com az aksarc nodepool. Não recomendamos a utilização kubectl para aplicar taints ou etiquetas a nós individuais num conjunto de nós.

Definir taints do conjunto de nós

  1. Crie um conjunto de nós com um taint com o az aksarc nodepool add comando . Especifique o nome taintnp e utilize o --node-taints parâmetro para especificar sku=gpu:NoSchedule para o taint:

    az aksarc nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name taintnp \
        --node-count 1 \
        --node-taints sku=gpu:NoSchedule \
        --no-wait
    
  2. Verifique o estado do conjunto de nós com o az aksarc nodepool list comando:

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

    O resultado de exemplo seguinte mostra que o taintnp conjunto de nós cria nós com o especificado nodeTaints:

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

As informações de taint são visíveis no Kubernetes para processar regras de agendamento para nós. O agendador do Kubernetes pode utilizar taints e tolerâncias para restringir as cargas de trabalho que podem ser executadas em nós.

  • É aplicado um taint a um nó que indica que apenas pods específicos podem ser agendados nos mesmos.
  • Uma tolerância é então aplicada a um pod que lhes permite "tolerar" o taint de um nó.

Definir tolerâncias do conjunto de nós

No passo anterior, aplicou o sku=gpu:NoSchedule taint quando criou o conjunto de nós. O seguinte exemplo de manifesto YAML utiliza uma tolerância para permitir que o agendador do Kubernetes execute um pod NGINX num nó nesse conjunto de nós:

  1. Crie um ficheiro com o nome nginx-toleration.yaml e copie/cole o seguinte exemplo 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. Agende o pod com o kubectl apply comando:

    kubectl apply -f nginx-toleration.yaml
    

    Demora alguns segundos a agendar o pod e a solicitar a imagem NGINX.

  3. Verifique o estado com o kubectl describe pod comando:

    kubectl describe pod mypod
    

    O seguinte resultado de exemplo condensado mostra que a sku=gpu:NoSchedule tolerância é aplicada. Na secção Eventos , o agendador atribuiu o pod ao moc-lbeof1gn6x3 nó:

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

    Apenas os pods que tenham esta tolerância aplicada podem ser agendados em nós no taintnp. Todos os outros pods são agendados no conjunto de nós nodepool1 . Se criar mais conjuntos de nós, pode utilizar taints e tolerâncias para limitar os pods que podem ser agendados nesses recursos de nó.

Definir etiquetas do conjunto de nós

Para obter mais informações, veja Utilizar etiquetas num cluster do AKS preparado para o Azure Arc. ::: zone-end

Passos seguintes