Gerir conjuntos de nós do sistema no Azure Kubernetes Service (AKS)

No Serviço Kubernetes do Azure (AKS), nós da mesma configuração são agrupados em pools de nós. Os pools de nós contêm as VMs subjacentes que executam seus aplicativos. Os pools de nós do sistema e os pools de nós de usuário são dois modos de pool de nós diferentes para seus clusters AKS. Os pools de nós do sistema servem ao objetivo principal de hospedar pods críticos do sistema, como CoreDNS e metrics-server. Os pools de nós de usuário têm o objetivo principal de hospedar seus pods de aplicativo. No entanto, os pods de aplicativos podem ser agendados em pools de nós do sistema se você desejar ter apenas um pool em seu cluster AKS. Cada cluster AKS deve conter pelo menos um pool de nós do sistema com pelo menos dois nós.

Importante

Se você executar um único pool de nós do sistema para seu cluster AKS em um ambiente de produção, recomendamos 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 informações sobre como usar vários pools de nós, consulte Usar vários pools de nós.

Antes de começar

Você precisa da CLI do Azure versão 2.3.1 ou posterior instalada e configurada. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Limitações

As limitações a seguir se aplicam quando você cria e gerencia clusters AKS que suportam pools de nós do sistema.

  • Consulte Cotas, restrições de tamanho de VM e disponibilidade de região no AKS.
  • Uma versão da 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ós de usuário, mas podem ser migrados para conter pools de nós do sistema seguindo as etapas do modo de pool de atualizações.
  • 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 Linux, o comprimento deve estar entre 1 e 12 caracteres. Para pools de nós do Windows, o comprimento deve estar entre um e seis caracteres.
  • O modo de um pool de nós é uma propriedade necessária e deve ser explicitamente definido ao usar modelos ARM ou chamadas diretas de API.

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

Para um pool de nós do sistema, o AKS atribui automaticamente o rótulo kubernetes.azure.com/mode: system aos seus nós. Isso faz com que o AKS prefira pods do sistema de agendamento em pools de nós que contêm esse rótulo. Esse rótulo não impede que você programe pods de aplicativos em pools de nós do sistema. No entanto, recomendamos que você isole pods críticos do sistema de seus pods de aplicativo para evitar que pods de aplicativos mal configurados ou não autorizados excluam acidentalmente pods de sistema.

Você pode impor esse comportamento criando um pool de nós de sistema dedicado. Use a CriticalAddonsOnly=true:NoSchedule mancha para impedir que pods de aplicação sejam agendados em 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 suportar pelo menos 30 pods, conforme descrito pela fórmula de valor mínimo e máximo para pods.
  • Os pools de sistemas osType devem ser Linux.
  • Os pools de nós de usuário osType podem ser Linux ou Windows.
  • Os pools de sistema devem conter pelo menos dois nós e os pools de nós de 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 4GB de memória.
  • As VMs da série B não são suportadas para pools de nós do sistema.
  • Recomenda-se um mínimo de três nós de 8 vCPUs ou dois nós de pelo menos 16 vCPUs (por exemplo, Standard_DS4_v2), especialmente para clusters grandes (réplicas de Pod CoreDNS múltiplos, complementos 3-4+, etc.).
  • Os pools de nós spot exigem pools de nós de usuário.
  • Adicionar outro pool de nós do sistema ou alterar qual pool de nós é um pool de nós do sistema não move automaticamente os pods do sistema. Os pods do sistema podem continuar a ser executados no mesmo pool de nós, mesmo que você o altere para um pool de nós de usuário. Se você excluir ou reduzir a escala de um pool de nós executando pods de sistema que anteriormente eram um pool de nós do sistema, esses pods de sistema serão reimplantados com agendamento preferencial para o novo pool de nós do sistema.

Você pode fazer as seguintes operações com pools de nós:

  • Crie um pool de nós de sistema dedicado (prefira o agendamento de pods de sistema a pools de nós de mode:system)
  • Altere um pool de nós do sistema para ser um pool de nós de usuário, desde que você tenha outro pool de nós do sistema para ocupar seu lugar no cluster AKS.
  • Altere um pool de nós de usuário para ser um pool de nós do sistema.
  • Exclua pools de nós de usuário.
  • Você pode excluir pools de nós do sistema, desde que tenha outro pool de nós do sistema para ocupar seu lugar no cluster AKS.
  • Um cluster AKS pode ter vários pools de nós do sistema e requer pelo menos um pool de nós do sistema.
  • Se quiser alterar várias configurações imutáveis em pools de nós existentes, você pode 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 preferir quais nós podem ser agendados com base em rótulos de nós. Você pode definir key como kubernetes.azure.com, operator para In, e values de um ou systemuser para o seu YAML, aplicando esta definição usando kubectl apply -f yourYAML.yaml.

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

Quando você cria um novo cluster AKS, o pool de nós inicial assume como padrão um modo do tipo system. Quando você cria novos pools de nós com az aks nodepool addo , esses pools de nós são pools de nós de usuário, a menos que você especifique explicitamente o parâmetro mode.

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

az group create --name myResourceGroup --location eastus

Utilize o comando az aks create para criar um cluster AKS. O exemplo a seguir cria um cluster chamado myAKSCluster com um pool de sistema dedicado contendo dois nós. Para suas cargas de trabalho de produção, certifique-se de estar usando pools de nós do sistema com pelo menos três nós. Esta operação pode levar vários minutos para ser concluída.

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

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

Você pode adicionar um ou mais pools de nós do sistema aos clusters AKS existentes. É recomendável agendar seus pods de aplicativo em pools de nós de usuário e dedicar pools de nós do sistema apenas para pods críticos do sistema. Isso evita que pods de aplicativos fraudulentos excluam acidentalmente pods do sistema. Imponha esse comportamento com a CriticalAddonsOnly=true:NoSchedulemancha para seus pools de nós do sistema.

O comando a seguir adiciona um pool de nós dedicados do sistema de tipo de modo 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 para o pool de nós

Você pode verificar os detalhes do pool de nós com o seguinte comando.

az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n systempool

Um modo do tipo System é definido para pools de nós do sistema e um modo do tipo User é definido para pools de nós de usuário. Para um pool de sistema, verifique se o taint está definido como , o CriticalAddonsOnly=true:NoScheduleque impedirá que pods de aplicação sejam agendados nesse 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 existente e os pools de nós de usuário

Nota

Uma versão da 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ós 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 dos pools de nós existentes com os seguintes comandos na versão mais recente da CLI do Azure.

Você pode alterar os modos dos pools de nós do sistema e do usuário. Você pode alterar um pool de nós do sistema para um pool de usuários somente se outro pool de nós do sistema já existir no cluster AKS.

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

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode user

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

az aks nodepool update -g myResourceGroup --cluster-name myAKSCluster -n mynodepool --mode system

Excluir um pool de nós do sistema

Nota

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

Você deve ter pelo menos dois pools de nós do sistema em seu cluster AKS antes de poder excluir um deles.

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster -n mynodepool

Clean up resources (Limpar 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óximos passos

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