Criar pools de nós para um cluster no Serviço de Kubernetes do Azure (AKS)

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 seus aplicativos. Ao criar um cluster do AKS, você define o número inicial de nós e seu tamanho (SKU), que cria um pool de nós do sistema.

Para dar suporte a aplicativos que têm demandas de armazenamento ou de computação diferentes, você pode criar pools de nós de usuário. Os pools de nós do sistema atendem à principal finalidade de hospedar pods críticos do sistema, como CoreDNS e konnectivity. Os pools de nós do usuário atendem à principal finalidade de hospedar os pods de aplicativo. Por exemplo, use mais pools de nós para fornecer as GPUs para aplicativos de computação intensiva ou acesso ao armazenamento SSD de alto desempenho. No entanto, se você quiser ter apenas um pool no cluster do AKS, poderá agendar pods de aplicativo em pools de nós do sistema.

Observação

Esse recurso permite mais controle sobre a criação e o gerenciamento de vários pools de nós e exige comandos separados para operações CRUD (criação/atualização/exclusão). Antes, as operações de cluster por meio de az aks create ou az aks update usavam a API managedCluster e eram as únicas opções para alterar o plano de controle e um único pool de nós. Esse recurso expõe um conjunto de operações separado para pools de agentes por meio da API agentPool e requer o uso do comando az aks nodepool definido para executar operações em um pool de nós individual.

Este artigo mostra como criar um ou mais pools de nós em um cluster do AKS.

Antes de começar

Limitações

As seguintes limitações se aplicam quando você cria clusters do AKS com suporte a vários pools de nós:

  • Confira Cotas, restrições de tamanho de máquina virtual e disponibilidade de região no AKS (Serviço de Kubernetes do Azure).
  • É possível excluir os pools de nós do sistema se você tiver outro pool de nós do sistema para assumir o lugar no cluster do AKS. Caso contrário, você não poderá excluir o pool de nós do sistema.
  • Os pools do sistema devem conter pelo menos um nó, e os pools de nós de usuários podem conter zero ou mais nós.
  • O cluster do AKS deve usar o balanceador de carga do SKU Padrão para usar vários pools de nós. Não há suporte para esse recurso nos balanceadores de carga do SKU Básico.
  • O cluster do AKS deve usar Conjuntos de Dimensionamento de Máquinas Virtuais para os nós.
  • 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 1 e 6 caracteres.
  • Todos os pools de nós devem estar na mesma rede virtual.
  • Quando você cria vários pools de nós no momento da criação do cluster, as versões do Kubernetes para os pools de nós devem corresponder à versão definida pelo plano de controle.

Criar um cluster AKS

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. Se um nó ficar inoperante, você perde os recursos do plano de controle e a redundância é comprometida. Você pode mitigar esse risco tendo mais nós do plano de controle.

  1. Crie um grupo de recursos do Azure usando o comando az group create.

    az group create --name myResourceGroup --location eastus
    
  2. Crie um cluster do AKS com um único pool de nós usando o comando az aks create.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --generate-ssh-keys \
        --load-balancer-sku standard
    

    São necessários alguns minutos para criar o cluster.

  3. Quando o cluster estiver pronto, obtenha as credenciais do cluster usando o comando az aks get-credentials.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Adicionar um pool de nós

O cluster criado na etapa anterior tem um único pool de nós. Nesta seção, adicionamos um segundo pool de nós ao cluster.

  1. Crie um novo pool de nós usando o comando az aks nodepool add. O exemplo a seguir cria um pool de nós denominado mynodepool que executa três nós:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3
    
  2. Verifique o status dos pools de nós usando o comando az aks node pool list e especifique o grupo de recursos e o nome do cluster.

    az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
    

    A saída de exemplo a seguir mostra que mynodepool foi criado com êxito com três nós. Quando o cluster do AKS foi criado na etapa anterior, um nodepool1 padrão foi criado com uma contagem de nós de 2.

    [
      {
        ...
        "count": 3,
        ...
        "name": "mynodepool",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      },
      {
        ...
        "count": 2,
        ...
        "name": "nodepool1",
        "orchestratorVersion": "1.15.7",
        ...
        "vmSize": "Standard_DS2_v2",
        ...
      }
    ]
    

Pools de nós do ARM64

O processador ARM64 fornece computação de baixa potência para as cargas de trabalho do Kubernetes. Para criar um pool de nós do ARM64, escolha uma Máquina Virtual da série Dpsv5, Dplsv5 ou Epsv5.

Limitações

  • Pools de nós do ARM64 não são compatíveis com clusters habilitados para o Defender.
  • Pools de nós habilitados para FIPS não são compatíveis com SKUs do ARM64.

Adicionar um pool de nós ARM64

  • Adicione um pool de nós do ARM64 ao cluster existente usando o az aks nodepool add.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name armpool \
        --node-count 3 \
        --node-vm-size Standard_D2pds_v5
    

Pools de nós do Azure Linux

O host de contêiner do Azure Linux para AKS é uma distribuição do Linux de software livre disponível como um host de contêiner do AKS. Ele fornece alta confiabilidade, segurança e consistência. Isso inclui apenas o conjunto mínimo de pacotes necessários para a execução de cargas de trabalho de contêiner, o que melhora os tempos de inicialização e o desempenho geral.

Adicionar um pool de nós do Azure Linux

  • Adicione um pool de nós do Azure Linux ao cluster existente usando o comando az aks nodepool add e especifique --os-sku AzureLinux.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name azlinuxpool \
        --os-sku AzureLinux
    

Migrar nós do Ubuntu para os nós do Azure Linux

Você pode migrar seus nós existentes do Ubuntu para o Azure Linux usando um dos seguintes métodos:

Pools de nós com sub-redes exclusivas

Uma carga de trabalho pode exigir que os nós de cluster sejam divididos em pools separados para isolamento lógico. Sub-redes separadas dedicadas a cada pool de nós no cluster podem ajudar a dar suporte a esse isolamento, que pode atender a requisitos como ter espaço de endereço de rede virtual não contíguo para dividir entre pools de nós.

Observação

Verifique se sua versão da CLI do Azure é 2.35.0 ou posterior.

Limitações

  • Todas as sub-redes atribuídas aos pools de nós devem pertencer à mesma rede virtual.
  • Os pods do sistema devem ter acesso a todos os nós e pods no clusters para fornecer funcionalidade crítica, como resolução DNS e túnel de logs de kubectl/exec/proxy de encaminhamento de porta.
  • Se você expandir a VNET depois de criar o cluster, deverá atualizar o cluster antes de adicionar uma sub-rede fora do bloco CIDR original. Embora o AKS apresente erros na adição do pool de agentes, a extensão aks-preview da CLI do Azure (versão 0.5.66 e superior) já dá suporte à execução do comando az aks update com apenas os argumentos -g <resourceGroup> -n <clusterName> obrigatórios. Esse comando executará uma operação de atualização sem fazer nenhuma alteração, o que pode recuperar um cluster preso em um estado com falha.
  • Nos clusters com uma versão do Kubernetes inferior a 1.23.3, o kube-proxy usa o SNAT para o tráfego de novas sub-redes, o que poderá fazer com que a Política de Rede do Azure remova os pacotes.
  • Os nós do Windows usarão o tráfego SNAT para as novas sub-redes até que a imagem do pool de nós seja refeita.
  • Os balanceadores de carga internos são padrão para uma das sub-redes do pool de nós.

Adicione um pool de nós com uma sub-rede exclusiva

  • Adicione um pool de nós com uma sub-rede exclusiva ao cluster existente usando o comando az aks nodepool add e especifique o --vnet-subnet-id.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 3 \
        --vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>
    

Pools de nós habilitados para FIPS

Para obter mais informações sobre como habilitar o FIPS (Federal Information Process Standard) para o cluster do AKS, consulte Habilitar o FIPS (Federal Information Process Standard) para pools de nós do AKS (Serviço de Kubernetes do Azure).

Pools de nós do Windows Server com containerd

A partir do Kubernetes versão 1.20 e superior, você pode especificar containerd como o runtime de contêiner para pools de nós do Windows Server 2019. A partir do Kubernetes 1.23, containerd é o runtime de contêiner padrão e somente para Windows.

Importante

Ao usar containerd com pools de nós do Windows Server 2019:

  • O painel de controle e os pools de nós do Windows Server 2019 devem usar o Kubernetes versão 1.20 ou superior.
  • Quando você cria ou atualiza um pool de nós para executar contêineres do Windows Server, o valor padrão para --node-vm-size é Standard_D2s_v3, que era o tamanho mínimo recomendado para pools de nós do Windows Server 2019 antes do Kubernetes versão 1.20. O tamanho mínimo recomendado para pools de nós do Windows Server 2019 usando containerd é Standard_D4s_v3. Ao definir o parâmetro --node-vm-size, verifique a lista de tamanhos de VM restritos.
  • Recomendamos usar taints ou rótulos com seus pools de nós do Windows Server 2019 que executam containerd e tolerâncias ou seletores de nós com suas implantações para garantir que as cargas de trabalho sejam agendadas corretamente.

Adicionar um pool de nós do Windows Server com containerd

  • Adicione um pool de nós do Windows Server com containerd ao cluster existente usando o az aks nodepool add.

    Observação

    Se você não especificar o cabeçalho personalizado WindowsContainerRuntime=containerd, o pool de nós ainda usará containerd como o runtime do contêiner por padrão.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --os-type Windows \
        --name npwcd \
        --node-vm-size Standard_D4s_v3 \
        --kubernetes-version 1.20.5 \
        --aks-custom-headers WindowsContainerRuntime=containerd \
        --node-count 1
    

Atualizar um pool de nós do Windows Server existente específico para containerd

  • Atualize um pool de nós específico do Docker para containerd usando o comando az aks nodepool upgrade.

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name npwd \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

Atualizar todos os pools de nós do Windows Server existentes para containerd

  • Atualize todos os pools de nós do Docker para containerd usando o comando az aks nodepool upgrade.

    az aks nodepool upgrade \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

Excluir um pool de nós

Se você não precisar mais de um pool de nós, pode excluí-lo e remover os nós de VM subjacentes.

Cuidado

Quando você exclui um pool de nós, o AKS não executa o esvaziamento e a drenagem, e não há opções de recuperação para perda de dados que possa ocorrer quando você exclui um pool de nós. Se não for possível agendar os pods em outros pools de nós, esses aplicativos ficarão indisponíveis. Não exclua um pool de nós quando os aplicativos em uso não tiverem backups de dados ou a capacidade de serem executados em outros pools de nós no cluster. Para minimizar a interrupção do reagendamento de pods em execução no momento no pool de nós que você deseja excluir, execute um isolamento e o esvaziamento em todos os nós no pool de nós, antes da exclusão.

  • Exclua um pool de nós usando o comando az aks nodepool delete e especifique o nome do pool de nós.

    az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait
    

    Leva alguns minutos para excluir os nós e o pool de nós.

Próximas etapas

Neste artigo, você aprendeu a criar vários pools de nós em um cluster do AKS. Para saber mais sobre como criar vários pools de nós, consulte Gerenciar vários pools de nós para um cluster no AKS (Serviço de Kubernetes do Azure).