Aller au contenu principal

Chapitre 2.5 - Scheduler

Objectifs d'Apprentissage

À la fin de ce chapitre, vous serez capable de:

  • Comprendre le rôle du Scheduler
  • Expliquer le processus de planification
  • Comprendre les filtres et scores
  • Identifier les contraintes de planification

Qu'est-ce que le Scheduler?

Le Scheduler (kube-scheduler) est responsable d'assigner les Pods non planifiés aux nodes appropriés du cluster. Il prend en compte les contraintes de ressources, les affinités, et les politiques.


Processus de Planification

Étapes de Planification

1. Filtrage (Filtering)

Élimine les nodes qui ne peuvent pas exécuter le Pod:

  • Predicate 1: Ressources suffisantes (CPU, mémoire)
  • Predicate 2: Affinités/anti-affinités respectées
  • Predicate 3: Taints et tolerations
  • Predicate 4: Sélecteurs de node

2. Scoring (Prioritization)

Note chaque node éligible (0-10):

  • Priorité 1: Équilibrage des ressources
  • Priorité 2: Affinité avec d'autres Pods
  • Priorité 3: Localité des données
  • Priorité 4: Préférences utilisateur

3. Sélection

Le node avec le score le plus élevé est sélectionné.


Exemple de Planification

Scénario

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

Processus


Contraintes de Planification

1. Ressources (Requests/Limits)

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

Le Scheduler vérifie que le node a assez de ressources disponibles.

2. Node Selectors

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

Le Pod ne sera planifié que sur des nodes avec ces labels.

3. Affinités (Affinity)

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

4. Taints et Tolerations

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

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

Stratégies de Planification

Équilibrage des Ressources

Le Scheduler essaie d'équilibrer la charge entre les nodes:

Préférences de Localité

Le Scheduler préfère planifier les Pods près de leurs données (affinité de zone).


Scheduler Personnalisé

Vous pouvez créer votre propre scheduler pour des besoins spécifiques:

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

Commandes Utiles

# Voir les logs du Scheduler
kubectl logs -n kube-system kube-scheduler-<node>

# Voir pourquoi un Pod n'est pas planifié
kubectl describe pod <pod-name>

# Voir les événements de planification
kubectl get events --field-selector involvedObject.name=<pod-name>

Résumé

Dans ce chapitre, vous avez appris:

Scheduler: Assigne les Pods aux nodes appropriés
Processus: Filtrage → Scoring → Sélection → Bind
Contraintes: Ressources, selectors, affinités, taints
Équilibrage: Répartition optimale de la charge
Personnalisation: Schedulers personnalisés possibles


Prochaines Étapes

Maintenant que vous comprenez le Scheduler:

Chapitre 2.6: kubelet - Agent des Worker Nodes
Chapitre 2.7: kube-proxy


Chapitre créé le: Décembre 2024