Deep Dive into Kubernetes Scheduler: Principles, Algorithms, and Code Walkthrough
This article provides a comprehensive overview of the Kubernetes kube‑scheduler, detailing its watch‑and‑bind mechanism, two‑stage scheduling algorithm, and an in‑depth analysis of the source code structure and key functions for readers interested in mastering Kubernetes scheduling internals.
Introduction
This article examines the kube‑scheduler component deployed on the Kubernetes master node, explaining its operating mechanism and analyzing core source code (Kubernetes 1.9, commit 925c127ec). It covers the scheduler’s watch process, binding workflow, two‑stage algorithm (Predicates and Priorities), and detailed code paths.
Scheduler Basics
The scheduler runs as an independent process, watches the API server for Pods without a NodeName, and binds them to suitable Nodes. It receives Pods and Nodes as input, outputs the selected Node, and performs binding.
Algorithm Stages
Scheduling consists of Predicates (filtering unsuitable Nodes) and Priorities (scoring remaining Nodes from 0‑10, weighted sum determines the best Node). The highest‑scoring Node wins; ties are broken randomly.
Source Code Structure
Entry point: k8s.io/kubernetes/plugin/cmd/scheduler.go. Configuration in k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/server.go. Core logic resides in k8s.io/kubernetes/plugin/pkg/scheduler. Key functions include NewSchedulerCommand, command.Execute, loadConfigFromFile, NewSchedulerServer, createClients, makeLeaderElectionConfig, makeHealthzServer, makeMetricsServer, SchedulerServer.Run.
Scheduler Execution Flow
Each scheduling cycle calls Scheduler.Run(), which syncs caches (WaitForCacheSync), fetches the next Pod (NextPod), and runs the algorithm (schedule). The schedule step uses nodeLister.List, findNodesThatFit, PrioritizeNodes, selectHost, then assumes the Pod and finally binds it via the API server.
Conclusion
The kube‑scheduler provides pod‑to‑node assignment on the master, maintains a FIFO (or optional PriorityQueue) PodQueue, and relies on the DefaultProvider’s Predicates and Priorities to select the optimal Node, updating the SchedulerCache and invoking the API server’s Bind operation.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
360 Zhihui Cloud Developer
360 Zhihui Cloud is an enterprise open service platform that aims to "aggregate data value and empower an intelligent future," leveraging 360's extensive product and technology resources to deliver platform services to customers.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
