volcano.sh/volcano@v1.9.0/docs/design/deploy-multi-volcano-schedulers-without-using-selector.md (about) 1 # A easy way to deploy multi-volcano-scheduler without using selector 2 3 ## Background 4 5 Currently the single scheduler can not satisfy the high throughput requirement in some scenarios. Besides the performance optimization against the single scheduler, another choice is to deploy multiple volcano schedulers to improve the overall scheduling throughput. 6 7 ## Introduction 8 Previously we use label to divide the cluster nodes to multiple sections and each volcano scheduler is responsible for one section and then specify the schedulerName in the Pod Spec and submit it. It is inconvenient in some conditions especially for large clusters. This doc privides a another option for user to deploy multiple scheduler which needs less modification for workload and nodes. 9 A statefulset is used to deploy the volcano scheduler. The Job and Node are assigned to scheduler automatically based on the hash algorithm. 10 11  12 13 ## How to deployment 14 15 ### 1. Prepare the volcano scheduler yaml file. Here is a example for your reference. 16 ``` 17 kind: StatefulSet 18 apiVersion: apps/v1 19 metadata: 20 name: volcano-scheduler 21 namespace: volcano-system 22 labels: 23 app: volcano-scheduler 24 spec: 25 replicas: 3 26 selector: 27 matchLabels: 28 app: volcano-scheduler 29 serviceName: "volcano-scheduler" 30 template: 31 metadata: 32 labels: 33 app: volcano-scheduler 34 spec: 35 serviceAccount: volcano-scheduler 36 containers: 37 - name: volcano-scheduler 38 image: volcanosh/vc-scheduler:ae78900d21dce8522eb04b6817aac66c9abd01e2 39 args: 40 - --logtostderr 41 - --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf 42 - -v=3 43 - 2>&1 44 imagePullPolicy: "IfNotPresent" 45 env: 46 - name: MULTI_SCHEDULER_ENABLE 47 value: "true" 48 - name: SCHEDULER_NUM 49 value: "3" 50 - name: SCHEDULER_POD_NAME 51 valueFrom: 52 fieldRef: 53 fieldPath: metadata.name 54 volumeMounts: 55 - name: scheduler-config 56 mountPath: /volcano.scheduler 57 volumes: 58 - name: scheduler-config 59 configMap: 60 name: volcano-scheduler-configmap 61 apiVersion: v1 62 kind: Service 63 metadata: 64 name: volcano-scheduler 65 labels: 66 app: volcano-scheduler 67 spec: 68 ports: 69 - port: 80 70 name: volcano-scheduler 71 clusterIP: None 72 selector: 73 app: volcano-scheduler 74 ``` 75 76 Notes: 77 1. MULTI_SCHEDULER_ENABLE env is used to enable or disable multi-scheduler. 78 2. SCHEDULER_NUM indicates the numbers of volcano schedulers which you are planning to launch. 79 80 ### 2. Deploy the statefulset 81 ``` 82 kubectl apply -f <volcano-statefulset.yaml> 83 ``` 84