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
, NoSchedule
e 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 setolerationSeconds
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ó
Crie um pool de nós com um taint usando o
az aks nodepool add
comando e use o--node-taints
parâmetro para especificarsku=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
Verifique o status do pool de nós.
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 update
comando e use o--node-taints
parâmetro para especificarsku=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
Verifique o status do pool de nós.
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. Executaraz --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 oraz 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
Registre o
NodeInitializationTaintsPreview
sinalizador de recurso usando oaz feature register
comando.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 show
comando.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
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ó
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 especificadosku=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
Verifique o status do pool de nós.
Atualizar um cluster para adicionar uma mancha de inicialização de nó
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 especificadosku=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"
Verifique o status do pool de nós.
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 especificadonodeTaints
:[ { ... "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 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 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 especificadoTaints
:[ ... 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
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 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 emTaints
:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Próximos passos
- Saiba mais sobre exemplos de casos de uso para manchas e tolerâncias.
- 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.
Azure Kubernetes Service