Kubernetes 101: Taints e Tolerations
Fala galera! Seis tão baum?
No Kubernetes, o agendamento de pods nos nós do cluster pode ser controlado de diversas formas. Uma dessas formas é através do uso de Taints e Tolerations, que permitem restringir quais pods podem ser executados em determinados nós. Isso é útil para reservar nós para workloads específicos, impedir a alocação de certos pods em nós críticos e criar regras personalizadas de agendamento.
Neste artigo, vamos entender o conceito de Taints e Tolerations, como eles funcionam e como podemos usá-los na prática.
O que são Taints e Tolerations?
Taints (Restrições nos Nós)
Um Taint é uma restrição aplicada a um nó, indicando que certos pods não devem ser agendados nele, a menos que tenham uma Toleration correspondente.
A sintaxe de um Taint é:
1
kubectl taint nodes <nome-do-no> <chave>=<valor>:<efeito>
Os efeitos possíveis são:
- NoSchedule: impede que novos pods sejam agendados no nó, a menos que tenham uma Toleration correspondente.
- PreferNoSchedule: evita a alocação de pods, mas não impede completamente.
- NoExecute: remove imediatamente os pods existentes que não tenham uma Toleration válida.
Exemplo de aplicação de um Taint em um nó chamado node1:
1
kubectl taint nodes node1 dedicated=infra:NoSchedule
Isso significa que apenas pods que possuam a Toleration correspondente poderão ser agendados nesse nó.
Tolerations (Permissão nos Pods)
Uma Toleration permite que um pod seja executado em um nó que tenha um Taint correspondente.
A sintaxe para adicionar uma Toleration a um pod é a seguinte:
1
2
3
4
5
tolerations:
- key: "dedicated"
operator: "Equal"
value: "infra"
effect: "NoSchedule"
Exemplo de um Deployment com Toleration:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: apps/v1
kind: Deployment
metadata:
name: minha-aplicacao
spec:
replicas: 2
selector:
matchLabels:
app: minha-aplicacao
template:
metadata:
labels:
app: minha-aplicacao
spec:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "infra"
effect: "NoSchedule"
containers:
- name: meu-container
image: nginx
Com essa configuração, os pods desse Deployment poderão ser agendados em nós que possuem o Taint dedicated=infra:NoSchedule
.
Exemplo Completo: usando Taints e Tolerations
Passo 1: Adicionar um Taint ao Nó
Primeiro, aplicamos um Taint ao nó node1
:
1
kubectl taint nodes node1 dedicated=infra:NoSchedule
Passo 2: Criar um Pod com Toleration
Criamos um pod que pode ser agendado no nó node1
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
name: pod-com-toleration
spec:
tolerations:
- key: "special"
operator: "Equal"
value: "storage"
effect: "NoSchedule"
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
Passo 3: Verificar o agendamento
Para verificar onde o pod foi alocado, usamos:
1
kubectl get pods -o wide
Saída esperada:
1
2
NAME READY STATUS NODE
pod-com-toleration 1/1 Running node1
Se o pod não tivesse a Toleration, ele não seria agendado no nó node1
.
Boas Práticas no uso de Taints e Tolerations
Aqui estão algumas boas práticas ao utilizar Taints e Tolerations:
- Evite Taints excessivos: Usar muitos Taints pode tornar o agendamento de pods mais complexo do que o necessário.
- Combine com Node Labels: Usar Taints junto com Node Labels e Node Selectors pode fornecer um controle mais refinado sobre onde os pods rodam.
- Atenção ao NoExecute: O efeito
NoExecute
pode remover pods existentes, então use-o com cuidado para evitar interrupções inesperadas.
Conclusão
O uso de Taints e Tolerations é essencial para o controle refinado do agendamento de workloads no Kubernetes. Ele permite:
- Isolamento de workloads sensíveis, garantindo que apenas determinados pods possam rodar em nós específicos.
- Melhoria na organização do cluster, evitando sobrecarga em certos nós.
- Gerenciamento eficiente de infraestrutura, separando workloads de diferentes categorias (exemplo: aplicações críticas vs. testes).
Ao utilizar Taints e Tolerations, é possível criar ambientes mais seguros e organizados, garantindo um melhor aproveitamento dos recursos do cluster.
Lembre-se de sempre testar seus workloads e avaliar qual abordagem se encaixa melhor nas necessidades da sua infraestrutura.
Você pode acessar a documentação oficial aqui: Taints and Tolerations
É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender Kubernetes!
Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!
Forte Abraço!