Kube-Scheduler
Responsible for deciding which node will execute each pod. Not necessarily placing pods on nodes, that's a Kubelet function.
It wouldn't make sense to try to place a pod that needs 4GB of RAM on a node that only has 2GB available.
The Kube-Scheduler respects some criteria depending on the requirements needed for the pod. Some nodes can be dedicated to certain types of applications, such as applications involving graphics processing that need to go to nodes that have dedicated video cards.
Scheduling a pod to a node involves some steps, one of which is filtering, which will define which possible nodes can receive this application. In our manifests, some definitions in pods are taken into account:
- Resources (requirements and limits)
- taints
- tolerations
- node selector
- affinity
Another phase is to choose, among the possible filtered nodes, which one has the best score to receive the pod. The score is based on how many CPUs and memory are available and many other parameters that can be adjusted. The Kubelet updates the Kube-APIServer with this information.
As with other components, we can run the Kube-Scheduler as a pod or service on master nodes.

