Menu Close
Settings Close

Language and Page Formatting Options

3.9. 运行自定义调度程序

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

重要

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

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

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

3.9.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