O que é e como configurar Taints e Toleration

No último post da série de Kubernetes, vimos como configurar NodeAffinity, PodAffinity e PodAntiAffinity. Nesse post, vamos ver como fazer o “NodeAntiAffinity”, ou seja, como configurar taint nos nodes e toleration nos pods.

Como você já deve ter percebido ao ler o post sobre Affinity e AntiAffinity, assim como o parágrafo anterior, não existe NodeAntiAffinity no Kubernetes. No entanto, caso um node precise ser configurado para repelir pods, o conceito de taint pode ser aplicado.

Embora possa parecer estranho ter um node dentro do cluster que repele pods, essa é uma prática comum ao configurar nodes com hardware específico, por exemplo que tenha GPU, assim como nodes dedicados a certas aplicações.

Taint

Como dito antes, ao contrário do affinity, cuja função é atrair os pods com determinadas labels, a função do taint é repelir pods com base em determinadas propriedades do node.

Leia mais »

O que é e como configurar affinity e anti-affinity no Kubernetes

Embora o Kubernetes faça um ótimo trabalho em escalonar os pods de um cluster, algumas vezes, e SOMENTE algumas vezes (note o negrito, itálico e sublinhado), precisamos controlar como e onde os pods serão escalonados.

Para resolver esses casos, que são (ou pelo menos deveriam ser) raros de acontecer, utilizamos as funcionalidades de Affinity e Anti-Affinity do Kubernetes.

Ao utilizar essas funcionalidades, podemos decidir em quais tipos de nodes os pods serão escalonados, além de especificar que determinados pods sejam escalonados próximos ou distantes uns dos outros.

Também “dizemos” ao Kubernetes qual é a expectativa sobre as condições definidas no Affinity ou Anti-Affinity. Em outras palavras, precisamos dizer se as condições precisam ser atendidas (modo hard), ou se seria bom que elas fossem atendidas (modo soft).

Para o modo hard, utilizamos a chave requiredDuringSchedulingIgnoreDuringExecution. Já para o modo soft, a chave preferredDuringSchedulingIgnoreDuringExecution.

Leia mais »