Seletores e afinidade de nós
Controle onde os pods são agendados usando seletores de nós e regras mais expressivas de afinidade entre nós e pods.
Seletores e afinidade de nós é uma aula grátis de DevOps Bootcamp no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de DevOps Bootcamp, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de DevOps Bootcamp inclui 4 aulas no total.
Controle onde os Pods são alocados
Por padrão, o Kubernetes agenda os Pods em qualquer nó disponível. Mas e se você precisar de mais controle?
Às vezes, é necessário executar Pods em nós específicos. Talvez esses nós tenham hardware especial, licenças ou estejam em determinadas zonas de disponibilidade.
Nesta lição, você aprenderá como orientar o agendador do Kubernetes usando seletores de nós e afinidade de nós.
Por que orientar o agendador?
Imagine que você tenha um Pod de banco de dados que precise ser executado em um nó com SSDs de alto desempenho, ou um aplicativo que use intensivamente a GPU e exija hardware específico.
Talvez você também queira manter determinados Pods afastados uns dos outros para garantir tolerância a falhas, ou assegurar que sejam executados em nós com sistemas operacionais específicos.
O Kubernetes oferece ferramentas para expressar essas preferências de agendamento.
Os nós têm rótulos
Antes de podermos informar aos Pods para onde ir, os nós precisam de identidades! O Kubernetes usa rótulos para identificar os nós com base em suas características.
- Os rótulos são pares de chave e valor, como
disk=ssdougpu=true. - Você pode adicionar rótulos personalizados aos nós usando
kubectl label nodes <node-name> <key>=<value>. - É por meio desses rótulos que direcionamos a alocação de Pods para nós específicos.
Seletores de nós: correspondência simples
A maneira mais simples de restringir um Pod a um conjunto específico de nós é usar nodeSelector.
Esse é um campo da especificação do seu Pod que recebe um mapa de pares de chave e valor. O Pod só será agendado em nós que tenham todos esses rótulos.
É como dizer: "Preciso de um nó que seja exatamente assim."
Seletor de nós em ação
Suponha que tenhamos nós rotulados com disk=ssd. Veja como fazer um Pod ser executado somente nesses nós:
apiVersion: v1
kind: Pod
metadata:
name: ssd-app
spec:
containers:
- name: my-container
image: nginx
nodeSelector:
disk: ssdAfinidade de nós: correspondência avançada
Embora nodeSelector seja simples, ele é muito rígido. E se você quiser nós "preferenciais" ou regras de correspondência mais complexas?
A afinidade de nós oferece mais flexibilidade. Ela permite expressar requisitos "flexíveis" ou "rígidos" para que os Pods sejam alocados em nós com rótulos específicos.
Ela usa uma sintaxe mais poderosa, com operadores como In, NotIn, Exists, DoesNotExist, Gt e Lt.
Afinidade obrigatória e preferencial
A afinidade de nós tem dois tipos principais:
requiredDuringSchedulingIgnoredDuringExecution: o Pod deve ser agendado em um nó que corresponda às regras. Se não existir um nó assim, o Pod não será agendado.preferredDuringSchedulingIgnoredDuringExecution: o agendador tenta encontrar um nó que corresponda às regras, mas, se nenhum estiver disponível, ainda agendará o Pod em outro local. É uma abordagem de "melhor esforço".
Afinidade obrigatória de nós
Veja um Pod que exige um nó com o rótulo env=production. Se não existir um nó assim, o Pod permanecerá pendente.
apiVersion: v1
kind: Pod
metadata:
name: prod-app
spec:
containers:
- name: my-container
image: httpd
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- productionAfinidade de Pods: outros Pods importam
E se você quiser agendar Pods com base no local onde outros Pods estão sendo executados?
- Afinidade de Pods: atrai Pods para nós onde outros Pods com rótulos específicos já estão sendo executados. É útil para colocar no mesmo local serviços que se comunicam com frequência.
- Antiafinidade de Pods: afasta Pods de nós onde há outros Pods com rótulos específicos. É excelente para distribuir réplicas entre nós e obter alta disponibilidade.
Antiafinidade de Pods na prática
Este manifesto garante que dois Pods com o rótulo app=my-web não possam ser agendados no mesmo nó. Isso melhora a tolerância a falhas.
topologyKey especifica o domínio ao qual a antiafinidade se aplica (por exemplo, nó ou zona).
apiVersion: v1
kind: Pod
metadata:
name: web-app-pod
labels:
app: my-web
spec:
containers:
- name: web-container
image: busybox
command: ["sh", "-c", "echo 'Hello from web-app'; sleep 3600"]
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: my-web
topologyKey: "kubernetes.io/hostname"Teste seus conhecimentos
Você quer garantir que seus Pods críticos de banco de dados não sejam agendados em nós com o rótulo zone=dev. Que tipo de regra de agendamento você usaria para essa exclusão rígida baseada nos rótulos dos nós?
Recapitulação: controle do agendamento
Ótimo trabalho! Você aprendeu maneiras poderosas de controlar onde seus Pods são executados:
- Rótulos de nós: pares de chave e valor que identificam as características dos nós.
- Seletores de nós: correspondência simples e rígida para agendar Pods em nós com rótulos específicos.
- Afinidade de nós: regras mais flexíveis (obrigatórias ou preferenciais) para selecionar nós, usando operadores.
- Afinidade/antiafinidade de Pods: colocar Pods no mesmo local ou separá-los com base na localização de outros Pods.
Essas ferramentas são essenciais para otimizar o uso de recursos, garantir tolerância a falhas e atender às necessidades específicas dos aplicativos.
Perguntas Frequentes
A aula “Seletores e afinidade de nós” é grátis?
Sim — o texto completo de “Seletores e afinidade de nós” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de DevOps Bootcamp, atualize para CoddyKit PRO. O curso de DevOps Bootcamp inclui 4 aulas no total.
O que vou aprender em “Seletores e afinidade de nós”?
Controle onde os pods são agendados usando seletores de nós e regras mais expressivas de afinidade entre nós e pods. Você pratica DevOps Bootcamp com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar DevOps Bootcamp?
Nenhuma experiência prévia é necessária. DevOps Bootcamp no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Seletores e afinidade de nós”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de DevOps Bootcamp?
Sim. Cada aula de DevOps Bootcamp inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Solicitações e limites de recursos
- Seletores e afinidade de nós
- Taints e tolerâncias
- Prioridade e preempção de Pods