Home

scheduling

Manual Scheduling

Add nodeName to the pod definition file if the scheduler is not available. The nodeName can be specified at the creation time. To add nodeName to an existing pod, create an biding object.

apiVersion:v1
kind:Binding
metadata:
 name:nginx
target:
 apiVersion: v1
 kind: Node
 name: node02 //nodeName to be added

convert the yaml file into an equivalent json form

Multiple Schedulers: Custom Scheduler can be written and can be used in tandem with kube-scheduler. The default scheduler is named default-scheduler

my-scheduler-config.yaml

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: my-scheduler
//scheduler names should be different

my-scheduler.service

-- config=/etc/kubernetes/config/my-scheuler-config.yaml

Deploying custom scheduler as a pod my-custom-scheduler.yaml

apiVersion: v1
kind: Pod
metadata:
    name: my-custom-scheduler
    namespace: kube-system
spec:
    containers:
    - command:
        - kube-sceduler
        - --address=127.0.0.1
        - --kubeconfig=/etc/kubernetes/scheduler.conf
        - --config=/etc/kubernetes/my-scheduler-config.yaml
        image: k8.gcr.io/kube-scheduler-amd64:v1.11.3
        name: kube-scheduler

Specify the scheduler name in a pod definition file to use the scheduler

containers:
schedulerName: my-custom-scheduler

View events

kubectl get events -o wide

View logs

kubectl logs my-custom-scheduler --namespace=kube-system

Scheduler Profiles:

Scheduling Queue

There is a scheduling queue in which pods wait to get scheduled. The pods are sorted based on the priority defined on them.

//in pod definition file
spec:
    priortyClassName: high-priorty
apiVersion: v1
kind: PriortyClass
metadata:
    name: high-priorty
value: 100000
globalDefault: false
decscription: "This priorty class should be used for xyz  pods only."

Filter Phase

Nodes that cannot run the pods are figured out

Scoring Phase

Nodes are weighted based on different parameters

Binding phase

Pods are bound to the node base don the weights of the node

These are achieved by plugins Ex.

Scheduling Queue using Priority Queue plugin

Filtering: NodeResourcesFit, NodeName, NodeUnschedulable plugins

Scoring: NodeResourceFit, ImageLocality

Binding: DefaultBinder

There is extension point which is used to connect to the plugins

References:

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduling_code_hierarchy_overview.md

https://kubernetes.io/blog/2017/03/advanced-scheduling-in-kubernetes/

https://jvns.ca/blog/2017/07/27/how-does-the-kubernetes-scheduler-work/

https://stackoverflow.com/questions/28857993/how-does-kubernetes-scheduler-work