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

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

Observação

Para obter informações sobre como gerenciar pools de nós no AKS no Azure Stack HCI 22H2, consulte Gerenciar pools de nós.

No AKS habilitado pelo Azure Arc, os nós da mesma configuração são agrupados em pools de nós. Esses pools de nós contêm as VMs subjacentes que executam seus aplicativos. Este artigo mostra como criar e gerenciar pools 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 pool 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 pool de nós

Você pode adicionar um pool de nós a um cluster existente usando o az aksarc nodepool add comando . Verifique se o nome do pool de nós não é o mesmo nome que um pool 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 pool de nós

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

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

Saída de exemplo:

{
"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 o máximo de pods implantados em um pool de nós

Você pode configurar o máximo de pods implantáveis em um nó no momento da criação do cluster ou ao criar novos pools de nós. Se você não especificar maxPods ao criar pools de nós, o pool de nós será implantado com um valor padrão de no máximo 110 pods:

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

Dimensionar um pool de nós

Você pode escalar ou reduzir verticalmente o número de nós em um pool de nós.

Para dimensionar o número de nós em um pool de nós, use o comando az aksarc nodepool scale. O exemplo a seguir dimensiona o número de nós para 2 em um pool de nós chamado nodepool1:

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

Excluir um pool de nós

Se você precisar excluir um pool de nós, use 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 rótulo para um pool de nós

Ao criar um pool de nós, você pode adicionar taints ou rótulos a ele. Quando você adiciona um taint ou rótulo, todos os nós dentro desse pool de nós também recebem esse taint ou rótulo.

Importante

Você deve adicionar taints ou rótulos a nós para todo o pool de nós usando az aksarc nodepool. Não recomendamos usar kubectl para aplicar taints ou rótulos a nós individuais em um pool de nós.

Definir os taints do pool de nós

  1. Criar um pool de nós com uma mancha utilizando o comando az aksarc nodepool add. Especifique o nome taintnp e use 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 status do pool de nós usando o az aksarc nodepool list comando :

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

    A saída de exemplo a seguir mostra que o taintnp pool de nós cria nós com o especificado nodeTaints:

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

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

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

Definir as tolerâncias do pool de nós

Na etapa anterior, você aplicou o sku=gpu:NoSchedule taint quando criou o pool de nós. O manifesto YAML de exemplo a seguir usa uma tolerância para permitir que o agendador do Kubernetes execute um pod NGINX em um nó nesse pool de nós:

  1. Crie um arquivo chamado 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 usando o comando kubectl apply:

    kubectl apply -f nginx-toleration.yaml
    

    Leva alguns segundos para agendar o pod e efetuar pull da imagem NGINX.

  3. Verifique o status usando o kubectl describe pod comando :

    kubectl describe pod mypod
    

    A saída de exemplo condensada a seguir mostra que a sku=gpu:NoSchedule tolerância é aplicada. Na seçã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
    

    Somente os pods que têm essa tolerância aplicada podem ser agendados em nós no taintnp. Quaisquer outros pods são agendados no pool de nós nodepool1. Se você criar pools de nós adicionais, pode usar outros taints e tolerâncias para limitar quais pods podem ser agendados nesses recursos de nó.

Configurar rótulos do pool de nós

Para obter mais informações, consulte Usar rótulos em um cluster do AKS habilitado para Azure Arc. ::: zone-end

Próximas etapas