Overview
The DevZero Scheduler is a custom Kubernetes scheduler that optimizes pod placement for cost, resource utilization, and checkpoint/restore workflows.
Scheduler (dz-scheduler)
The DevZero Scheduler is a custom Kubernetes scheduler that runs alongside kube-scheduler. It extends the default scheduling framework with cost-aware, utilization-aware, and checkpoint/restore plugins so pods land on the best node for the job.
Pods opt in by setting schedulerName: dz-scheduler -- everything else continues to use the default scheduler.
What It Does
| Plugin | Type | Purpose |
|---|---|---|
| TargetAllocated | Score | Bin-packs pods toward a target resource utilization percentage |
| LimitOverProvisionControl | Score | Penalizes nodes where total pod limits exceed capacity |
| NodeCost | Score | Prefers cheaper nodes by querying the DevZero control plane for pricing |
| CheckpointRestore | Filter | Ensures checkpoint-restored pods land only on checkpoint-capable nodes |
How It Works
Installation
The Scheduler is installed by default with the dakr-operator (Write Operator) Helm chart. To verify it's running:
kubectl get pods -n kube-system -l component=dz-schedulerTo install it standalone:
kubectl apply -f https://raw.githubusercontent.com/devzero-inc/dz-scheduler/main/sched.yamlUsing the Scheduler
To schedule a pod through the DevZero Scheduler, set the schedulerName field:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
schedulerName: dz-scheduler
containers:
- name: app
image: my-app:latestRBAC
The Scheduler runs as a ServiceAccount dz-scheduler in the kube-system namespace with three ClusterRoles:
| ClusterRole | Permissions |
|---|---|
dz-scheduler-kube-scheduler | Standard scheduler permissions -- create bindings, manage leases, read/watch nodes and pods, patch pod status |
dz-scheduler-volume-scheduler | Read and patch PersistentVolumes, PersistentVolumeClaims, StorageClasses |
dz-scheduler-configmap-reader | Read ConfigMaps (for token resolution) |
The Scheduler runs with system-cluster-critical priority and tolerates all taints so it can schedule on any node.
Next Steps
- Configuration -- tune target utilization, overprovision limits, and cost scoring
- Write Operator -- the operator that installs the Scheduler by default
- Node Operator -- provisions the nodes that the Scheduler scores