KubeCon EUBooth 1151, Amsterdam. March 23-26
Scheduler

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

PluginTypePurpose
TargetAllocatedScoreBin-packs pods toward a target resource utilization percentage
LimitOverProvisionControlScorePenalizes nodes where total pod limits exceed capacity
NodeCostScorePrefers cheaper nodes by querying the DevZero control plane for pricing
CheckpointRestoreFilterEnsures 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-scheduler

To install it standalone:

kubectl apply -f https://raw.githubusercontent.com/devzero-inc/dz-scheduler/main/sched.yaml

Using 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:latest

RBAC

The Scheduler runs as a ServiceAccount dz-scheduler in the kube-system namespace with three ClusterRoles:

ClusterRolePermissions
dz-scheduler-kube-schedulerStandard scheduler permissions -- create bindings, manage leases, read/watch nodes and pods, patch pod status
dz-scheduler-volume-schedulerRead and patch PersistentVolumes, PersistentVolumeClaims, StorageClasses
dz-scheduler-configmap-readerRead 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

On this page