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

Annexes:

Doc officielle