Pular para o conteúdo principal

Capítulo 2.5 - Scheduler

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Compreender o papel do Scheduler
  • Explicar o processo de planejamento
  • Entender filtros e pontuações
  • Identificar restrições de planejamento

O que é o Scheduler?​

O Scheduler (kube-scheduler) é responsável por atribuir os Pods não planejados aos nodes apropriados do cluster. Ele leva em consideração restrições de recursos, afinidades e políticas.


Processo de Planejamento​

Etapas do Planejamento​

1. Filtragem (Filtering)​

Elimina os nodes que não podem executar o Pod:

  • Predicado 1: Recursos suficientes (CPU, memória)
  • Predicado 2: Afinidades/anti-afinidades respeitadas
  • Predicado 3: Taints e tolerations
  • Predicado 4: Node selectors

2. Scoring (Priorização)​

Pontua cada node elegível (0-10):

  • Prioridade 1: Balanceamento de recursos
  • Prioridade 2: Afinidade com outros Pods
  • Prioridade 3: Localidade dos dados
  • Prioridade 4: Preferências do usuário

3. Seleção​

O node com a pontuação mais alta é selecionado.


Exemplo de Planejamento​

Cenário​

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: nginx
resources:
requests:
cpu: "500m"
memory: "512Mi"

Processo​


Restrições de Planejamento​

1. Recursos (Requests/Limits)​

resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"

O Scheduler verifica se o node possui recursos disponíveis suficientes.

2. Node Selectors​

spec:
nodeSelector:
disktype: ssd
zone: us-east-1a

O Pod só será planejado em nodes com esses labels.

3. Afinidades (Affinity)​

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- us-east-1a

4. Taints e Tolerations​

# Taint no node
kubectl taint nodes node1 key=value:NoSchedule

# Toleration no Pod
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"

Estratégias de Planejamento​

Balanceamento de Recursos​

O Scheduler tenta equilibrar a carga entre os nodes:

Preferências de Localidade​

O Scheduler prefere planejar os Pods próximos de seus dados (afinidade de zona).


Scheduler Personalizado​

Você pode criar seu próprio scheduler para necessidades específicas:

apiVersion: v1
kind: Pod
spec:
schedulerName: my-custom-scheduler
containers:
- name: app
image: nginx

Comandos Úteis​

# Ver os logs do Scheduler
kubectl logs -n kube-system kube-scheduler-<node>

# Ver por que um Pod não foi planejado
kubectl describe pod <pod-name>

# Ver eventos de planejamento
kubectl get events --field-selector involvedObject.name=<pod-name>

Resumo​

Neste capítulo, você aprendeu:

Scheduler: Atribui os Pods aos nodes apropriados
Processo: Filtragem → Scoring → Seleção → Bind
Restrições: Recursos, selectors, afinidades, taints
Balanceamento: Distribuição ótima da carga
Personalização: Possibilidade de schedulers personalizados


Próximos Passos​

Agora que você entende o Scheduler:

Capítulo 2.6: kubelet - Agente dos Worker Nodes
Capítulo 2.7: kube-proxy


Capítulo criado em: Dezembro 2024