0
0
KubernetesHow-ToBeginner · 4 min read

How Scheduling Works in Kubernetes: Explained Simply

In Kubernetes, kube-scheduler assigns pods to nodes by checking node availability and resource needs. It filters nodes that meet pod requirements, scores them, and picks the best fit to run the pod.
📐

Syntax

The Kubernetes scheduler works through a process involving these main steps:

  • Filtering (Predicates): Remove nodes that cannot run the pod due to resource limits or constraints.
  • Scoring (Priorities): Rank the remaining nodes based on factors like resource availability and affinity.
  • Binding: Assign the pod to the highest scored node.

This process is automatic and runs continuously to place pods efficiently.

yaml
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
  nodeSelector:
    disktype: ssd
💻

Example

This example shows a pod with a nodeSelector that tells the scheduler to place it only on nodes labeled with disktype=ssd. The scheduler filters nodes without this label and picks one that fits best.

bash
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: ssd-pod
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: ssd
EOF
Output
pod/ssd-pod created
⚠️

Common Pitfalls

Common mistakes include:

  • Not labeling nodes properly, so pods with nodeSelector cannot be scheduled.
  • Requesting more resources than any node can provide, causing pods to stay pending.
  • Ignoring taints and tolerations, which can block pod placement.

Always check node labels, resource requests, and taints to avoid scheduling failures.

yaml
apiVersion: v1
kind: Pod
metadata:
  name: wrong-pod
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: hdd
---
apiVersion: v1
kind: Pod
metadata:
  name: correct-pod
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: ssd
📊

Quick Reference

Kubernetes Scheduler Key Points:

  • Filtering: Remove unsuitable nodes.
  • Scoring: Rank nodes to find the best fit.
  • Binding: Assign pod to chosen node.
  • nodeSelector: Simple way to constrain pods to nodes.
  • Taints and Tolerations: Control pod placement on special nodes.

Key Takeaways

Kubernetes scheduler filters and scores nodes to place pods efficiently.
Use node labels and nodeSelector to guide pod placement.
Resource requests must fit node capacity to avoid pending pods.
Taints and tolerations control pod scheduling on special nodes.
Check node labels and taints to troubleshoot scheduling issues.