Deploy Rok Scheduler

This guide will walk you through deploying the Rok Scheduler, along with the Rok Scheduler Webhook.

Fast Forward

If you have already deployed the Rok Scheduler for your Kubernetes version, meaning you are upgrading from EKF 1.5-rc1 or later, proceed to the Verify section.


As of Kubernetes 1.21, the upstream kube-scheduler supports capacity tracking, so that it takes into consideration the available free storage capacity when scheduling a Pod that requests PVCs. However, the feature is in beta version, and it comes with important limitations that need to be addressed.

To overcome these limitations Rok ships with its own custom scheduler, which supports storage capacity tracking for Kubernetes 1.19, 1.20, and 1.21. In order for a Pod to be scheduled using the Rok Scheduler, the .spec.schedulerName field of the Pod must be set to rok-scheduler. We have automated this process by deploying the Rok Scheduler Webhook, which watches for new Pods in specific namespaces and mutates them by adding the aforementioned field.


  1. Go to your GitOps repository, inside your rok-tools management environment:

    root@rok-tools:~# cd ~/ops/deployments
  2. Copy dockerconfig.json to the following location:

    root@rok-tools:~/ops/deployments# cp deploy/dockerconfig.json \ > rok/rok-scheduler-webhook/overlays/deploy/secrets/dockerconfig.json
  3. Build the manifests for the Rok Scheduler Webhook and make sure the .dockerconfigjson field is not empty:

    root@rok-tools:~/ops/deployments# kustomize build rok/rok-scheduler-webhook/overlays/deploy | \ > grep "\.dockerconfigjson" | cut -c -80 .dockerconfigjson: ezgGBltDd...
  4. Add the Rok Scheduler overlay that corresponds to your Kubernetes version. Edit rok/rok-scheduler/overlays/deploy/kustomization.yaml and use k8s-1.19 instead of base as the base overlay:

    resources: #- ../../base - ../k8s-1.19
  5. Commit your changes:

    root@rok-tools:~/ops/deployments# git commit -am "Deploy Rok Scheduler"
  6. Mark your progress:

    root@rok-tools:~/ops/deployments# export DATE=$(date -u "+%Y-%m-%dT%H.%M.%SZ")
    root@rok-tools:~/ops/deployments# git tag \ > -a deploy/${DATE?}/release-1.5/rok-scheduler \ > -m "Deploy Rok Scheduler"
  7. Deploy the Rok Scheduler:

    root@rok-tools:~/ops/deployments# rok-deploy --apply rok/rok-scheduler/overlays/deploy
  8. Deploy the Rok Scheduler Webhook:

    root@rok-tools:~/ops/deployments# rok-deploy --apply rok/rok-scheduler-webhook/overlays/deploy


  1. Verify that the Rok Scheduler is up and running. Verify that field READY is 1/1:

    root@rok-tools:~# kubectl get deploy -n rok-system rok-scheduler NAME READY AGE rok-scheduler 1/1 1m
  2. Verify that the Rok Scheduler Webhook is up and running. Verify that field READY is 1/1:

    root@rok-tools:~# kubectl get deploy -n rok-system rok-scheduler-webhook NAME READY AGE rok-scheduler-webhook 1/1 1m


You have successfully deployed the Rok Scheduler and the Rok Scheduler Webhook.

What’s Next

The next step is to upgrade Kubeflow.