Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
Tintas de nó funcionam ao marcar um nó para que o agendador evite colocar certos pods nesses nós. 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 setolerationSecondsforem especificados. -
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 marcas de nó que podem ser aplicadas aos seus nós AKS: marcas de nó e marcas de inicialização de nó.
- As marcações de nó destinam-se a permanecer permanentemente no nó para programar pods com afinidade de nó. As manchas de nó só podem ser adicionadas, atualizadas ou removidas completamente usando a API AKS.
- As contaminações 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 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 eles não são garantidos durante o ciclo de vida do nó. Eles aparecerão em novas réplicas do nó quando ele for ampliado ou em todas as réplicas quando um nó for atualizado. 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
Os taints e rótulos aplicados aos nós 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 contaminações do sistema.
Isso não se aplica a manchas de inicialização de nó.
Usar tintes 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.
Crie um pool de nós com uma marcação de nó
Crie um pool de nós com uma marca (taint) usando o comando
az aks nodepool adde utilize o parâmetro--node-taintspara especificarsku=gpu:NoSchedulepara a marca.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
Atualizar um pool de nós para adicionar uma mancha de nó
Atualize um pool de nós para adicionar uma mancha de nó usando o
az aks nodepool updatecomando e use o--node-taintsparâmetro para especificarsku=gpu:NoSchedulea 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
Usar manchas de inicialização de nó (visualização)
Importante
Os recursos de pré-visualização do AKS estão disponíveis em base de autoatendimento e aderência 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 visualizações do AKS são parcialmente cobertas pelo suporte ao cliente numa base de 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 ter a versão
3.0.0b3ou posterior da CLI do Azure instalada e configurada. Executaraz --versionpara localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI). - Só pode aplicar taints de inicialização ao criar ou atualizar um cluster utilizando a API AKS. Se estiver a utilizar um modelo ARM que resulte numa operação ao nível de Cluster Gerenciado, pode especificar tolerâncias de inicialização de nó durante a criação e atualização do pool de nós. As operações no nível do Agentpool são bloqueadas quando
NodeInitializationTaintsestão presentes no corpo da solicitação. - Não é possível aplicar manchas de inicialização a pools de nós do Windows usando a CLI do Azure.
Obtenha as credenciais para o seu cluster
Obtenha as credenciais para o seu cluster AKS usando o
az aks get-credentialscomando.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Instalar a extensão da CLI do aks-preview Azure
Registe ou atualize a extensão aks-preview usando o comando
az extension addouaz extension update.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registar a flag de funcionalidade NodeInitializationTaintsPreview
Registe a flag de funcionalidade
NodeInitializationTaintsPreviewusando o comandoaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Leva alguns minutos para que o status mostre Registrado.
Verifique o status do registro usando o
az feature showcomando.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Quando o estado refletir Registrado, atualize o registo do provedor de recursos Microsoft.ContainerService usando o comando
az provider register.az provider register --namespace Microsoft.ContainerService
Criar um cluster com uma restrição de inicialização de nó
Crie um cluster com uma restrição de inicialização do nó usando o comando
az aks createe o parâmetro--node-initialization-taintspara especificarsku=gpu:NoSchedulepara a restrição.Importante
As marcações de inicialização dos nós especificadas aplicam-se a todos os pools de nós no agrupamento. 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
Atualizar um cluster para adicionar uma mancha de inicialização de nó
Atualize um cluster para adicionar uma tinta de inicialização de nó usando o comando
az aks updatee o parâmetro--node-initialization-taintspara especificarsku=gpu:NoSchedulepara a tinta.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. Se os nós estiverem usando o VMSS, você poderá exibir atualizações para as manchas de inicialização do nó no nó depois que o modelo VMSS do nó for atualizado (por exemplo, após uma operação de atualização da versão da imagem do nó). As manchas de inicialização não aparecerão em seus nós até que ocorra uma operação que acione uma atualização de modelo VMSS.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Verificar o status do pool de nós
Depois de aplicar a tintura de nó ou a tintura de inicialização, verifique o status do pool de nós usando o comando
az aks nodepool list.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAMESe você aplicou manchas de nó, a saída de exemplo a seguir mostra que o
<node-pool-name>pool de nós éCreatingde nós com o especificadonodeTaints:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]Se aplicou marcas de inicialização de nós, o exemplo de saída a seguir mostra que o
<node-pool-name>grupo de nós contémCreatingnós com o especificadonodeInitializationTaints.[ { ... "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 nodecomando.kubectl describe node $NODE_NAMESe aplicar tolerâncias de nó, a seguinte saída de exemplo mostra que o
<node-pool-name>conjunto de nós possui as especificaçõesTaints.[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Importante
Se os nós estiverem usando o VMSS, as manchas de inicialização do nó não serão visíveis nos nós reais do cluster até que ocorra uma operação que acione a atualização do modelo VMSS (por exemplo, atualização da versão do Kubernetes ou atualização da versão da imagem do nó).
Remover manchas de nó
Remover uma marcação específica de nó
Remova as manchas de nó usando o
az aks nodepool updatecomando. O comando de exemplo a seguir remove a tinta"sku=gpu:NoSchedule"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 contaminações de nó de um pool de nós usando o comando
az aks nodepool update. O seguinte comando de exemplo remove todas as marcas da 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 taints de inicialização 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 restrição de inicialização do nó após o dimensionamento. As perturbações de inicialização 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 nodescomando.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
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.
Remova a mancha do nó usando a API AKS usando o
az aks updatecomando. Este comando remove a tinta de inicialização de nós de todos os nós 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 nodecomando.kubectl describe node $NODE_NAMESe 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 emTaints:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Próximos passos
- Saiba mais sobre exemplos de casos de uso para taints e tolerations.
- Saiba mais sobre as práticas recomendadas para recursos avançados do agendador AKS.
- Saiba mais sobre rótulos do Kubernetes na documentação de rótulos do Kubernetes.