Nesta página, você terá uma visão geral dos taints de nós no Google Kubernetes Engine (GKE). Quando você programa a implantação de cargas de trabalho no cluster, os taints de nó o ajudam a controlar quais nós elas podem executar.
Visão geral
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 de node são pares de chave-valor associados a um efeito. Veja abaixo os efeitos disponíveis:
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.
Alguns pods do sistema (por exemplo, kube-proxy e fluentd) toleram todos os taints NoExecute
e NoSchedule
e não serão removidos.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Verifique se você ativou a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Verifique se o SDK do Cloud está instalado.
Defina as configurações padrão da gcloud
usando um dos métodos a seguir:
- Use
gcloud init
se quiser orientações para definir os padrões. - Use
gcloud config
para definir individualmente a região, a zona e o ID do projeto.
Como usar o gcloud init
Se você receber o erro One of [--zone, --region] must be supplied: Please specify
location
, conclua esta seção.
-
Execute
gcloud init
e siga as instruções:gcloud init
Se você estiver usando SSH em um servidor remoto, utilize a sinalização
--console-only
para impedir que o comando inicie um navegador:gcloud init --console-only
-
Siga as instruções para autorizar a
gcloud
a usar sua conta do Google Cloud. - Crie uma nova configuração ou selecione uma atual.
- Escolha um projeto do Google Cloud.
- Escolha uma zona padrão do Compute Engine.
Como usar o gcloud config
- Defina o ID do projeto padrão:
gcloud config set project PROJECT_ID
- Se você estiver trabalhando com clusters zonais, defina a zona do Compute padrão:
gcloud config set compute/zone COMPUTE_ZONE
- Se você estiver trabalhando com clusters regionais, defina a região do Compute padrão:
gcloud config set compute/region COMPUTE_REGION
- Atualize
gcloud
para a versão mais recente:gcloud components update
Como criar um cluster com taints de nó
Quando você cria um cluster, pode atribuir manchas de node a ele. Isso atribui os taints a todos os nós criados com o cluster.
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 cluster a ser criado;
- effect é
PreferNoSchedule
,NoSchedule
ouNoExecute
; - key e value formam um par de chave-valor associado a effect.
Por exemplo, o comando a seguir aplica um taint com chave dedicated
, valor experimental
e efeito PreferNoSchedule
:
gcloud container clusters create example-cluster \
--node-taints dedicated=experimental:PreferNoSchedule
Console
Para criar um cluster com taints de nó:
Acesse o menu do Google Kubernetes Engine no Console do 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'
}
]
...
}
...
}
}
Como criar um pool de nós com manchas de node
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 ferramenta de linha de comando gcloud
, o Console do 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 é
PreferNoSchedule
,NoSchedule
ouNoExecute
; - key e value formam um par de chave-valor associado a effect.
Por exemplo, o comando a seguir aplica um taint com chave dedicated
, valor experimental
e efeito NoSchedule
:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Este comando aplicar um taint com chave special
, valor gpu
e 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 o menu do Google Kubernetes Engine no Console do 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'
}
]
...
}
...
}
}
Como configurar pods para que tolerem 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:
kubectl taint nodes node1 key=value:NoSchedule
Também é possível fazer isso com um marcador específico:
kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule
Para saber mais, consulte Taints e tolerâncias na documentação do Kubernetes.
Como inspecionar os taints de 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 descrição do nó retornado, procure o campo
Taints
:Taints: key=value:effect
Como 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 do nó foo
todos os taints com a chave dedicated
:
kubectl taint nodes foo dedicated-
Vantagens de usar o recurso de taints de nó do GKE
Usar o recurso de taints de nó do GKE com clusters e pools de
nós em vez de definir taints manualmente usando kubectl
tem várias
vantagens:
- 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 ou cluster.
- Os taints são criados automaticamente durante o escalonamento automático do cluster.
Próximas etapas
- 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
.