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

No Serviço Kubernetes do Azure (AKS), 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 AKS, você define o número inicial de nós e seu tamanho (SKU), o que cria um pool de nós do sistema.

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

Nota

Esse recurso permite mais controle sobre a criação e o gerenciamento de vários pools de nós e requer comandos separados para operações de criação/atualização/exclusão (CRUD). Anteriormente, as operações de cluster por meio az aks create ou az aks update usavam a API managedCluster e eram as únicas opções para alterar seu 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 az aks nodepool uso do conjunto de comandos 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 AKS.

Antes de começar

Limitações

As limitações a seguir se aplicam quando você cria clusters AKS que suportam vários pools de nós:

  • Consulte Cotas, restrições de tamanho de máquina virtual e disponibilidade de região no Serviço Kubernetes do Azure (AKS).
  • Você pode excluir o pool de nós do sistema se tiver outro pool de nós do sistema para ocupar seu lugar no cluster AKS. Caso contrário, não será possível excluir o pool de nós do sistema.
  • Os pools de sistema devem conter pelo menos um nó e os pools de nós de usuário podem conter zero ou mais nós.
  • O cluster AKS deve usar o balanceador de carga SKU padrão para usar vários pools de nós. Esse recurso não é suportado com balanceadores de carga SKU básicos.
  • O cluster AKS deve usar Conjuntos de Escala de Máquina Virtual 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 Linux, o comprimento deve estar entre 1 e 12 caracteres.
    • Para pools de nós do Windows, o comprimento deve estar entre 1 e 6 caracteres.
  • Todos os pools de nós devem residir 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 para o plano de controle.

Criar um cluster do AKS

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. Se um nó cair, você perderá os recursos do plano de controle e a redundância será comprometida. Você pode reduzir esse risco tendo mais nós de plano de controle.

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

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

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --location $LOCATION \
        --load-balancer-sku standard \
        --generate-ssh-keys
    

    A criação do cluster demora alguns minutos.

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

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

Adicionar um conjunto 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 az aks nodepool add comando. O exemplo a seguir cria um pool de nós chamado mynodepool que executa três nós:

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

    az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
    

    A saída de exemplo a seguir mostra que mynodepool foi criado com êxito com três nós. Quando o cluster 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 ARM64

O processador ARM64 fornece computação de baixo consumo para suas cargas de trabalho do Kubernetes. Para criar um pool de nós ARM64, você precisa escolher uma máquina virtual da série Dpsv5, Dplsv5 ou Epsv5 .

Limitações

  • Os pools de nós ARM64 não são suportados em clusters habilitados para Defender com a versão do Kubernetes inferior à 1.29.0.
  • Os pools de nós habilitados para FIPS não são suportados com SKUs ARM64.
  • Os pools de nós do Windows não são suportados com SKUs ARM64.

Adicionar um conjunto de nós ARM64

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

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $ARM_NODE_POOL_NAME \
        --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 Linux de código aberto disponível como um host de contêiner AKS. Ele fornece alta confiabilidade, segurança e consistência. Ele inclui apenas o conjunto mínimo de pacotes necessários para executar cargas de trabalho de contêiner, que melhoram 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 az aks nodepool add comando e especifique --os-sku AzureLinux.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $AZ_LINUX_NODE_POOL_NAME \
        --os-sku AzureLinux
    

Migrar nós do Ubuntu para 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 a divisão de nós de cluster 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.

Nota

Certifique-se de usar a versão 2.35.0 da CLI do Azure ou posterior.

Limitações

  • Todas as sub-redes atribuídas a pools de nós devem pertencer à mesma rede virtual.
  • Os pods do sistema devem ter acesso a todos os nós e pods no cluster para fornecer funcionalidades críticas, como resolução de DNS e tunelamento kubectl logs/exec/port-forward proxy.
  • Se você expandir sua VNET depois de criar o cluster, deverá atualizá-lo antes de adicionar uma sub-rede fora do bloco CIDR original. Enquanto os erros do AKS no pool de agentes são adicionados, a aks-preview extensão da CLI do Azure (versão 0.5.66 e superior) agora oferece suporte à execução de az aks update comandos apenas com os argumentos necessários -g <resourceGroup> -n <clusterName> . Este comando executa uma operação de atualização sem fazer alterações, o que pode recuperar um cluster preso em um estado de falha.
  • Em clusters com a versão do Kubernetes menor que 1.23.3, o tráfego de SNATs kube-proxy de novas sub-redes, o que pode fazer com que a Política de Rede do Azure solte os pacotes.
  • O tráfego SNAT dos nós do Windows para as novas sub-redes até que o pool de nós seja recriado.
  • Os balanceadores de carga internos usam como padrão uma das sub-redes do pool de nós.

Adicionar um conjunto de nós com uma sub-rede exclusiva

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

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-count 3 \
        --vnet-subnet-id $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 seu cluster AKS, consulte Habilitar FIPS (Federal Information Process Standard) para pools de nós do Serviço Kubernetes do Azure (AKS).

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 tempo de execução do contêiner para pools de nós do Windows Server 2019. A partir do Kubernetes 1.23, containerd é o tempo de execução de contêiner padrão e único para Windows.

Importante

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

  • O plano 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 da versão 1.20 do Kubernetes. O tamanho mínimo recomendado para pools de nós do Windows Server 2019 usando containerd é Standard_D4s_v3. Ao definir o --node-vm-size parâmetro, verifique a lista de tamanhos de VM restritos.
  • Recomendamos o uso de manchas ou rótulos com seus pools de nós do Windows Server 2019 em execução containerd e tolerações ou seletores de nós com suas implantações para garantir que suas 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 ao containerd cluster existente usando o az aks nodepool add.

    Nota

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

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --os-type Windows \
        --name $CONTAINER_D_NODE_POOL_NAME \
        --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 usar o az aks nodepool upgrade comando.

    az aks nodepool upgrade \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $CONTAINER_D_NODE_POOL_NAME \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

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

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

    az aks nodepool upgrade \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --kubernetes-version 1.20.7 \
        --aks-custom-headers WindowsContainerRuntime=containerd
    

Pools de nós com discos de SO efêmeros

  • Adicione um pool de nós que usa discos do sistema operacional efêmero a um cluster existente usando o az aks nodepool add comando com o --node-osdisk-type sinalizador definido como Ephemeral.

    Nota

    • Você pode especificar discos efêmeros do sistema operacional durante a criação do cluster usando o --node-osdisk-type sinalizador com o az aks create comando.
    • Se quiser criar pools de nós com discos de sistema operacional conectados à rede, você pode fazer isso especificando --node-osdisk-type Managed.
    az aks nodepool add --name $EPHEMERAL_NODE_POOL_NAME --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME -s Standard_DS3_v2 --node-osdisk-type Ephemeral
    

Importante

Com o Ephemeral OS, você pode implantar VMs e imagens de instância até o tamanho do cache de VM. A configuração de disco do SO do nó padrão no AKS usa 128 GB, o que significa que você precisa de um tamanho de VM que tenha um cache maior que 128 GB. O Standard_DS2_v2 padrão tem um tamanho de cache de 86 GB, que não é grande o suficiente. O Standard_DS3_v2 VM SKU tem um tamanho de cache de 172 GB, que é grande o suficiente. Você também pode reduzir o tamanho padrão do disco do sistema operacional usando --node-osdisk-size, mas lembre-se de que o tamanho mínimo para imagens AKS é de 30 GB.

Excluir um pool de nós

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

Atenção

Quando você exclui um pool de nós, o AKS não executa cordão e drenagem, e não há opções de recuperação para perda de dados que pode ocorrer quando você exclui um pool de nós. Se os pods não puderem ser agendados em outros pools de nós, esses aplicativos ficarão indisponíveis. Certifique-se de não excluir um pool de nós quando os aplicativos em uso não tiverem backups de dados ou a capacidade de executar em outros pools de nós em seu cluster. Para minimizar a interrupção do reagendamento de pods atualmente em execução no pool de nós que você deseja excluir, execute um cordão e drene todos os nós no pool de nós antes de excluir.

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

    az aks nodepool delete --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --no-wait
    

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

Próximos passos

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