Skip to main content
In this lesson you’ll learn what scheduler profiles are, how they affect Pod placement, and how to customize scheduling behavior using the Kubernetes scheduling framework and multi-profile kube-scheduler.

How the scheduler selects a Node (recap)

When a Pod is created the scheduler follows a multi-step process:
  • The Pod enters the scheduling queue and is ordered by priority.
  • The scheduler filters out Nodes that cannot meet the Pod’s requirements.
  • Remaining Nodes are scored according to configured scoring rules.
  • The scheduler binds the Pod to the Node with the highest resulting score.
Example: a Pod requiring 10 CPU
  • Only Nodes with at least 10 CPUs available will be considered.
  • Pods are ordered in the scheduling queue by priority; higher priority Pods are processed first.
To give a Pod higher priority create a PriorityClass:
Pod referencing that PriorityClass:

Scheduling pipeline: phases, extension points, and example plugins

The scheduling framework exposes multiple extension points where plugins can run. Below is a concise mapping of the common phases, their purpose, and example plugins: Plugins may implement one or more extension points (for example, NodeResourcesFit participates in both Filter and Score).

Notes on scoring vs filtering

  • Filter plugins determine whether a Node is feasible (yes/no).
  • Score plugins assign numeric scores to feasible Nodes to indicate preference; they never reject a Node.

Scheduling queue and plugins lifecycle

The scheduling framework offers many extension points where plugins can be invoked:
  • Queue sort (order Pods): PrioritySort
  • preFilter, filter, postFilter
  • preScore, score
  • reserve, permit
  • preBind, bind, postBind
A plugin may implement any subset of these hooks, and it can be configured independently per hook.
A slide titled "Extension Points" showing scheduler stages—Scheduling Queue, Filtering, Scoring, and Binding—with example plugin hooks (prefilter/filter/postfilter, preScore/score/reserve, permit/preBind/bind/postBind). Under each stage are named plugins like PrioritySort, NodeResourcesFit, ImageLocality, and DefaultBinder.

Examples of Pod placement constraints

Pod pinned to a specific Node using nodeName:
Cordoning (marking a Node unschedulable) and inspecting Node status:

Configuring custom behavior: scheduler binaries vs. scheduler profiles

Historically you might run multiple scheduler processes (each with its own binary and config) such as default-scheduler, my-scheduler, my-scheduler-2. This approach increases operational overhead and can introduce race conditions when multiple independent schedulers interact with the same cluster. Since Kubernetes 1.18, kube-scheduler supports multiple scheduling profiles in a single process. Each profile behaves like an independent scheduler (it has its own schedulerName) but runs inside the same kube-scheduler process. Comparison: Minimal example using multiple profiles in one kube-scheduler configuration:

Configuring plugins per profile

Under each profile you can enable or disable plugins for specific extension points. This allows different scheduling policies to coexist and be selected by Pods that set spec.schedulerName. Example: enabling/disabling plugins per profile
Notes on plugin names and patterns:
  • Use exact plugin names or wildcard patterns (for example, '*') to disable all plugins for an extension point.
  • Each extension point under plugins: accepts enabled: and disabled: lists.

How Pods select a profile

  • A Pod is scheduled by the profile whose schedulerName matches the Pod’s spec.schedulerName.
  • If a Pod does not set spec.schedulerName, it is scheduled by the cluster’s default scheduler profile (typically default-scheduler).

Additional references

For the original design and rationale, see the KEP 1451 (multi-scheduling profiles) and the Scheduling Framework documentation for details on extension points and plugin implementation.

Summary

  • The scheduler pipeline includes queue sorting, filtering, scoring, and binding, with several extension points between them.
  • Plugins are the primary mechanism for customizing scheduling behavior and can be configured at multiple hooks.
  • Multi-profile kube-scheduler (since Kubernetes 1.18) lets you run multiple logical schedulers (profiles) within a single kube-scheduler process; each profile can enable or disable plugins independently and is selected by Pods via spec.schedulerName.

Watch Video