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  ![multi-scheduler-deployment](images/multi-volcano-schedulers-without-using-selector.png) 
    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