0Pricing
DevOps Bootcamp · Aula

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=ssd ou gpu=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: ssd

Afinidade 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:
            - production

Afinidade 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

  1. Solicitações e limites de recursos
  2. Seletores e afinidade de nós
  3. Taints e tolerâncias
  4. Prioridade e preempção de Pods
← Voltar para DevOps Bootcamp