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

No Azure Kubernetes Service (AKS), nós da mesma configuração são agrupados em node pools. Os pools de nós contêm as máquinas virtuais (VM) subjacentes que executam as suas aplicações. Os pools de nós do sistema e os pools de nós de utilizador são dois modos de pool de nós diferentes para os seus clusters AKS. Este artigo explica como gerenciar pools de nós do sistema no AKS. Para informações sobre como usar múltiplos pools de nós, veja criar pools de nós.

  • Pools de nós do sistema: O objetivo principal é hospedar pods críticos do sistema como CoreDNS e metrics-server. Pools de nós do sistema não devem ser usados para executar a sua aplicação. Os pools de nós do sistema usam Ubuntu Linux ou Azure Linux.
  • Pools de nós de utilizador: O objetivo principal é alojar os seus pods de aplicações e isolar as aplicações do pool de nós do sistema. Este isolamento impede que uma aplicação cause instabilidade no pool de nós do sistema do seu cluster. Os pools de nós de utilizador podem usar Ubuntu Linux, Azure Linux ou Windows.

Um cluster AKS de produção com um único pool de nós do sistema deve conter pelo menos dois nós. A recomendação para um cluster AKS de produção com um único pool de nós do sistema é ter pelo menos três nós para melhorar a tolerância a falhas e zonas de disponibilidade. Por exemplo, o número de nós padrão do comando az aks create é três e cria um novo cluster com um único pool de nós do sistema Linux e três nós Linux.

É possível, mas não recomendado, agendar os pods de aplicação num pool de nós do sistema se apenas tiver um pool de nós no seu cluster AKS. Uma solução melhor é criar um pool de nós de utilizador para a tua aplicação.

Antes de começar

Precisas que a versão 2.3.1 ou posterior do CLI do Azure esteja instalada e configurada. Para localizar a versão, execute o az --version comando. Se precisares de instalar ou atualizar, vê Install CLI do Azure.

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 API de 2020-03-01 ou superior deve ser usada para definir um modo de pool de nós. Clusters criados em versões API anteriores 2020-03-01 contêm apenas pools de nós de utilizador, mas podem ser migrados para conter pools de nós do sistema seguindo os passos do modo de atualização do pool.
  • O nome de um pool de nós só pode conter caracteres alfanuméricos minúsculos e deve começar com uma letra minúscula. Para reservatórios de nós de computação Linux, o comprimento deve estar entre 1 e 12 caracteres. Para pools de nós do Windows, o comprimento deve ser 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.

Conjuntos de nós do sistema e do utilizador

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. Mas recomendamos que isole os pods críticos do sistema dos pods da sua aplicação para evitar que pods de aplicações mal configurados ou desonestos eliminem acidentalmente os pods do 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 dos valores mínimo e máximo para pods.
  • Os pools osType de sistema têm de ser Linux.
  • Os pools de nós de utilizador osType podem ser Linux ou Windows.
  • Os pools do sistema devem conter pelo menos dois nós, mas a recomendação são três nós. Os pools de nós de usuário podem conter zero ou mais nós.
  • Os pools de nós do sistema exigem uma VM com um SKU 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 grupos de nós spot requerem grupos de nós de utilizador.
  • Adicionar outro pool de nós do sistema ou alterar qual é o 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 realizar as seguintes operações com grupos de nós:

  • Crie um pool de nós de sistema dedicado (prefira agendar pods de sistema em pools de nós dedicados como 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.
  • Elimine pools de nós de utilizador.
  • Você pode excluir pools de nós do sistema, desde que outro pool de nós do sistema esteja disponível 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 maxPods definição e eliminar o pool antigo.
  • Use afinidade de nós para exigir ou preferir quais nós possam ser agendados com base nos rótulos dos nós. Você pode definir key como kubernetes.azure.com, operator como In, e values de user ou system no 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 crias novos pools de nós com az aks nodepool add, esses pools de nós são pools de utilizador, a menos que especifiques explicitamente o parâmetro mode.

Crie variáveis para o grupo de recursos, nome do cluster e localização para os comandos usados neste artigo. Este artigo especifica valores ou pode usar os seus próprios valores.

export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"

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

az group create --name $RESOURCE_GROUP --location $LOCATION

Use o az aks create comando 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 as suas cargas de trabalho de produção, certifique-se de que está a utilizar pools de nós do sistema com, no mínimo, três nós. Esta operação demora vários minutos a ser concluída.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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. A recomendação é implementar os pods da aplicação em pools de nós de utilizador e dedicar os pools de nós do sistema apenas aos pods críticos do sistema. Esta separação impede que pods de aplicação maliciosos eliminem acidentalmente os pods do sistema. Imponha esse comportamento com o CriticalAddonsOnly=true:NoScheduletaint para os pools de nós do sistema.

O seguinte comando adiciona um conjunto dedicado de nós do tipo System com três nós. O az aks nodepool add comando adiciona três nós por defeito, mas usas o --node-count parâmetro para especificar o número de nós que queres.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --node-count 3 \
  --node-taints CriticalAddonsOnly=true:NoSchedule \
  --mode System

Mostrar detalhes para o pool de nós

Pode verificar os detalhes do seu pool de nós utilizando o seguinte comando.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_SYSTEM_NP \
  --query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"

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 a propriedade nodeTaints está definida como CriticalAddonsOnly=true:NoSchedule, o que impede o agendamento de pods de aplicação neste pool de nós.

{
  "Count": 3,
  "Mode": "System",
  "NodePool": "systempool",
  "NodeTaint": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "ResourceGroup": "myResourceGroup"
}

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

Nota

Deve ser utilizada uma versão da API de 2020-03-01 ou superior para definir um modo de pool de nós do sistema. Clusters criados em versões de API mais antigas que 2020-03-01 resultam em pools que contêm apenas nós de utilizador. Para receber funcionalidades e 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 do CLI do Azure.

Podes alterar os modos tanto para pools de nós do sistema como para pools de nós de utilizador. Só pode mudar um pool de nós do sistema para um pool de nós de utilizador se já existir outro pool de nós do sistema no cluster AKS.

Execute este comando para criar um novo pool de nós em modo sistema.

az aks nodepool add \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --node-count 3 \
  --mode System

Pode verificar o modo com o seguinte comando.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
System

Execute este comando para alterar um pool de nós do sistema para um pool de nós de utilizador.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode User

Pode verificar se o modo mudou com o seguinte comando.

az aks nodepool show \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --query mode --output tsv
User

Execute este comando para alterar um pool de nós de utilizador para um pool de nós do sistema.

az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL \
  --mode System

Executa o comando anterior para verificar se o modo mudou.

Eliminar um pool de nós no sistema

Nota

Para usar pools de nós do sistema em clusters AKS antes da versão 2020-03-01da API, adicione um novo pool de nós do sistema e depois elimine 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 \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name $NEW_NODE_POOL

Depois de eliminar o pool de nós do sistema, deves ter o pool original de nós do sistema criado com o cluster e o pool de nós do sistema que criaste na secção adicionar um pool dedicado de nós do sistema a um cluster AKS existente.

az aks nodepool list \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --query "[].{Name:name, Mode:mode}" --output table

Limpar recursos

Quando eliminas o grupo de recursos do cluster AKS, todos os recursos do cluster e o grupo de nós relacionados (MC_) são eliminados.

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

az group delete --name $RESOURCE_GROUP --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.