Skip to main content

Taints

Taints são um tipo especial de anotação em um Nó utilizado para repelir um conjunto de Pods, estabelecendo uma restrição de agendamento que atua de forma oposta aos seletores de Nodes tradicionais. Ele consiste em uma chave, um valor opcional e um efeito (NoSchedule, PreferNoSchedule ou NoExecute). Para que um Pod possa ser agendado em um Nó "tainted", ele deve possuir a Toleration correspondente, que é definida em sua especificação.

Na prática, os Taints são empregados para garantir a dedicação de recursos (isolando Nodes para uso exclusivo por cargas de trabalho específicas) ou para realizar o isolamento lógico baseado em hardware especializado (como GPUs) ou requisitos de licença, assegurando que os recursos críticos não sejam consumidos por aplicações genéricas.

info

Atualmente, a funcionalidade de Taints para Node Pools está disponível somente na CLI.

Funcionalidade somente disponível durante a criação de novos Node Pools. Não é possível alterar as Taints um Node Pool já criado.

No exemplo abaixo, vamos criar um Node Pool com uma Taint específica:

mgc kubernetes nodepool create \
--cluster-id <cluster-id> \
--name nodepool-web \
--flavor BV2-2-40 \
--replicas 1 \
--taints '[
{
"key": "web",
"value": "true",
"effect": "NoSchedule"
}
]'

Com acesso ao Cluster, você pode conferir os as Taints do Node:

kubectl get node \
-l cluster.x-k8s.io/nodepool-name=nodepool-web \
-o custom-columns=NAME:.metadata.name,ZONE:.spec.taints

Para que um Pod seja agendado no Node Pool, precisamos configurá-lo com uma Toleration à Taint especificada no campo .spec.tolerations:

apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- name: nginx
image: nginx:latest

tolerations:
- key: "web"
operator: "Equal"
value: "true"
effect: "NoSchedule"