Kubernetes - Multiples Scheduler
Alasta 17 Août 2024 kubernetes kubernetes scheduler
Description : Kubernetes, multiples scheduler
Kubernetes - Multiples Scheduler
Le scheduler est chargé de positionné les pods sur les nodes.
Le scheduler recherche le meilleur node selon les étapes suivantes:
1- L’utilisateur démarre un pod
2- Scheduler Queue: le pod est dans la phase QueueSort, le pod est ajouté à la scheduling queue. Basé sur la priorité, le pod démarre pour scheduler le pod PriorityClasses.
3- Filtering: c’est la phase de Filter. Dans cette phase, le schedule de pod filtre les nodes en se basant sur les resource limits, taint & tolerations …
4- Scoring: dans cette phase de Score, le scheduler score les nodes en se basant sur l’espace libre dispo avant/aprés le scheduling et assigne un score. Le node avec le plus haut score est choisi.
5- Binging: Dans cette phase de Bind, le pod est associé au node avec le plus haut score et il est finalement déployé.
Note : Il est possible d’avoir des pré & post actions (PreFilter,PostFilter, PreScore …).
Le scheduler par défaut” est: default-scheduler
Configuration
Le service
Il n’y a qu’un service par scheduler.
kube-scheduler.service
ExecStart=/usr/local/bin/kube-scheduler —config=/etc/kubernetes/config/kube-scheduler.yaml
...
my-scheduler.service
ExecStart=/usr/local/bin/kube-scheduler —config=/etc/kubernetes/config/my-scheduler.yaml
...
Le scheduler
Le scheduler se déploie comme un pod.
my-custom-scheduler.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-custom-scheduler
namespace: kube-system
spec:
container:
- command:
- kube-scheduler
- --address=127.0.0.1
- --kubeconfig=/etc/kubernetes/scheduler.conf
- --config=/etc/kubernetes/my-scheduler-config.yaml
image: k8s.gcr.io/kube-scheduler-amd64:v1.11.3
name: kube-scheduler
La config
my-scheduler-config.yaml
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: my-scheduler
leaderElection:
leaderElect: true
resourceNamespace: kube-system
resourceName: lock-object-my-scheduler
Le pod
pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
schedulerName: my-custom-scheduler