3.10. 运行自定义调度程序

您可以与默认调度程序一起运行多个自定义调度程序,并配置要用于每个 pod 的调度程序。

重要

支持在 OpenShift Container Platform 中使用自定义调度程序,但红帽不直接支持自定义调度程序的功能。

有关如何配置默认调度程序的详情,请参考配置默认调度程序来控制 pod 放置

要使用特定的调度程序调度给定 pod,在该 Pod 的规格中指定调度程序的名称

3.10.1. 部署自定义调度程序

要在集群中包含自定义调度程序,请在部署中包含自定义调度程序的镜像。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 您有一个调度程序二进制文件。

    注意

    有关如何创建调度程序二进制文件的信息超出了本文档的讨论范围。例如,请参阅 Kubernetes 文档中的配置多个调度程序。请注意,红帽不支持自定义调度程序的实际功能。

  • 您已创建了包含调度程序二进制文件的镜像,并将其推送到 registry。

流程

  1. 创建一个包含自定义调度程序部署资源的文件:

    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
            - --address=0.0.0.0
            - --leader-elect=false
            - --scheduler-name=custom-scheduler 5
            image: "<namespace>/<image_name>:<tag>" 6
            livenessProbe:
              httpGet:
                path: /healthz
                port: 10251
              initialDelaySeconds: 15
            name: kube-second-scheduler
            readinessProbe:
              httpGet:
                path: /healthz
                port: 10251
            resources:
              requests:
                cpu: '0.1'
            securityContext:
              privileged: false
            volumeMounts: []
          hostNetwork: false
          hostPID: false
          volumes: []

    1 2 3 4
    此流程使用 kube-system 命名空间,但您可以使用自己选择的命名空间。
    5
    自定义调度程序的命令可能需要不同的参数。例如,您可以使用 --config 参数将配置作为挂载的卷传递。
    6
    指定您为自定义调度程序创建的容器镜像。
  2. 在集群中创建部署资源:

    $ 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