3.10. 运行自定义调度程序
您可以与默认调度程序一起运行多个自定义调度程序,并配置要用于每个 pod 的调度程序。
支持在 OpenShift Container Platform 中使用自定义调度程序,但红帽不直接支持自定义调度程序的功能。
有关如何配置默认调度程序的详情,请参考配置默认调度程序来控制 pod 放置。
要使用特定的调度程序调度给定 pod,在该 Pod
的规格中指定调度程序的名称。
3.10.1. 部署自定义调度程序
要在集群中包含自定义调度程序,请在部署中包含自定义调度程序的镜像。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 您有一个调度程序二进制文件。
注意有关如何创建调度程序二进制文件的信息超出了本文档的讨论范围。例如,请参阅 Kubernetes 文档中的配置多个调度程序。请注意,红帽不支持自定义调度程序的实际功能。
- 您已创建了包含调度程序二进制文件的镜像,并将其推送到 registry。
流程
创建包含包含调度程序配置文件的配置映射的文件:
Example
scheduler-config-map.yaml
apiVersion: v1 kind: ConfigMap metadata: name: scheduler-config namespace: kube-system 1 data: scheduler-config.yaml: | 2 apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration profiles: - schedulerName: custom-scheduler 3 leaderElection: leaderElect: false
创建配置映射:
$ oc create -f scheduler-config-map.yaml
创建一个包含自定义调度程序部署资源的文件:
custom-scheduler.yaml
文件示例apiVersion: v1 kind: ServiceAccount metadata: name: custom-scheduler namespace: kube-system 1 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-scheduler-as-kube-scheduler subjects: - kind: ServiceAccount name: custom-scheduler namespace: kube-system 2 roleRef: kind: ClusterRole name: system:kube-scheduler apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: custom-scheduler-as-volume-scheduler subjects: - kind: ServiceAccount name: custom-scheduler namespace: kube-system 3 roleRef: kind: ClusterRole name: system:volume-scheduler apiGroup: rbac.authorization.k8s.io --- apiVersion: apps/v1 kind: Deployment metadata: labels: component: scheduler tier: control-plane name: custom-scheduler namespace: kube-system 4 spec: selector: matchLabels: component: scheduler tier: control-plane replicas: 1 template: metadata: labels: component: scheduler tier: control-plane version: second spec: serviceAccountName: custom-scheduler containers: - command: - /usr/local/bin/kube-scheduler - --config=/etc/config/scheduler-config.yaml 5 image: "<namespace>/<image_name>:<tag>" 6 livenessProbe: httpGet: path: /healthz port: 10259 scheme: HTTPS initialDelaySeconds: 15 name: kube-second-scheduler readinessProbe: httpGet: path: /healthz port: 10259 scheme: HTTPS resources: requests: cpu: '0.1' securityContext: privileged: false volumeMounts: - name: config-volume mountPath: /etc/config hostNetwork: false hostPID: false volumes: - name: config-volume configMap: name: scheduler-config
在集群中创建部署资源:
$ oc create -f custom-scheduler.yaml
验证
验证调度程序 pod 是否正在运行:
$ oc get pods -n kube-system
自定义调度程序 pod 列为
Running
:NAME READY STATUS RESTARTS AGE custom-scheduler-6cd7c4b8bc-854zb 1/1 Running 0 2m