Scheduling pods using a secondary scheduler
You can run a custom secondary scheduler in OKD by installing the Secondary Scheduler Operator, deploying the secondary scheduler, and setting the secondary scheduler in the pod definition.
Installing the Secondary Scheduler Operator
You can use the web console to install the Secondary Scheduler Operator for Red Hat OpenShift.
Prerequisites
You have access to the cluster with
cluster-admin
privileges.You have access to the OKD web console.
Procedure
Log in to the OKD web console.
Create the required namespace for the Secondary Scheduler Operator for Red Hat OpenShift.
Navigate to Administration → Namespaces and click Create Namespace.
Enter
openshift-secondary-scheduler-operator
in the Name field and click Create.
Install the Secondary Scheduler Operator for Red Hat OpenShift.
Navigate to Operators → OperatorHub.
Enter Secondary Scheduler Operator for Red Hat OpenShift into the filter box.
Select the Secondary Scheduler Operator for Red Hat OpenShift and click Install.
On the Install Operator page:
The Update channel is set to stable, which installs the latest stable release of the Secondary Scheduler Operator for Red Hat OpenShift.
Select A specific namespace on the cluster and select openshift-secondary-scheduler-operator from the drop-down menu.
Select an Update approval strategy.
The Automatic strategy allows Operator Lifecycle Manager (OLM) to automatically update the Operator when a new version is available.
The Manual strategy requires a user with appropriate credentials to approve the Operator update.
Click Install.
Verification
Navigate to Operators → Installed Operators.
Verify that Secondary Scheduler Operator for Red Hat OpenShift is listed with a Status of Succeeded.
Deploying a secondary scheduler
After you have installed the Secondary Scheduler Operator, you can deploy a secondary scheduler.
Prerequisities
You have access to the cluster with
cluster-admin
privileges.You have access to the OKD web console.
The Secondary Scheduler Operator for Red Hat OpenShift is installed.
Procedure
Log in to the OKD web console.
Create config map to hold the configuration for the secondary scheduler.
Navigate to Workloads → ConfigMaps.
Click Create ConfigMap.
In the YAML editor, enter the config map definition that contains the necessary
KubeSchedulerConfiguration
configuration. For example:apiVersion: v1
kind: ConfigMap
metadata:
name: "secondary-scheduler-config" (1)
namespace: "openshift-secondary-scheduler-operator" (2)
data:
"config.yaml": |
apiVersion: kubescheduler.config.k8s.io/v1beta3
kind: KubeSchedulerConfiguration (3)
leaderElection:
leaderElect: false
profiles:
- schedulerName: secondary-scheduler (4)
plugins: (5)
score:
disabled:
- name: NodeResourcesBalancedAllocation
- name: NodeResourcesLeastAllocated
1 The name of the config map. This is used in the Scheduler Config field when creating the SecondaryScheduler
CR.2 The config map must be created in the openshift-secondary-scheduler-operator
namespace.3 The KubeSchedulerConfiguration
resource for the secondary scheduler. For more information, see KubeSchedulerConfiguration in the Kubernetes API documentation.4 The name of the secondary scheduler. Pods that set their spec.schedulerName
field to this value are scheduled with this secondary scheduler.5 The plugins to enable or disable for the secondary scheduler. For a list default scheduling plugins, see Scheduling plugins in the Kubernetes documentation. Click Create.
Create the
SecondaryScheduler
CR:Navigate to Operators → Installed Operators.
Select Secondary Scheduler Operator for Red Hat OpenShift.
Select the Secondary Scheduler tab and click Create SecondaryScheduler.
The Name field defaults to
cluster
; do not change this name.The Scheduler Config field defaults to
secondary-scheduler-config
. Ensure that this value matches the name of the config map created earlier in this procedure.In the Scheduler Image field, enter the image name for your custom scheduler.
Red Hat does not directly support the functionality of your custom secondary scheduler.
Click Create.
Scheduling a pod using the secondary scheduler
To schedule a pod using the secondary scheduler, set the schedulerName
field in the pod definition.
Prerequisities
You have access to the cluster with
cluster-admin
privileges.You have access to the OKD web console.
The Secondary Scheduler Operator for Red Hat OpenShift is installed.
A secondary scheduler is configured.
Procedure
Log in to the OKD web console.
Navigate to Workloads → Pods.
Click Create Pod.
In the YAML editor, enter the desired pod configuration and add the
schedulerName
field:apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
schedulerName: secondary-scheduler (1)
1 The schedulerName
field must match the name that is defined in the config map when you configured the secondary scheduler.Click Create.
Verification
Log in to the OpenShift CLI.
Describe the pod using the following command:
$ oc describe pod nginx -n default
Example output
Name: nginx
Namespace: default
Priority: 0
Node: ci-ln-t0w4r1k-72292-xkqs4-worker-b-xqkxp/10.0.128.3
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 12s secondary-scheduler Successfully assigned default/nginx to ci-ln-t0w4r1k-72292-xkqs4-worker-b-xqkxp
...
In the events table, find the event with a message similar to
Successfully assigned <namespace>/<pod_name> to <node_name>
.In the “From” column, verify that the event was generated from the secondary scheduler and not the default scheduler.
You can also check the
secondary-scheduler-*
pod logs in theopenshift-secondary-scheduler-namespace
to verify that the pod was scheduled by the secondary scheduler.