Usar pools de nós de Máquinas Virtuais no Azure Kubernetes Service (AKS)

Neste artigo, você aprenderá sobre o novo tipo de pool de nós de Máquinas Virtuais para AKS.

Nos pools de nós de Máquinas Virtuais, o AKS gere diretamente o provisionamento e a configuração de cada nó. Para pools de nós de Conjuntos de Dimensionamento de Máquinas Virtuais, o AKS gere o modelo dos Conjuntos de Dimensionamento de Máquinas Virtuais e usa-o para garantir a consistência entre todos os nós do conjunto. Os pools de nós de Máquinas Virtuais permitem orquestrar seu cluster com máquinas virtuais que melhor se ajustam às suas cargas de trabalho individuais.

Ao utilizar pools de nós de máquinas virtuais, o AKS gere diretamente o provisionamento e o arranque de cada nó. Para conjuntos de nós baseados em conjuntos de dimensionamento de máquinas virtuais, o AKS gere o modelo dos conjuntos de dimensionamento de máquinas virtuais e utiliza-o para garantir a consistência em todos os nós do conjunto de nós. Os pools de nós de máquinas virtuais permitem-lhe orquestrar o seu cluster com máquinas virtuais que melhor se adequam às suas cargas de trabalho individuais.

Descrição geral do conjunto de nós de máquinas virtuais

Como funciona

Um pool de nós consiste num conjunto de máquinas virtuais (VMs), onde diferentes tamanhos de máquinas virtuais suportam diferentes tipos de cargas de trabalho. Esses tamanhos de máquina virtual, conhecidos como SKUs, são categorizados em diferentes famílias que são otimizadas para fins específicos. Para mais informações, consulte a documentação dos SKUs VM. Ao usar conjuntos de nós de máquinas virtuais, pode efetuar dimensionamento manual multi-SKU e dimensionamento automático multi-SKU.

Para habilitar o dimensionamento de vários tamanhos de máquina virtual, o tipo de pool de nós Máquinas Virtuais usa um ScaleProfile que contém configurações que indicam como o pool de nós pode ser dimensionado, especificamente a lista desejada de tamanho de máquina virtual e a contagem de cada tamanho. A ManualScaleProfile é um perfil de dimensionamento que especifica o tamanho desejado de uma máquina virtual, bem como a contagem total desse tipo na pool de nós. Apenas um tamanho de máquina virtual é permitido num ManualScaleProfile. Você precisa criar um separado ManualScaleProfile para cada tamanho de máquina virtual no seu pool de nós. Ao criar um novo pool de nós de Máquinas Virtuais, adiciona-se um perfil manual inicial de escala para o tamanho de uma máquina virtual usando o campo vm-size e incluindo o node-count. Também pode adicionar mais perfis de escala manual seguindo as instruções para adicionar perfis de escala manual.

Para permitir a escalabilidade de múltiplos tamanhos de máquinas virtuais, o tipo de pool de nós de máquinas virtuais utiliza um ScaleProfile que contém configurações indicando como o pool de nós pode escalar, especificamente a lista desejada do tamanho das máquinas virtuais e a contagem de cada tamanho. A ManualScaleProfile é um perfil de dimensionamento que especifica o tamanho desejado de uma máquina virtual, bem como a contagem total desse tipo na pool de nós. A ManualScaleProfile suporta apenas um tamanho de máquina virtual. Você precisa criar um separado ManualScaleProfile para cada tamanho de máquina virtual no seu pool de nós. Ao criar um novo conjunto de nós de máquinas virtuais, adicione um perfil inicial de dimensionamento manual para um tamanho de máquina virtual, utilizando o campo vm-size e incluindo um node-count. Também pode adicionar mais perfis manuais de escala seguindo as instruções para adicionar perfis manuais de escala.

Os pools de nós de máquinas virtuais também suportam o modo Auto, o que significa que o pool de nós pode usar o dimensionamento automático do cluster. Um pool de nós de máquinas virtuais suporta até um total de cinco perfis de escalabilidade nos modos manual e de escalabilidade automática. Cada perfil especifica um SKU de VM da mesma família. Cada AutoScaleProfile pode ter o seu próprio número mínimo e máximo de nós no conjunto de nós.

Nota

Ao criar um novo pool de nós de Máquinas Virtuais, pode ter vários perfis de dimensionamento e precisa de ter pelo menos um perfil de dimensionamento manual ou automático no pool de nós.

Vantagens dos conjuntos de nós de máquinas virtuais

As vantagens do tipo de pool de nós de Máquinas Virtuais incluem:

  • Flexibilidade: As especificações do nó podem ser atualizadas para se adaptarem à sua carga de trabalho e necessidades atuais.
  • Controlo afinado: Os controlos de nível de nó individual permitem especificar e misturar nós de diferentes especificações para aliviar restrições de um único modelo e melhorar a consistência.
  • Eficiência: Pode reduzir a pegada dos nós do seu cluster, simplificando os requisitos operacionais.

Os conjuntos de nós de máquinas virtuais suportam até cinco perfis de dimensionamento por conjunto de nós, pelo que as cargas de trabalho podem utilizar vários SKUs de VM da mesma família sem exigirem um conjunto de nós separado para cada SKU.

Comparar as opções de dimensionamento da computação no AKS

A tabela a seguir destaca como os pools de nós de Máquinas Virtuais se comparam aos pools de nós de Conjunto de Escala padrão.

Tipo de conjunto de nós Capacidades de escalabilidade e gestão de nós
Pool de nós de máquinas virtuais Você pode adicionar, remover ou atualizar nós em um pool de nós. Os tipos de máquinas virtuais podem ser qualquer máquina virtual do mesmo tipo de família (por exemplo, série D, série A, e assim sucessivamente). Os pools de nós Máquinas Virtuais também permitem o processo manual e auto-escalonamento em múltiplas versões.
Pool de nós baseado no conjunto de escalabilidade de máquina virtual Você pode adicionar ou remover nós do mesmo tamanho e digitar um pool de nós. Se for adicionado um novo tamanho de máquina virtual ao cluster, é necessário criar um novo grupo de nós.

Que experiência de escalabilidade computacional devo escolher no AKS?

Dependendo das suas necessidades de carga de trabalho, existem várias experiências de escalabilidade computacional a considerar. Veja os casos de uso de cada um:

  • Aprovisionamento automático de nós: melhor para dimensionamento automático multiversões e uma seleção mais inteligente e flexível de versões de VM (incluindo múltiplas famílias de versões).
  • Conjuntos de nós de Máquinas Virtuais: mais adequados para dimensionamento manual multiversão e suportam dimensionamento automático multiversão. Requer seleção específica de versões de até cinco tamanhos por pool de nós.
  • Conjuntos de Dimensionamento de Máquinas Virtuais: suporta dimensionamento manual de versão única e dimensionamento automático de versão única. Requer a seleção de uma versão específica de um tamanho para cada pool de nós.

Limitações do conjunto de nós de Máquinas Virtuais

  • Os tamanhos das VMs especificados no pool devem ser do mesmo tipo. Por exemplo, máquinas virtuais com GPU e sem GPU ou x86 e ARM64 não podem estar no mesmo node pool.
  • InifiniBand não está disponível.
  • O instantâneo do pool de nós não é suportado.
  • Todos os tamanhos de VM selecionados num pool de nós precisam ser de uma família de máquinas virtuais similar. Por exemplo, não é possível misturar um tipo de máquina virtual da série N com um tipo de máquina virtual da série D no mesmo pool de nós.
  • Tens de selecionar todos os tamanhos de VM num pool de nós que suportem a mesma posição efémera nos discos do sistema operativo quando usas discos efémeros do sistema operativo. Como DiffDiskPlacement é um único valor ao nível do pool, o AKS não pode expressar diferentes colocações por tamanho de VM num único pool de nós.
  • Os grupos de nós de Máquinas Virtuais permitem um máximo total de cinco perfis de escalabilidade por grupo de nós. Cada perfil manual ou de dimensionamento automático especifica um tamanho de VM da mesma família de VMs.
  • Os agrupamentos de nós do Windows não são suportados.
  • As zonas de disponibilidade não são suportadas. Se a sua carga de trabalho exigir resiliência entre zonas, utilize conjuntos de nós Conjuntos de Dimensionamento de Máquinas Virtuais.

Compatibilidade com o posicionamento do disco efémero do sistema operativo

Ao adicionar um perfil de dimensionamento que mistura tamanhos de VM com diferentes localizações do disco efémero do SO, a operação de criação ou atualização falha com o erro InvalidParameter e o subcódigo EphemeralOSMixedPlacementNotSupported.

Use uma das seguintes opções de remediação:

  • Use tamanhos de VM que partilhem a mesma posição efémera dos discos do sistema operativo.
  • Divida os tamanhos das VMs em pools de nós separados para que cada pool tenha uma única posição.
  • Use discos de SO geridos em vez de discos efémeros do sistema operativo.

Determine o posicionamento antes de adicionar um perfil de escala

Antes de adicionar o tamanho de uma VM a um pool de nós do Máquinas Virtuais, verifique as capacidades do SKU na região de destino e verifique a compatibilidade com a colocação do disco do sistema operativo efémero.

  1. Liste os tamanhos das VMs candidatas e inspecione as capacidades-chave:

    az vm list-skus \
        --location <region> \
        --size Standard_D \
        --resource-type virtualMachines \
        --query "[].{name:name, capabilities:capabilities[?name=='EphemeralOSDiskSupported' || name=='MaxResourceVolumeMB' || name=='NvmeDiskSizeInMiB']}" \
        --output json
    
  2. Confirme que cada tamanho de VM selecionado suporta discos efémeros do sistema operativo (EphemeralOSDiskSupported) e identifique onde o disco local está disponível (MaxResourceVolumeMB para disco temporário/recurso e NvmeDiskSizeInMiB para NVMe).

  3. Agrupar os tamanhos das VMs para que cada pool de nós de Máquinas Virtuais utilize um único posicionamento compatível.

Por exemplo, se um perfil usa Standard_D4ds_v5 (colocação temporária/de disco de recursos) e outro perfil usa Standard_D4ads_v6 (colocação NVMe), mantenha-os em pools de nós separados ou use discos de sistema operativo geridos.

Importante

Validação prévia e simulação Atualmente, não existe nenhuma API dedicada de validação prévia que valide, antes da implementação, a colocação mista de discos efémeros do sistema operativo nos vários perfis de dimensionamento. az deployment group what-if (ARM what-if) não garante a deteção deste conflito de compatibilidade entre nós e pool. A validação autoritativa ocorre quando o AKS processa o pedido de criação ou de atualização e devolve EphemeralOSMixedPlacementNotSupported se os posicionamentos forem incompatíveis.

Pré-requisitos

  • Uma subscrição do Azure. Se não tiver uma, poderá criar uma conta gratuita.
  • CLI do Azure versão 2.85.0 ou posterior instalada e configurada. Para localizar a versão, execute az --version. Para mais informações sobre a instalação ou atualização do CLI do Azure, consulte Install CLI do Azure.
  • Esta funcionalidade requer Kubernetes versão 1.27 ou superior. Para atualizar a sua versão Kubernetes, veja Atualizar o cluster AKS.

Importante

Requisito de rede virtual personalizada: Se implementar um pool de nós de Máquinas Virtuais numa rede virtual personalizada, o cluster deve usar uma identidade gerida atribuída pelo utilizador com pelo menos permissões de Network Contributor na sub-rede alvo. Ao contrário dos pools de nós do Conjunto de Escala de Máquinas Virtuais, os pools de nós de Máquinas Virtuais dependem exclusivamente da identidade do cluster para operações de junção de sub-redes e não utilizam tokens de primeira mão. Clusters que utilizam uma identidade gerida atribuída pelo sistema falham na pré-validação ao criar ou atualizar um pool de nós de Máquinas Virtuais numa rede virtual personalizada, resultando num erro InvalidParameter. Para mais informações sobre como configurar uma identidade gerida atribuída pelo utilizador para o seu cluster, consulte Usar uma identidade gerida no AKS.

Criar um cluster AKS com pools de nodos das Máquinas Virtuais

Nota

Apenas um tamanho de VM é permitido em um perfil de escala, e o limite máximo é de cinco perfis de escala de VM em geral para um pool de nós de Máquinas Virtuais.

Crie um cluster AKS com pools de nós de máquinas virtuais usando o comando az aks create com o sinalizador --vm-set-type definido como "VirtualMachines".

O exemplo seguinte cria um cluster chamado myAKSCluster com um pool de nós Máquinas Virtuais contendo dois nós:

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type "VirtualMachines" \
    --vm-sizes "Standard_D4s_v3" \
    --node-count 2

Crie um cluster AKS com pools de nós de Máquinas Virtuais numa rede virtual personalizada

Quando implementar conjuntos de nós de Máquinas Virtuais numa rede virtual personalizada, deve criar uma identidade gerida atribuída pelo utilizador e conceder-lhe permissões da função Network Contributor na sub-rede de destino antes de criar o cluster.

  1. Crie uma rede virtual e uma sub-rede.

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --address-prefixes 10.1.0.0/16 \
        --subnet-name mySubnet \
        --subnet-prefix 10.1.0.0/24
    
  2. Obtenha o ID do recurso da sub-rede.

    SUBNET_ID=$(az network vnet subnet show \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name mySubnet \
        --query id \
        --output tsv)
    
  3. Crie uma identidade gerenciada atribuída pelo usuário.

    az identity create \
        --name myAKSIdentity \
        --resource-group myResourceGroup
    
  4. Obtenha o ID principal e o ID de recurso da identidade gerida.

    IDENTITY_PRINCIPAL_ID=$(az identity show \
        --name myAKSIdentity \
        --resource-group myResourceGroup \
        --query principalId \
        --output tsv)
    
    IDENTITY_RESOURCE_ID=$(az identity show \
        --name myAKSIdentity \
        --resource-group myResourceGroup \
        --query id \
        --output tsv)
    
  5. Atribuir a função Network Contributor à identidade gerida na sub-rede de destino.

    az role assignment create \
        --assignee $IDENTITY_PRINCIPAL_ID \
        --role "Network Contributor" \
        --scope $SUBNET_ID
    

    Pode demorar até 60 minutos para que sejam propagadas as permissões concedidas à identidade gerida do seu cluster.

  6. Verifica se a atribuição de funções existe na sub-rede de destino antes de criares o cluster.

    az role assignment list \
        --assignee $IDENTITY_PRINCIPAL_ID \
        --role "Network Contributor" \
        --scope $SUBNET_ID \
        --query "[].{Role:roleDefinitionName, Scope:scope}" \
        --output table
    

    Continue quando o resultado mostrar a função Network Contributor ao nível da sub-rede de destino.

  7. Crie o cluster AKS com pools de nós de máquinas virtuais na sua rede virtual personalizada.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --vm-set-type "VirtualMachines" \
        --vm-sizes "Standard_D4s_v3" \
        --node-count 2 \
        --vnet-subnet-id $SUBNET_ID \
        --assign-identity $IDENTITY_RESOURCE_ID
    

Adicionar um pool de nós de Máquinas Virtuais a um cluster existente

Adicione um pool de Máquinas Virtuais a um cluster existente usando o comando az aks nodepool add com o parâmetro --vm-set-type definido para "VirtualMachines".

O exemplo a seguir adiciona um pool de nós de Máquinas Virtuais chamado myvmpool ao cluster myAKSCluster . O pool de nós cria um ManualScaleProfile com --vm-sizes configurado para Standard_D4s_v3 e um --node-count de 3:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --vm-set-type "VirtualMachines" \
    --vm-sizes "Standard_D4s_v3" \
    --node-count 3

Adicionar um perfil de escala manual a um pool de nós

Adicione um perfil de escala manual a um pool de nós usando o az aks nodepool manual-scale add com a flag --vm-sizes definida como "Standard_D2s_v3" e o node-count definido como 2.

O exemplo a seguir adiciona um perfil de escala manual ao agrupamento de nós myvmpool no cluster myAKSCluster. O pool de nós inclui dois nós com um SKU VM de Standard_D2s_v3:

az aks nodepool manual-scale add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --vm-sizes "Standard_D2s_v3" \
    --node-count 2

Atualizar um perfil de escala manual existente

Atualize um perfil de escala manual existente em um agrupamento de nós usando o comando az aks nodepool manual-scale update com a flag --vm-sizes definida como "Standard_D2s_v3".

Nota

Use o --current-vm-sizes parâmetro para especificar o tamanho do pool de nós existente que você deseja atualizar. Você pode atualizar --vm-sizes e/ou --node-count. Ao usar outras ferramentas ou APIs REST, é necessário passar o campo completo agentPoolProfiles.virtualMachinesProfile.scale ao atualizar o perfil de escala do pool de nós.

O exemplo a seguir atualiza um perfil manual de escala do myvmpool pool de nós no myAKSCluster cluster. O comando atualiza o número de nós para cinco e altera o SKU da VM de Standard_D4s_v3 para Standard_D8s_v3:

az aks nodepool manual-scale update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --current-vm-sizes "Standard_D4s_v3" \
    --vm-sizes "Standard_D8s_v3" \
    --node-count 5

Excluir um perfil de escala manual

Exclua um perfil de escala manual existente usando o az aks nodepool manual-scale delete comando.

Nota

O --current-vm-sizes parâmetro especifica o tamanho do pool de nós existente a ser excluído. Ao usar outras ferramentas ou APIs REST para atualizar o perfil de escala do pool de nós, insira um campo completo agentPoolProfiles.virtualMachinesProfile.scale.

O exemplo seguinte elimina o perfil manual de escala para o Standard_D8s_v3 SKU de VM no grupo de nós denominados myvmpool.

az aks nodepool manual-scale delete \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --current-vm-sizes "Standard_D8s_v3"

Dimensionamento automático do cluster com conjuntos de nós de Máquinas Virtuais (pré-visualização)

Os pools de nós de máquinas virtuais suportam o autoscaler de clusters. Esta funcionalidade de pré-visualização requer a versão 2.85.0 ou posterior do CLI do Azure, a aks-preview extensão e o registo do VMsAgentPoolAutoscalePreview flag de funcionalidade. Depois de cumprires estes pré-requisitos, podes usar --enable-cluster-autoscaler durante a criação do cluster, ao adicionar um novo pool de nós ou ao atualizar um pool de nós manual existente.

Quando usa o autoscaler de cluster com pools de nós Máquinas Virtuais, o comportamento é o seguinte:

Ação do autoescalador Comportamento
Expandir O autoescalador responde à pressão pendente do pod e pode aumentar o número de nós para múltiplos tamanhos de VM no pool de nós.
Reduzir a escala O dimensionador automático seleciona um nó com base no nível de utilização. Podes configurar scale-down-utilization-threshold para ajustar quando o autoescalador aciona uma ação de redução de escala. Para mais informações, consulte cluster autoscaler.

Limitações

  • Esta funcionalidade está disponível apenas em cloud pública.
  • Atualmente, os Nós da GPU não são suportados.
  • Esta funcionalidade requer a versão 2.85.0 ou posterior do CLI do Azure e a aks-preview extensão.

Instale a extensão aks-preview

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

    # Install the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview

Indicador de funcionalidade de registo

Registe a bandeira VMsAgentPoolAutoscalePreview de funcionalidade de pré-visualização usando o az feature register comando:

az feature register \
    --namespace Microsoft.ContainerService \
    --name VMsAgentPoolAutoscalePreview

Demora alguns minutos até o estado se tornar Registered. Verifique o status do registro usando o az feature show comando:

az feature show \
    --namespace Microsoft.ContainerService \
    --name VMsAgentPoolAutoscalePreview \
    --query properties.state \
    --output tsv

Quando o estado é Registered, atualize o registo do Microsoft.ContainerService fornecedor de recursos usando o az provider register comando:

az provider register --namespace Microsoft.ContainerService

Crie um cluster AKS com conjuntos de nós de máquinas virtuais e dimensionamento automático do cluster ativados

  • Crie um cluster AKS com pools de nós de Máquinas Virtuais usando o comando az aks create com o parâmetro --vm-set-type definido para "VirtualMachines" e com o parâmetro --enable-cluster-autoscaler.

O exemplo seguinte cria um cluster chamado myAKSCluster com um pool de nós Máquinas Virtuais que utiliza o tamanho Standard_D4s_v3do nó , um número mínimo de nós de 2 e um número máximo de nós de 5:

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type "VirtualMachines" \
    --node-vm-size "Standard_D4s_v3" \
    --enable-cluster-autoscaler \
    --min-count 2 \
    --max-count 5

Adicionar um pool de nós de Máquinas Virtuais com autoescalador de cluster ativado a um cluster existente

  • Crie um pool de nós de Máquinas Virtuais usando o comando az aks nodepool add com o parâmetro --vm-set-type definido em "VirtualMachines" e com o parâmetro --enable-cluster-autoscaler.

O exemplo seguinte adiciona o pool de nós de Máquinas Virtuais myvmpool com escalador automático ativado num cluster chamado myAKSCluster, usando o tamanho da máquina virtual "Standard_D4s_v3", com um mínimo de 2 nós e máximo de 5:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --vm-set-type "VirtualMachines" \
    --node-vm-size "Standard_D4s_v3" \
    --enable-cluster-autoscaler \
    --min-count 2 \
    --max-count 5

Atualizar as definições de dimensionamento automático do cluster para um pool de nós de Máquinas Virtuais

O exemplo seguinte atualiza as configurações para o pool de nós de Máquinas Virtuais myvmpool num cluster chamado myAKSCluster, usando o tamanho da máquina virtual "Standard_D4s_v3":

az aks nodepool auto-scale update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --current-node-vm-size "Standard_D4s_v3" \
    --min-count 3 \
    --max-count 7

Alterar os perfis de escalamento do conjunto de nós das Máquinas Virtuais do modo manual para o modo de escalamento automático

O exemplo seguinte atualiza o conjunto de nós de Máquinas Virtuais myvmpool no cluster com o nome myAKSCluster, convertendo todos os perfis de dimensionamento manual em perfis de dimensionamento automático com o mesmo número mínimo e máximo de nós:

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --enable-cluster-autoscaler \
    --min-count 2 \
    --max-count 5

Desativar o autoescalador de cluster num pool de nós das Máquinas Virtuais

Pode desativar o dimensionamento automático do cluster ou mudar todos os perfis de escala num conjunto de nós de máquina virtual do modo Auto para o modo Manual.

O exemplo seguinte desativa o autoscaler do cluster para o pool de nós Máquinas Virtuais myvmpool no cluster chamado myAKSCluster. Altera todos os perfis de escala do modo Auto para o modo Manual:

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name myvmpool \
    --disable-cluster-autoscaler

Próximos passos

Neste artigo, aprendeste como usar conjuntos de nós de Máquinas Virtuais no AKS. Para saber mais sobre pools de nós no AKS, consulte Criar pools de nós.