Library / SDK
koordinator-sh/koordinator avatar
koordinator-sh/koordinator

Koordinator: QoS-aware scheduling for mixed workloads on Kubernetes

A QoS-based scheduling system brings optimal layout and status to workloads such as microservices, web services, big data jobs, AI jobs, etc.

1,755 stars479 forksGoApache-2.0

At a glance

What is it?
Koordinator is a QoS-based scheduling system that co-locates latency-sensitive services with batch and AI workloads on Kubernetes. This review covers its architecture, installation path, and the trade-offs you should weigh before adopting it.
Who is it for?
Adopt Koordinator if you run mixed workloads on Kubernetes and need to increase pod density without sacrificing latency-sensitive service reliability. Skip it if your cluster is homogeneous or you cannot tolerate the operational overhead of a second scheduler and its custom resource definitions.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem: Kubernetes leaves utilization on the table

A typical Kubernetes cluster runs latency-sensitive services, batch jobs, and AI training workloads with hard isolation. Nodes are often underutilized because you cannot safely pack a web service next to a CPU-hungry Spark job without risking latency spikes. Koordinator addresses this by introducing a QoS-based scheduling system that explicitly co-locates workloads of different priorities on the same nodes. It targets operators who manage hybrid clusters and want to raise deployment density while keeping response times predictable. The README states its goal: improve runtime efficiency and reliability of both latency-sensitive workloads and batch jobs, and simplify resource-related configuration tuning.

How Koordinator works: QoS classes and hybrid orchestration

Koordinator extends Kubernetes with a QoS model that classifies workloads into categories such as latency-sensitive, batch, and best-effort. The scheduler uses these classes to decide placement, aiming to reduce interference between containers. The documentation highlights advanced algorithms and techniques, though the README does not detail the exact scheduling logic. The core idea is that a batch job can fill the spare CPU and memory on a node that also runs a web service, as long as the QoS class ensures the batch workload is throttled or evicted when the latency-sensitive workload needs resources. This is a different approach from vanilla Kubernetes, which treats all pods as equal and has no native notion of priority-based resource sharing beyond requests and limits.

Getting it running: install and upgrade path

Installation is done through the Koordinator website, which hosts the full documentation. The README points to the installation page for the latest version and to best-practice examples, such as co-locating Spark jobs. You would typically apply a set of YAML manifests that install the Koordinator scheduler, the koordlet agent, and custom resource definitions. The project follows semantic versioning, with v1.8.0 released on 2026-04-16. Upgrades are handled by applying the newer manifests, but you should check the release notes for breaking changes between minor versions. The README does not list specific kubectl commands, so you must consult the online docs for exact steps.

Limitations: operational complexity and scheduling overhead

Koordinator is not a drop-in replacement for the default Kubernetes scheduler. It is a separate scheduler that must be deployed and configured, and you must ensure that all pods you want to manage are routed through it. That adds operational complexity. The README does not describe failure modes, but any custom scheduler introduces a single point of failure unless you run replicas and configure leader election. Also, the QoS model relies on accurate workload classification; if you mislabel a batch job as latency-sensitive, you lose the utilization gain. The project is designed for hybrid workloads, so it is the wrong tool for a cluster that runs only stateless web services with low utilization, where the added complexity outweighs the benefit.

Alternative: plain Kubernetes with node affinity and taints

Before adopting Koordinator, consider using native Kubernetes features: node affinity, taints and tolerations, and pod priority classes. These let you separate workloads by node or by priority, but they do not dynamically share resources on the same node. A batch pod can be scheduled to a node with a taint that tolerates it, but it will not be throttled when a latency-sensitive pod on the same node needs CPU. Koordinator's advantage is that it coordinates resource usage at the node level using QoS classes, which plain Kubernetes cannot do without external tooling. The trade-off is that you trade simplicity for control. If your co-location needs are modest, native mechanisms may suffice.

Maintenance and license considerations

Koordinator is licensed under Apache-2.0, which permits commercial use, modification, and redistribution with attribution. The project is actively maintained, with recent releases in 2025 and 2026. Maintenance cost includes keeping up with new releases, since the scheduler and koordlet are separate components that must be upgraded in sync. The community provides a Slack channel and a bi-weekly meeting, which helps with troubleshooting. However, the documentation is split between the website and the README, so you must rely on the online docs for installation details. There is no mention of a migration tool from vanilla Kubernetes, so expect manual configuration for existing clusters.

Editorial conclusion

Adopt Koordinator if you run mixed workloads on Kubernetes and need to increase pod density without sacrificing latency-sensitive service reliability. Skip it if your cluster is homogeneous or you cannot tolerate the operational overhead of a second scheduler and its custom resource definitions. Before deploying, verify that your Kubernetes version matches the documented compatibility matrix and that your workloads can express QoS classes via annotations or the Koordinator APIs. Start with the best-practice example for Spark job colocation to see if the interference control matches your actual node conditions.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes