Merge pull request #30107 from chirangaalwis/patch-3
Update "multiple schedulers" example
This commit is contained in:
@@ -71,15 +71,26 @@ config. Save it as `my-scheduler.yaml`:
|
|||||||
|
|
||||||
{{< codenew file="admin/sched/my-scheduler.yaml" >}}
|
{{< codenew file="admin/sched/my-scheduler.yaml" >}}
|
||||||
|
|
||||||
An important thing to note here is that the name of the scheduler specified as an
|
In the above manifest, you use a [KubeSchedulerConfiguration](/docs/reference/scheduling/config/)
|
||||||
argument to the scheduler command in the container spec should be unique. This is the name that is matched against the value of the optional `spec.schedulerName` on pods, to determine whether this scheduler is responsible for scheduling a particular pod.
|
to customize the behavior of your scheduler implementation. This configuration has been passed to
|
||||||
|
the `kube-scheduler` during initialization with the `--config` option. The `my-scheduler-config` ConfigMap stores the configuration file. The Pod of the`my-scheduler` Deployment mounts the `my-scheduler-config` ConfigMap as a volume.
|
||||||
|
|
||||||
Note also that we created a dedicated service account `my-scheduler` and bind the cluster role
|
In the aforementioned Scheduler Configuration, your scheduler implementation is represented via
|
||||||
|
a [KubeSchedulerProfile](/docs/reference/config-api/kube-scheduler-config.v1beta2/#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerProfile).
|
||||||
|
{{< note >}}
|
||||||
|
To determine if a scheduler is responsible for scheduling a specific Pod, the `spec.schedulerName` field in a
|
||||||
|
PodTemplate or Pod manifest must match the `schedulerName` field of the `KubeSchedulerProfile`.
|
||||||
|
All schedulers running in the cluster must have unique names.
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
|
Also, note that you create a dedicated service account `my-scheduler` and bind the ClusterRole
|
||||||
`system:kube-scheduler` to it so that it can acquire the same privileges as `kube-scheduler`.
|
`system:kube-scheduler` to it so that it can acquire the same privileges as `kube-scheduler`.
|
||||||
|
|
||||||
Please see the
|
Please see the
|
||||||
[kube-scheduler documentation](/docs/reference/command-line-tools-reference/kube-scheduler/) for
|
[kube-scheduler documentation](/docs/reference/command-line-tools-reference/kube-scheduler/) for
|
||||||
detailed description of other command line arguments.
|
detailed description of other command line arguments and
|
||||||
|
[Scheduler Configuration reference](https://kubernetes.io/docs/reference/config-api/kube-scheduler-config.v1beta2/) for
|
||||||
|
detailed description of other customizable `kube-scheduler` configurations.
|
||||||
|
|
||||||
## Run the second scheduler in the cluster
|
## Run the second scheduler in the cluster
|
||||||
|
|
||||||
@@ -110,11 +121,11 @@ pod in this list.
|
|||||||
|
|
||||||
To run multiple-scheduler with leader election enabled, you must do the following:
|
To run multiple-scheduler with leader election enabled, you must do the following:
|
||||||
|
|
||||||
First, update the following fields in your YAML file:
|
Update the following fields for the KubeSchedulerConfiguration in the `my-scheduler-config` ConfigMap in your YAML file:
|
||||||
|
|
||||||
* `--leader-elect=true`
|
* `leaderElection.leaderElect` to `true`
|
||||||
* `--lock-object-namespace=<lock-object-namespace>`
|
* `leaderElection.resourceNamespace` to `<lock-object-namespace>`
|
||||||
* `--lock-object-name=<lock-object-name>`
|
* `leaderElection.resourceName` to `<lock-object-name>`
|
||||||
|
|
||||||
{{< note >}}
|
{{< note >}}
|
||||||
The control plane creates the lock objects for you, but the namespace must already exist.
|
The control plane creates the lock objects for you, but the namespace must already exist.
|
||||||
@@ -168,8 +179,8 @@ scheduler in that pod spec. Let's look at three examples.
|
|||||||
{{< codenew file="admin/sched/pod3.yaml" >}}
|
{{< codenew file="admin/sched/pod3.yaml" >}}
|
||||||
|
|
||||||
In this case, we specify that this pod should be scheduled using the scheduler that we
|
In this case, we specify that this pod should be scheduled using the scheduler that we
|
||||||
deployed - `my-scheduler`. Note that the value of `spec.schedulerName` should match the name supplied to the scheduler
|
deployed - `my-scheduler`. Note that the value of `spec.schedulerName` should match the name supplied for the scheduler
|
||||||
command as an argument in the deployment config for the scheduler.
|
in the `schedulerName` field of the mapping `KubeSchedulerProfile`.
|
||||||
|
|
||||||
Save this file as `pod3.yaml` and submit it to the Kubernetes cluster.
|
Save this file as `pod3.yaml` and submit it to the Kubernetes cluster.
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,22 @@ roleRef:
|
|||||||
name: system:volume-scheduler
|
name: system:volume-scheduler
|
||||||
apiGroup: rbac.authorization.k8s.io
|
apiGroup: rbac.authorization.k8s.io
|
||||||
---
|
---
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: my-scheduler-config
|
||||||
|
namespace: kube-system
|
||||||
|
data:
|
||||||
|
my-scheduler-config.yaml: |
|
||||||
|
apiVersion: kubescheduler.config.k8s.io/v1beta2
|
||||||
|
kind: KubeSchedulerConfiguration
|
||||||
|
profiles:
|
||||||
|
- schedulerName: my-scheduler
|
||||||
|
leaderElection:
|
||||||
|
leaderElect: false
|
||||||
|
|
||||||
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -55,9 +71,7 @@ spec:
|
|||||||
containers:
|
containers:
|
||||||
- command:
|
- command:
|
||||||
- /usr/local/bin/kube-scheduler
|
- /usr/local/bin/kube-scheduler
|
||||||
- --address=0.0.0.0
|
- --config=/etc/kubernetes/my-scheduler/my-scheduler-config.yaml
|
||||||
- --leader-elect=false
|
|
||||||
- --scheduler-name=my-scheduler
|
|
||||||
image: gcr.io/my-gcp-project/my-kube-scheduler:1.0
|
image: gcr.io/my-gcp-project/my-kube-scheduler:1.0
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
@@ -74,7 +88,12 @@ spec:
|
|||||||
cpu: '0.1'
|
cpu: '0.1'
|
||||||
securityContext:
|
securityContext:
|
||||||
privileged: false
|
privileged: false
|
||||||
volumeMounts: []
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/kubernetes/my-scheduler
|
||||||
hostNetwork: false
|
hostNetwork: false
|
||||||
hostPID: false
|
hostPID: false
|
||||||
volumes: []
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: my-scheduler-config
|
||||||
|
|||||||
Reference in New Issue
Block a user