Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como usar os taints de nó em um cluster do AKS (Serviço de Kubernetes do Azure).
Visão geral
O mecanismo de agendamento do AKS é responsável por colocar pods em nós e se baseia no agendador upstream do Kubernetes, 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 a afinidade de nó ou instruindo o nó a repelir um conjunto de pods usando taints de nós, que interagem com o agendador do AKS.
Os taints de nó funcionam marcando um nó para que o agendador evite colocar determinados pods nos nós marcados. Você pode colocar tolerâncias em um pod para permitir que o agendador agende esse pod em um nó com um taint correspondente. Os taints e as tolerâncias funcionam juntos para ajudá-lo a controlar como o agendador coloca pods em nós. Para obter mais informações, consulte exemplo de casos de uso de taints e tolerâncias.
Os taints são pares chave-valor com um efeito. Há três valores para o campo de efeito ao usar taints de nó: NoExecute, NoSchedule e PreferNoSchedule.
-
NoExecute: os pods já em execução no nó serão removidos imediatamente se não tiverem uma tolerância correspondente. Se um pod tiver uma tolerância correspondente, ele poderá ser removido setolerationSecondsforem especificados. -
NoSchedule: somente pods com tolerância correspondente são colocados neste nó. Pods existentes não são removidos. -
PreferNoSchedule: o agendador evita colocar pods que não tenham tolerância correspondente.
Opções de taint de nó
Há dois tipos de taints de nó que podem ser aplicados aos nós do AKS: taints de nó e taint de inicialização de nó.
- Os taints de nó devem ficar permanentemente no nó para agendar pods com afinidade de nó. Os taints de nó só podem ser adicionados, atualizados ou removidos completamente usando a API do AKS.
- Os taint de inicialização de nó são colocadas no nó no momento da inicialização e devem ser usados temporariamente, como em cenários em que talvez seja necessário tempo extra para configurar seus nós. É possível remover o taint 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 houver aumento de escala ou em todas as réplicas quando um nó for atualizado. Se você quiser remover completamente os taints de inicialização, poderá removê-los usando a API do AKS depois de desvincular os nós usando a API do Kubernetes. Depois de remover os taints de inicialização da especificação de cluster usando a API do AKS, os nós recém-criados não aparecerão com esses taints de inicialização. Se o taint de inicialização ainda estiver presente em nós existentes, você poderá removê-lo permanentemente executando uma operação de atualização de imagem de nó.
Observação
Os nós e os rótulos aplicados usando a API do pool de nós do AKS não são modificáveis da API do Kubernetes e vice-versa. Modificações em taints do sistema não são permitidas.
Isso não se aplica a contaminações de inicialização de nó.
Usar taints de nó
Pré-requisitos
Este artigo considera que você tenha um cluster do AKS. Se você precisar de um cluster do AKS, crie um usando a CLI do Azure, o Azure PowerShell ou o portal do Azure.
Criar um pool de nós com um taint de nó
Crie um pool de nós com um taint usando o comando
az aks nodepool adde use o parâmetro--node-taintspara especificarsku=gpu:NoSchedulepara 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
Atualizar um pool de nós para adicionar um taint de nó
Atualize um pool de nós para adicionar um taint de nó usando o comando
az aks nodepool updatee use o parâmetro--node-taintspara especificarsku=gpu:NoSchedulepara o taint.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 taints de inicialização de nó (versão prévia)
Importante
As versões prévias de recursos do AKS estão disponíveis em uma base de autoatendimento e aceitação. As versõ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 prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Pré-requisitos e limitações
- Será necessária a CLI do Azure versão
3.0.0b3ou posterior instalada e configurada. Executeaz --versionpara encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure. - Você só pode aplicar os taints de inicialização por meio da criação ou atualização do cluster ao usar a API do AKS. Se usar um modelo do ARM que resultará em uma operação de nível de Cluster Gerenciado, você poderá especificar manchas de inicialização do nó durante a criação e atualização do pool de nós. As operações de nível de agentpool são bloqueadas quando
NodeInitializationTaintsestão presentes no corpo da solicitação. - Você não pode aplicar os taints de inicialização aos pools de nós do Windows usando a CLI do Azure.
Obter as credenciais para o cluster
Obtenha as credenciais do cluster do AKS usando o comando
az aks get-credentials.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Instale a extensão aks-preview da CLI do Azure
Registre 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
Registrar o sinalizador de recurso NodeInitializationTaintsPreview
Registre o sinalizador de recurso
NodeInitializationTaintsPreviewusando o comandoaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Demora alguns minutos para o status exibir Registrado.
Verifique o status do registro usando o comando
az feature show.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Quando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando
az provider register.az provider register --namespace Microsoft.ContainerService
Criar um cluster com um taint de inicialização de nó
Crie um cluster com um taint de inicialização de nó usando o comando
az aks createe o parâmetro--node-initialization-taintspara especificarsku=gpu:NoSchedulepara o taint.Importante
A inicialização do nó que você especifica se aplica a todos os pools de nós no cluster. Para aplicar o taint de inicialização a um nó específico, você pode usar um modelo do 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 um taint de inicialização de nó
Atualize um cluster para adicionar um taint de inicialização de nó usando o comando
az aks updatee o parâmetro--node-initialization-taintspara especificarsku=gpu:NoSchedulepara o taint.Importante
Ao atualizar um cluster com um taint de inicialização de nó, os taints se aplicam a todos os pools de nós no cluster. Se seus nós estiverem usando VMSS, é possível exibir as atualizações dos taints de inicialização do nó após a atualização do modelo de VMSS do nó (por exemplo, após uma operação de atualização da versão da imagem do nó). Os taints de inicialização não aparecerão em seus nós até que ocorra uma operação que acione uma atualização do modelo de 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 o taint de nó ou o taint 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 os taints de nó, a saída de exemplo a seguir mostra que o pool de nós
<node-pool-name>éCreatingnós com onodeTaintsespecificado:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]Se você aplicou os taints de inicialização de nó, a saída de exemplo a seguir mostra que o pool de nós
<node-pool-name>éCreatingnós com onodeInitializationTaintsespecificado:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Verificar se o taint está definido no nó
Verifique os taints do nó e os taints de inicialização de nó na configuração do nó usando o comando
kubectl describe node.kubectl describe node $NODE_NAMESe você aplicou os taints de nó, a saída de exemplo a seguir mostra que o pool de nós
<node-pool-name>especificou oTaints:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Importante
Se seus nós estiverem usando VMSS, os taints de inicialização do nó não ficarão visíveis nos nós reais do cluster até que ocorra uma operação que dispare a atualização do modelo de VMSS (por exemplo, atualização da versão do Kubernetes ou da imagem do nó).
Remover taints de nó
Remover um taint de nó específico
Remova os taints de nó usando o comando
az aks nodepool update. O comando de exemplo a seguir remove o taint de nó"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"
Remover todos os taints de nó
Remova todos os taints de nó de um pool de nós usando o comando
az aks nodepool update. O comando de exemplo a seguir remove todos os taints 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 taints de inicialização de nó
Você tem as seguintes opções para remover os taints de inicialização do nó:
- Remover os taints de inicialização de nó temporariamente usando a API do Kubernetes. Se você removê-los dessa forma, os taints reaparecerão após a colocação em escala ou a atualização do nó ocorrer. Os novos nós ainda têm o taint de inicialização de nó após o dimensionamento. Os taints de inicialização de nó aparecem em todos os nós após a atualização.
- Remover os taints de inicialização de nó permanentemente desvinculando o nó usando a API do Kubernetes e removendo o taint usando a API do AKS. Depois que os taints de inicialização são removidos da especificação de cluster usando a API do AKS, os nós recém-criados após as operações de nova imagem não têm mais taints de inicialização.
Quando você remove todas as ocorrências de contaminação de inicialização de réplicas do pool de nós, o taint de inicialização existente pode reaparecer após uma atualização com quaisquer novas contaminações de inicialização.
Remover os taints de inicialização de nó temporariamente
Remova os taints de inicialização de nó temporariamente usando o comando
kubectl taint nodes.Esse comando só remove o taint do nó especificado. Se você quiser remover o taint de cada nó no pool de nós, será necessário executar o comando para cada nó do qual deseja remover o taint.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-Após a remoção, os taints de inicialização de nó reaparecem após a colocação em escala ou a atualização do nó.
Remover os taints de inicialização de nó permanentemente
Siga as etapas em Remover taints de inicialização do nó temporariamente para remover o taint de inicialização do nó usando a API do Kubernetes.
Remova o taint do nó usando a API do AKS usando o comando
az aks update. Esse comando remove o taint de inicialização de nó de cada nó no cluster.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Verifique se o taint foi removido do nó
Verifique os taints do nó e os taints de inicialização de nó na configuração do nó usando o comando
kubectl describe node.kubectl describe node $NODE_NAMESe você removeu um taint do nó, a saída de exemplo a seguir mostra que o pool de nós
<node-pool-name>não tem o taint removido emTaints:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Próximas etapas
- Saiba mais sobre casos de uso de exemplo para taints e tolerâncias.
- Saiba mais sobre práticas recomendadas para recursos avançados do agendador do AKS.
- Saiba mais sobre os rótulos do Kubernetes na Documentação de rótulos do Kubernetes.