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