Gerenciar pools de nós do sistema no AKS (Serviço de Kubernetes do Azure)

No AKS (Serviço de Kubernetes do Azure), 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 os aplicativos. Os pools de nós do sistema e os pools de nós do usuário são dois modos de pool de nós diferentes para os clusters AKS. Os pools de nós do sistema atendem à principal finalidade de hospedar pods críticos do sistema, como CoreDNS e metrics-server. Os pools de nós do usuário atendem à principal finalidade de hospedar os pods de aplicativo. No entanto, os pods de aplicativo podem ser agendados nos pools de nós do sistema, caso deseje ter apenas um pool no cluster do AKS. Cada cluster do AKS precisa conter pelo menos um pool de nós do sistema com no mínimo dois nós.

Importante

Se for executado um único pool de nós do sistema para o cluster do AKS em um ambiente de produção, é recomendável usar pelo menos três nós para o pool de nós.

Este artigo explica como gerenciar pools de nós do sistema no AKS. Para obter mais informações sobre como usar vários pools de nós, consulte usar vários pools de nós.

Antes de começar

Será necessária a CLI do Azure versão 2.3.1 ou posterior instalada e configurada. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Limitações

As seguintes limitações se aplicam ao criar e gerenciar clusters do AKS com suporte a vários pools de nós do sistema.

  • Confira Cotas, restrições de tamanho de VM e disponibilidade de região no AKS.
  • Uma versão de API de 2020-03-01 ou superior deve ser usada para definir um modo de pool de nós. Os clusters criados em versões de API anteriores a 2020-03-01 contêm apenas pools de nó de usuário, mas podem ser migrados para conter pools de nós do sistema, seguindo as etapas do modo de pool de atualização.
  • O nome de um pool de nós pode conter apenas caracteres alfanuméricos minúsculos e deve começar com uma letra minúscula. Para pools de nós do Linux, o comprimento deve ter entre 1 e 12 caracteres. Para pools de nós do Windows, o comprimento deve ter entre um e seis caracteres.
  • O modo de um pool de nós é uma propriedade necessária e deve ser definido explicitamente ao usar modelos ARM ou chamadas diretas à API.

Pools de nós do usuário e do sistema

Para um pool de nós do sistema, o AKS atribui automaticamente o rótulo kubernetes.azure.com/mode: system a seus nós. Isso faz com que o AKS prefira o agendamento de pods do sistema em pools de nós que contêm esse rótulo. Este rótulo não impede o agendamento de pods de aplicativo em pools de nós do sistema. No entanto, recomendamos isolar os pods críticos do sistema dos pods do aplicativo para evitar que pods de aplicativos mal configurados ou invasores apaguem acidentalmente pods do sistema.

É possível impor esse comportamento criando um pool de nós do sistema dedicado. Use o taint CriticalAddonsOnly=true:NoSchedule para impedir que os pods de aplicativo sejam agendados nos pools de nós do sistema.

Os pools de nós do sistema têm as seguintes restrições:

  • Os pools de nós do sistema devem dar suporte a pelo menos 30 pods, conforme descrito pela fórmula de valor mínimo e máximo para pods.
  • Os pools do sistema osType devem ser Linux.
  • Os pools de nós de usuário osType podem ser Linux ou Windows.
  • Os pools do sistema devem conter pelo menos dois nós e os pools de nós do usuário podem conter zero ou mais nós.
  • Os pools de nós do sistema exigem uma SKU de VM de pelo menos 4 vCPUs e 4 GB de memória.
  • Não há suporte para VMs da série B para pools de nós do sistema.
  • É recomendado um mínimo de três nós com 8 vCPUs ou dois nós de no mínimo 16 vCPUs (por exemplo, Standard_DS4_v2), especialmente para clusters grandes (várias réplicas de pod de CoreDNS, 3-4+ complementos, etc.).
  • Pools de nós spot exigem pools de nós de usuário.
  • Acrescentar outro pool de nós do sistema adicional ou alterar qual pool de nós é um pool de nós do sistema não muda automaticamente os pods do sistema. O pods do sistema podem continuar a ser executados no mesmo pool de nós, mesmo que ele seja alterado para um pool de nós de usuário. Se excluir ou reduzir verticalmente um pool de nós que executa pods do sistema e que antes eram um pool de nós do sistema, esses pods do sistema serão reimplantados com o agendamento preferencial para o novo pool de nós do sistema.

É possível executar as seguintes operações com pools de nós:

  • Criar um pool de nós do sistema dedicado (prefira o agendamento de pods do sistema em pools de nós de mode:system)
  • Alterar um pool de nós do sistema para ser um pool de nos de usuário, desde que tenha outro pool de nós do sistema para assumir o lugar no cluster do AKS.
  • Alterar um pool de nós de usuário para ser um pool de nós do sistema.
  • Excluir pools de nós de usuário.
  • É possível excluir os pools de nós do sistema, desde que tenha outro pool de nós do sistema para assumir o lugar no cluster do AKS.
  • Um cluster AKS pode ter vários pools de nó do sistema e requer pelo menos um pool de nós do sistema.
  • Caso deseje alterar várias configurações imutáveis em pools de nós existentes, poderá criar novos pools de nós para substituí-los. Um exemplo é adicionar um novo pool de nós com uma nova configuração maxPods e excluir o pool de nós antigo.
  • Use a afinidade de nó para exigir ou escolher quais nós podem ser agendados por rótulo. É possível definir key como kubernetes.azure.com, operator como In e values de user ou system para o YAML, basta aplicar essa definição com kubectl apply -f yourYAML.yaml.

Criar um cluster do AKS com um pool de nós do sistema

Ao criar um novo cluster do AKS, o pool de nós inicial usa como padrão um modo de tipo system. Quando são criados novos pools de nós com az aks nodepool add, eles são pools de nós de usuário, a menos que seja especificado explicitamente o parâmetro de modo.

O exemplo a seguir cria um grupo de recursos chamado myResourceGroup na região eastus.

az group create --name myResourceGroup --location eastus

Use o comando az aks create para criar um cluster do AKS. O seguinte exemplo cria um cluster chamado myAKSCluster com um pool de nós do sistema dedicado contendo dois nós. Para as cargas de trabalho de produção, verifique se estão em uso pools de nó do sistema com pelo menos três nós. Essa operação pode levar vários minutos para ser concluída.

# Create a new AKS cluster with a single system pool
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys

Adicionar um pool de nós do sistema dedicado a um cluster AKS existente

É possível adicionar um ou mais pools de nós do sistema a clusters AKS existentes. É recomendável agendar pods de aplicativo nos pools de nós do usuário e dedicar pools de nós do sistema a apenas pods críticos do sistema. Isso impede que os pods de aplicativos invasores apaguem o pods do sistema acidentalmente. Impor esse comportamento com o CriticalAddonsOnly=true:NoSchedule taint para o pool de nós do sistema.

O comando a seguir adiciona um pool de nós dedicados de modo do tipo sistema com uma contagem padrão de três nós.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name systempool \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --mode System

Mostrar detalhes do pool de nós

É possível verificar os detalhes do pool de nós com o comando a seguir.

az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name systempool

Um modo do tipo Sistema é definido para pools de nós do sistema, e um modo do tipo Usuário é definido para pools de nós do usuário. Para um pool do sistema, verifique se o seu aplicativo está definido como CriticalAddonsOnly=true:NoSchedule, o que impedirá que pods de aplicativos sejam agendados neste pool de nós.

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 3,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "System",
  "name": "systempool",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
  "nodeLabels": {},
  "nodeTaints": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "orchestratorVersion": "1.16.10",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "myResourceGroup",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

Atualizar o sistema de cluster e os pools de nós do usuário existentes

Observação

Uma versão de API de 2020-03-01 ou superior deve ser usada para definir um modo de pool de nós do sistema. Os clusters criados em versões de API anteriores a 2020-03-01 contêm apenas pools de nó de usuário como resultado. Para receber a funcionalidade e os benefícios do pool de nós do sistema em clusters mais antigos, atualize o modo de pools de nós existentes com os seguintes comandos na versão mais recente da CLI do Azure.

É possível alterar os modos para os pools de nó do usuário e do sistema. É possível alterar um pool de nós do sistema para um pool de usuários somente se já existir outro pool de nós do sistema no cluster AKS.

Esse comando altera um pool de nós do sistema para um pool de nós do usuário.

az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode user

Esse comando altera um pool de nós de usuário para um pool de nós do sistema.

az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode system

Excluir um pool de nós do sistema

Observação

Para usar pools de nó do sistema em clusters AKS antes da versão de API 2020-03-02, adicione um novo pool de nós do sistema e, em seguida, exclua o pool de nós padrão original.

Deve haver pelo menos dois pools de nós do sistema no cluster AKS para poder excluir um deles.

az aks nodepool delete --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool

Limpar os recursos

Para excluir o cluster, use o comando az group delete para excluir o grupo de recursos AKS:

az group delete --name myResourceGroup --yes --no-wait

Próximas etapas

Este artigo mostra como criar e gerenciar pools de nós do sistema em um cluster do AKS. Para obter informações sobre como iniciar e parar pools de nós do AKS, consulte iniciar e parar pools de nós no AKS.