Nesta página, você terá uma visão geral dos taints de nós no Google Kubernetes Engine (GKE). Os taints de nó ajudam a especificar os nós em que as cargas de trabalho precisam ser executadas.
Os clusters do Autopilot são compatíveis com o uso de taints de nó somente para separação de cargas de trabalho. Para instruções, consulte Configurar a separação de cargas de trabalho no GKE.
Informações gerais
Quando você envia uma carga de trabalho para executar em um cluster, o programador determina onde colocar os pods associados à carga de trabalho. O programador é livre para colocar um pod em qualquer node que satisfaça os requisitos de recursos personalizados, de CPU e de memória do pod.
Se o cluster executa várias cargas de trabalho, convém exercer um controle sobre quais cargas de trabalho podem ser executadas em um pool de nós em particular.
Com um taint de node, você marca um node para que o programador evite ou impeça o uso dele em determinados pods. Com o recurso adicional tolerâncias, você designa pods que podem ser usados em nós com taint.
Os taints e as tolerâncias trabalham juntos para garantir que os pods não sejam programados em nós inadequados.
Os taints de node são pares de chave-valor associados a um efeito. A tabela a seguir lista os efeitos disponíveis:
Efeito | Descrição |
---|---|
NoSchedule |
Pods que não toleram esse taint não são programados no nó. Os pods atuais não são removidos do nó. |
PreferNoSchedule |
O Kubernetes evita a programação de pods que não toleram esse taint no nó. |
NoExecute |
O pod é removido do nó caso já esteja em execução nele e não é programado no nó caso ainda não esteja em execução nele. |
Vantagens de definir taints de nó no GKE
É possível adicionar taints de nó a clusters e nós no GKE ou usando
o comando
kubectl taint
. A especificação de taints de nó no GKE oferece muitas vantagens
em comparação a kubectl
:
- Os taints são preservados quando um nó é reiniciado ou substituído.
- Os taints são criados automaticamente quando um nó é adicionado a um pool de nós ou cluster.
- Os taints são criados automaticamente durante o escalonamento automático do cluster.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
Criar um cluster com taints de nó
Quando você cria um cluster no GKE, é possível atribuir taints de nó a ele. Isso atribui os taints a todos os nós criados com o cluster.
Se você criar um cluster Padrão com taints de nós que têm o efeito NoSchedule
ou NoExecute
, o GKE não poderá programar alguns componentes gerenciados pelo GKE, como kube-dns
ou metrics-server
, no pool de nós padrão que o GKE cria quando você cria o cluster. O GKE não pode programar esses componentes porque eles não têm as tolerâncias correspondentes para os taints de nós.
Você precisa adicionar um novo pool de nós que atende a uma destas condições:
- Sem taints
- Um taint com o efeito
PreferNoSchedule
- O taint
components.gke.io/gke-managed-components=:NoSchedule
Qualquer uma dessas condições permite que o GKE programe componentes gerenciados pelo GKE no novo pool de nós.
Para instruções, consulte Isolar cargas de trabalho em nós dedicados.
gcloud
Para criar um cluster com taints de nó, execute o comando a seguir:
gcloud container clusters create CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Substitua:
CLUSTER_NAME
: o nome do novo cluster;EFFECT
: um dos seguintes valores de efeito:PreferNoSchedule
,NoSchedule
ouNoExecute
;KEY=VALUE
: um par de chave-valor associado aoEFFECT
.
Por exemplo, o comando a seguir aplica um taint que tem valor-chave
dedicated=experimental
com efeito de PreferNoSchedule
:
gcloud container clusters create example-cluster \
--node-taints dedicated=experimental:PreferNoSchedule
Console
Para criar um cluster com taints de nó:
Acesse a página Google Kubernetes Engine no Console do Google Cloud.
Clique em add_box Criar.
Configure o cluster como quiser.
No painel de navegação, em Pools de nós, expanda o pool de nós que você quer modificar e clique em Metadados.
Na seção Taints de nó, clique em add Adicionar taint.
Na lista suspensa Efeito, selecione o efeito pretendido.
Insira o par de chave-valor pretendido nos campos Chave e Valor.
Clique em Criar.
API
Ao usar a API para criar um cluster, inclua o campo nodeTaints
em nodeConfig
. Veja um exemplo:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters
{
'cluster': {
'name': 'example-cluster',
'nodeConfig': {
'nodeTaints': [
{
'key': 'special',
'Value': 'gpu',
'effect': 'PreferNoSchedule'
}
]
...
}
...
}
}
Criar um pool de nós com taints de nó
Quando você aplica um taint a um nó, somente pods que toleram o taint podem ser executados no nó. Em um cluster do GKE, é possível aplicar um taint a um pool de nós, o que aplica o taint a todos os nós no pool.
Para criar um pool de nós com taints de nó, use a Google Cloud CLI, o console do Google Cloud ou a API GKE.
gcloud
Para criar um pool de nós com taints de nó, execute o comando a seguir:
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Substitua:
POOL_NAME
: o nome do pool de nós a ser criado;CLUSTER_NAME
: o nome do cluster em que o pool de nós será criado.EFFECT
: um dos seguintes valores de efeito:PreferNoSchedule
,NoSchedule
ouNoExecute
;KEY=VALUE
: um par de chave-valor associado aoEFFECT
.
Por exemplo, o comando a seguir cria um pool de nós em um cluster atual
e aplica um taint com um valor-chave dedicated=experimental
com um
efeito NoSchedule
:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Este comando cria um pool de nós e aplica um taint com chave-valor de
special=gpu
com um efeito NoExecute
:
gcloud container node-pools create example-pool-2 --cluster example-cluster \
--node-taints special=gpu:NoExecute
Console
Para criar um pool de nós com taints de nó, execute as seguintes etapas:
Acesse a página Google Kubernetes Engine no console do Google Cloud.
Na lista de clusters, clique no nome do cluster que você quer modificar.
Na página Detalhes do cluster, clique em add_box Adicionar pool de nós.
No painel de navegação, clique em Metadados.
Em Taints de nó, clique em add Adicionar taint.
Selecione o efeito desejado na lista suspensa Efeito.
Insira o par de chave-valor pretendido nos campos Chave e Valor.
Clique em Criar.
API
Ao usar a API para criar um pool de nós, inclua o campo nodeTaints
em nodeConfig
. Veja um exemplo:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_ID/nodePools
{
'nodePool': {
'name': 'example-pool',
'nodeConfig': {
'nodeTaints': [
{
'key': 'dedicated',
'Value': 'experimental',
'effect': 'NoSchedule'
}
]
...
}
...
}
}
Configurar pods para tolerar um taint
É possível configurar pods para tolerar um taint incluindo o campo tolerations
na especificação do pods. Veja a seguir uma parte de uma
especificação de pod.
Este pod pode ser programado em um nó que tenha o taint
dedicated=experimental:NoSchedule
:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
Como adicionar um taint a um nó atual
Adicione taints a um nó atual usando o
comando
kubectl taint
:
kubectl taint nodes NODE_NAME KEY=VALUE:EFFECT
Por exemplo, o comando a seguir aplica um taint com valor-chave
dedicated=experimental
com um efeito NoSchedule
ao nó mynode
:
kubectl taint nodes mynode dedicated=experimental:NoSchedule
Também é possível adicionar taints a nós que tenham um rótulo específico usando o
seletor -l
com o rótulo e o valor especificados:
kubectl taint nodes -l LABEL=LABEL_VALUE KEY=VALUE:EFFECT
Por exemplo, o comando a seguir adiciona um taint com chave dedicated-pool
aos nós do GKE no pool de nós my_pool
:
kubectl taint nodes -l cloud.google.com/gke-nodepool=my_pool dedicated-pool=my_pool:NoSchedule
Inspecionar taints para um nó
Para ver os taints de um nó, use a ferramenta de linha de comando kubectl
.
Para receber uma lista de todos os nós no cluster, execute o comando a seguir:
kubectl get nodes
Para inspecionar um nó, execute o comando a seguir:
kubectl describe node NODE_NAME
Na saída retornada, procure o campo
Taints
. A resposta será semelhante a:Taints: dedicated-pool=mypool:NoSchedule
Remover um taint de um nó
Use kubectl taint
para remover taints. É possível remover taints por chave, chave-valor ou chave-efeito.
Por exemplo, o comando a seguir remove todos os taints com a chave
dedicated
do nó mynode
:
kubectl taint nodes mynode dedicated-
Remover todos os taints de um pool de nós
Para remover todos os taints de um pool de nós, execute o comando a seguir:
gcloud beta container node-pools update POOL_NAME \
--node-taints="" \
--cluster=CLUSTER_NAME
Substitua:
POOL_NAME
: o nome do pool de nós que será alterado.CLUSTER_NAME
: o nome do cluster em que o pool de nós foi criado.
A seguir
- Saiba mais sobre pools de nós.
- Leia a documentação do Kubernetes sobre taints e tolerâncias (em inglês).
- Leia a documentação
kubectl taint
.