Partilhar via


Usar manchas de nó em um cluster do Serviço Kubernetes do Azure (AKS)

Este artigo descreve como usar manchas de nó em um cluster do Serviço Kubernetes do Azure (AKS).

Descrição geral

O mecanismo de agendamento AKS é responsável por colocar pods em nós e é baseado no agendador Kubernetes upstream, kube-scheduler. Você pode restringir um pod a ser executado em nós específicos anexando os pods a um conjunto de nós usando afinidade de nó ou instruindo o nó a repelir um conjunto de pods usando manchas de nó, que interagem com o agendador AKS.

As manchas de nó funcionam marcando um nó para que o agendador evite colocar certos pods nos nós marcados. Você pode colocar tolerações em um pod para permitir que o agendador programe esse pod em um nó com uma mancha correspondente. Manchas e tolerâncias trabalham juntas para ajudá-lo a controlar como o agendador coloca pods em nós. Para obter mais informações, consulte exemplos de casos de uso de manchas e tolerâncias.

Taints são pares chave-valor com um efeito. Há três valores para o campo de efeito ao usar manchas de nó: NoExecute, NoSchedulee PreferNoSchedule.

  • NoExecute: Os pods que já estão em execução no nó são imediatamente removidos se não tiverem uma tolerância correspondente. Se um pod tiver uma tolerância correspondente, ele pode ser removido se tolerationSeconds for especificado.
  • NoSchedule: Apenas pods com uma tolerância correspondente são colocados neste nó. Os pods existentes não são removidos.
  • PreferNoSchedule: O agendador evita colocar cápsulas que não tenham uma tolerância correspondente.

Opções de mancha de nó

Existem dois tipos de manchas de nó que podem ser aplicadas aos seus nós AKS: manchas de nó e manchas de inicialização de nó.

  • As manchas de nó destinam-se a permanecer permanentemente no nó para agendar pods com afinidade de nó. As manchas de nó só podem ser adicionadas, atualizadas ou removidas completamente usando a API AKS.
  • As manchas de inicialização do nó são colocadas no nó no momento da inicialização e devem ser usadas temporariamente, como em cenários em que você pode precisar de tempo extra para configurar os nós. Você pode remover a mancha de inicialização do nó usando a API do Kubernetes e não é garantido durante o ciclo de vida do nó. Eles aparecem somente depois que um nó é ampliado ou atualizado/recriado. Novos nós ainda têm a mancha de inicialização do nó após o dimensionamento. As manchas de inicialização do nó aparecem em todos os nós após a atualização. Se você quiser remover completamente as manchas de inicialização, poderá removê-las usando a API AKS depois de desmanchar os nós usando a API do Kubernetes. Depois de remover as manchas de inicialização da especificação do cluster usando a API do AKS, os nós recém-criados não apresentam essas manchas de inicialização. Se a mancha de inicialização ainda estiver presente nos nós existentes, você poderá removê-la permanentemente executando uma operação de atualização de imagem de nó.

Nota

As manchas e rótulos de nó aplicados usando a API do pool de nós AKS não são modificáveis a partir da API do Kubernetes e vice-versa. Não são permitidas modificações nas manchas do sistema.

Isso não se aplica a manchas de inicialização de nó.

Usar manchas de nó

Pré-requisitos

Este artigo pressupõe que você tenha um cluster AKS existente. Se precisar de um cluster AKS, você pode criar um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.

Criar um pool de nós com uma mancha de nó

  1. Crie um pool de nós com um taint usando o az aks nodepool add comando e use o --node-taints parâmetro para especificar sku=gpu:NoSchedule para o taint.

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-count 1 \
        --node-taints "sku=gpu:NoSchedule" \
        --no-wait
    
  2. Verifique o status do pool de nós.

  3. Verifique se a mancha está definida no nó.

Atualizar um pool de nós para adicionar uma mancha de nó

  1. Atualize um pool de nós para adicionar uma mancha de nó usando o az aks nodepool update comando e use o --node-taints parâmetro para especificar sku=gpu:NoSchedule a mancha.

    az aks nodepool update \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-taints "sku=gpu:NoSchedule" \
        --no-wait
    
  2. Verifique o status do pool de nós.

  3. Verifique se a mancha foi definida no nó.

Usar manchas de inicialização de nó (visualização)

Importante

Os recursos de visualização do AKS estão disponíveis em uma base de autosserviço e opt-in. 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 visualizações do AKS são parcialmente cobertas pelo suporte ao cliente com base no melhor esforço. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Pré-requisitos e limitações

  • Você precisa da versão 3.0.0b3 da CLI do Azure 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).
  • Você só pode aplicar manchas de inicialização via criação ou atualização de cluster ao usar a API AKS. Se estiver usando modelos ARM, você poderá especificar manchas de inicialização de nó durante a criação e atualização do pool de nós.
  • Não é possível aplicar manchas de inicialização a pools de nós do Windows usando a CLI do Azure.

Obter as credenciais para o cluster

  • Obtenha as credenciais para o seu cluster AKS usando o az aks get-credentials comando.

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

Instalar a extensão da CLI do aks-preview Azure

  • Registre ou atualize a extensão aks-preview usando o az extension add comando or az extension update .

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

Registrar o sinalizador de NodeInitializationTaintsPreview recurso

  1. Registre o NodeInitializationTaintsPreview sinalizador de recurso usando o az feature register comando.

    az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    

    Leva alguns minutos para que o status mostre Registrado.

  2. Verifique o status do registro usando o az feature show comando.

    az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    
  3. Quando o status refletir Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o az provider register comando.

    az provider register --namespace Microsoft.ContainerService
    

Criar um cluster com uma mancha de inicialização de nó

  1. Crie um cluster com uma mancha de inicialização de nó usando o az aks create comando e o --node-initialization-taints parâmetro a ser especificado sku=gpu:NoSchedule para a mancha.

    Importante

    As manchas de inicialização do nó especificadas aplicam-se a todos os pools de nós no cluster. Para aplicar a mancha de inicialização a um nó específico, você pode usar um modelo ARM em vez da CLI.

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --node-count 1 \
        --node-init-taints "sku=gpu:NoSchedule" \
        --generate-ssh-keys
    
  2. Verifique o status do pool de nós.

  3. Verifique se a mancha está definida no nó.

Atualizar um cluster para adicionar uma mancha de inicialização de nó

  1. Atualize um cluster para adicionar uma mancha de inicialização de nó usando o az aks update comando e o --node-initialization-taints parâmetro a ser especificado sku=gpu:NoSchedule para a mancha.

    Importante

    Ao atualizar um cluster com uma mancha de inicialização de nó, as manchas se aplicam a todos os pools de nós no cluster. Você pode exibir atualizações para manchas de inicialização do nó no nó após uma operação de reimagem.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints "sku=gpu:NoSchedule"
    
  2. Verifique o status do pool de nós.

  3. Verifique se a mancha está definida no nó.

Verificar o status do pool de nós

  • Depois de aplicar a mancha de nó ou a coloração de inicialização, verifique o status do pool de nós usando o az aks nodepool list comando.

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

    Se você aplicou manchas de nó, a saída de exemplo a seguir mostra que o <node-pool-name> pool de nós é Creating de nós com o especificado nodeTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

    Se você aplicou manchas de inicialização de nó, a saída de exemplo a seguir mostra que o <node-pool-name> pool de nós é Creating de nós com o especificado nodeInitializationTaints:

    [
      {
        ...
        "count": 1,
        ...
        "name": "<node-pool-name>",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeInitializationTaints":  [
          "sku=gpu:NoSchedule"
        ],
        ...
      },
     ...
    ]
    

Verifique se a mancha está definida no nó

  • Verifique as manchas de nó e as manchas de inicialização do nó na configuração do nó usando o kubectl describe node comando.

    kubectl describe node $NODE_NAME
    

    Se você aplicou manchas de nó, a saída de exemplo a seguir mostra que o <node-pool-name> pool de nós tem o especificado Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: sku=gpu:NoSchedule
        ...
        ],
        ...
     ...
    ]
    

Remover manchas de nó

Remover uma mancha de nó específica

  • Remova as manchas de nó usando o az aks nodepool update comando. O comando de exemplo a seguir remove a "sku=gpu:NoSchedule" mancha do nó do pool de nós.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --node-taints "sku=gpu:NoSchedule"
    

Remova todas as manchas de nó

  • Remova todas as manchas de nó de um pool de nós usando o az aks nodepool update comando. O comando de exemplo a seguir remove todas as manchas de nó do pool de nós.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $NODE_POOL_NAME \
    --node-taints ""
    

Remover manchas de inicialização de nó

Você tem as seguintes opções para remover manchas de inicialização do nó do nó:

  • Remova temporariamente as manchas de inicialização do nó usando a API do Kubernetes. Se você removê-los dessa forma, as manchas reaparecerão após o dimensionamento ou atualização do nó. Novos nós ainda têm a mancha de inicialização do nó após o dimensionamento. As manchas de inicialização do nó aparecem em todos os nós após a atualização.
  • Remova as manchas de inicialização do nó permanentemente desmantendo o nó usando a API do Kubernetes e, em seguida, removendo a mancha usando a API do AKS. Depois que as manchas de inicialização são removidas das especificações do cluster usando a API do AKS, os nós recém-criados após as operações de reimagem não têm mais manchas de inicialização.

Quando você remove todas as ocorrências de mancha de inicialização das réplicas do pool de nós, a mancha de inicialização existente pode reaparecer após uma atualização com quaisquer novas manchas de inicialização.

Remover temporariamente as manchas de inicialização do nó

  • Remova as manchas de inicialização do nó temporariamente usando o kubectl taint nodes comando.

    Este comando remove a mancha apenas do nó especificado. Se você quiser remover a mancha de cada nó no pool de nós, você precisa executar o comando para cada nó do qual deseja remover a mancha.

    kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
    

    Depois de removidas, as manchas de inicialização do nó reaparecem após a expansão ou atualização do nó.

Remover manchas de inicialização do nó permanentemente

  1. Siga as etapas em Remover manchas de inicialização do nó temporariamente para remover a mancha de inicialização do nó usando a API do Kubernetes.

  2. Remova a mancha do nó usando a API AKS usando o az aks update comando. Este comando remove a mancha de inicialização do nó de cada nó do cluster.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints ""
    

Verifique se a mancha foi removida do nó

  • Verifique as manchas de nó e as manchas de inicialização do nó na configuração do nó usando o kubectl describe node comando.

    kubectl describe node $NODE_NAME
    

    Se você removeu uma mancha de nó, a saída de exemplo a seguir mostra que o <node-pool-name> pool de nós não tem a mancha removida em Taints:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

Próximos passos