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