Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

Volcano

Presentación

Volcano es una plataforma de procesamiento por lotes basada en Kubernetes. Proporciona una serie de características requeridas por aprendizaje automático, aprendizaje profundo, bioinformática, genómica y otras aplicaciones de big data, como un poderoso complemento a las capacidades de Kubernetes.

Volcano proporciona capacidades informáticas de alto rendimiento de propósito general, como motor de programación de trabajos, gestión de chips heterogéneos y gestión de ejecución de trabajos, sirviendo a los usuarios finales con marcos informáticos para diferentes industrias, como IA, big data, secuenciación de genes y renderizado. (Volcano ha sido de código abierto en el GitHub.)

Volcano proporciona programación de trabajos, gestión de trabajos y gestión de colas para las aplicaciones informáticas. Sus principales características son las siguientes:

  • En Kubernetes de contenedores se pueden ejecutar diversos marcos de cómputo, como TensorFlow, MPI y Spark. Se proporcionan las API comunes para trabajos de cómputo por lotes con CRD, varios complementos y gestión avanzada del ciclo de vida de trabajos.
  • Las capacidades avanzadas de programación se proporcionan para el cómputo por lotes y los escenarios de cómputo de alto rendimiento, incluidos la programación de grupos, la programación de prioridades preventivas, el empaquetado, la reserva de recursos y la topología de tareas.
  • Las colas se pueden gestionar eficazmente para la programación de trabajos. Se admiten las capacidades complejas de programación de trabajos, como la prioridad de cola y las colas de varios niveles.

Comunidad de código abierto: https://github.com/volcano-sh/volcano

Instalación del complemento

  1. Inicie sesión en la consola de CCE y acceda a la consola del clúster. Elija Add-ons en el panel de navegación, localice volcano a la derecha y haga clic en Install.
  2. Seleccione Standalone, Custom o HA para Add-on Specifications.

    Si selecciona Custom, los valores recomendados para volcano-controller y volcano-scheduler son los siguientes:

    • Si el número de nodos es inferior a 100, conserve la configuración predeterminada. Es decir, el valor de petición de la CPU es 500m y el valor límite es 2000m. El valor de solicitud de memoria es 500Mi y el valor límite es 2000Mi.
    • Si el número de nodos es mayor que 100, aumente el valor de solicitud de CPU en 500m y el valor de solicitud de memoria en 1000Mi cada vez que se agreguen 100 nodos (pods de 10,000). Se recomienda aumentar el valor límite de CPU en 1500m y el límite de memoria en 1000Mi.
      Tabla 1 Valores recomendados para volcano-controller and volcano-scheduler

      Número de nodos/pods

      Solicitud de CPU(m)

      Límite de CPU(m)

      Solicitud de memoria(Mi)

      Límite de memoria(Mi)

      50/5000

      500

      2000

      500

      2000

      100/10,000

      1000

      2500

      1500

      2500

      200/20,000

      1500

      3000

      2500

      3500

      300/30,000

      2000

      3500

      3500

      4500

      400/40,000

      2500

      4000

      4500

      5500

  3. Configure los parámetros del planificador de volcano predeterminado. Para obtener más información, véase Tabla 2.

    colocation_enable: ''
    default_scheduler_conf:
      actions: 'allocate, backfill'
      tiers:
        - plugins:
            - name: 'priority'
            - name: 'gang'
            - name: 'conformance'
        - plugins:
            - name: 'drf'
            - name: 'predicates'
            - name: 'nodeorder'
        - plugins:
            - name: 'cce-gpu-topology-predicate'
            - name: 'cce-gpu-topology-priority'
            - name: 'cce-gpu'
        - plugins:
            - name: 'nodelocalvolume'
            - name: 'nodeemptydirvolume'
            - name: 'nodeCSIscheduling'
            - name: 'networkresource'
    Tabla 2 Complementos de Volcano

    Complemento

    Función

    Descripción

    Demostración

    binpack

    Programa los pods en nodos con una alta utilización de recursos para reducir los fragmentos de recursos.

    • binpack.weight: ponderación del complemento binpack.
    • binpack.cpu: relación de recursos de CPU a todos los recursos. El valor predeterminado es 1.
    • binpack.memory: relación entre los recursos de memoria y todos los recursos. El valor predeterminado es 1.
    • binpack.resources: tipo de recurso.
    - plugins:
      - name: binpack
        arguments:
          binpack.weight: 10
          binpack.cpu: 1
          binpack.memory: 1
          binpack.resources: nvidia.com/gpu, example.com/foo
          binpack.resources.nvidia.com/gpu: 2
          binpack.resources.example.com/foo: 3

    conformance

    El complemento de conformidad considera que las tareas en el espacio de nombres kube-system tienen una prioridad más alta. Estas tareas no serán prevaricadas.

    -

    -

    gang

    El complemento gang considera un grupo de pods como un todo para asignar recursos.

    -

    -

    priority

    El complemento priority programa los pods en función de la prioridad de carga de trabajo personalizada.

    -

    -

    overcommit

    Los recursos de un clúster se programan después de acumularse en un determinado múltiplo para mejorar la eficiencia de la cola de carga de trabajo. Si todas las cargas de trabajo son Deployments, quite este complemento o establezca el factor de aumento en 2.0.

    overcommit-factor: Factor de aumento. El valor predeterminado es 1.2.

    - plugins:
      - name: overcommit
        arguments:
          overcommit-factor: 2.0

    drf

    Programa los recursos basados en los recursos dominantes del grupo de contenedor. Los recursos de dominantes más pequeños se seleccionarían para la programación de prioridades.

    -

    -

    predicates

    Determina si una tarea está vinculada a un nodo mediante una serie de algoritmos de evaluación, como afinidad de nodo/pod, tolerancia a la contaminación, repetición de puertos de nodo, límites de volumen y coincidencia de zona de volumen.

    -

    -

    nodeorder

    El complemento nodeorder puntua todos los nodos para una tarea usando una serie de algoritmos de puntuación.

    • nodeaffinity.weight: Los pods se programan en función de la afinidad del nodo. El valor predeterminado es 1.
    • podaffinity.weight: Los pods se programan en función de la afinidad de pods. El valor predeterminado es 1.
    • leastrequested.weight: Los pods se programan para el nodo con los recursos menos solicitados. El valor predeterminado es 1.
    • balancedresource.weight: Los pods se programan en el nodo con el recurso equilibrado. El valor predeterminado es 1.
    • mostrequested.weight: Los pods se programan para el nodo con los recursos más solicitados.Defaults to 0.
    • tainttoleration.weight: Los pods se programan en el nodo con una alta tolerancia a la contaminación. El valor predeterminado es 1.
    • imagelocality.weight: Los pods se programan en el nodo donde existen las imágenes requeridas. El valor predeterminado es 1.
    • selectorspread.weight: Los pods se programan uniformemente para diferentes nodos. El valor predeterminado es 0.
    • volumebinding.weight: Los pods se programan para el nodo con la política de enlace retardado de PV local. El valor predeterminado es 1.
    • podtopologyspread.weight: Los pods se programan en función de la topología del pod. El valor predeterminado es 2.
    - plugins:
      - name: nodeorder
        arguments:
          leastrequested.weight: 1
          mostrequested.weight: 0
          nodeaffinity.weight: 1
          podaffinity.weight: 1
          balancedresource.weight: 1
          tainttoleration.weight: 1
          imagelocality.weight: 1
          volumebinding.weight: 1
          podtopologyspread.weight: 2

    cce-gpu-topology-predicate

    Algoritmo de preselección de programación de topología de GPU

    -

    -

    cce-gpu-topology-priority

    Algoritmo de prioridad de programación de topología de GPU

    -

    -

    cce-gpu

    Funciona con el complemento gpu de CCE para admitir la asignación de recursos de GPU y la configuración decimal de GPU.

    -

    -

    numaaware

    Programación de topología NUMA

    weight: Ponderación del complemento numa-aware.

    -

    networkresource

    El nodo de requisitos de ENI puede preseleccionarse y filtrarse. Los parámetros son transferidos por CCE y no necesitan ser configurados manualmente.

    NetworkType: tipo de red (eni o vpc-router).

    -

    nodelocalvolume

    Filtra los nodos que no cumplen los requisitos de volumen local.

    -

    -

    nodeemptydirvolume

    Filtra los nodos que no cumplen los requisitos de emptyDir.

    -

    -

    nodeCSIscheduling

    Filtra los nodos que tienen siempre excepciones de componente.

    -

    -

  4. Haga clic en Install.

Modificación de las configuraciones de volcano-scheduler con la consola

Volcano le permite configurar el planificador durante la instalación, actualización y edición. La configuración se sincronizará con volcano-scheduler-configmap.

Esta sección describe cómo configurar volcano-scheduler.

Solo Volcano de v1.7.1 y posteriores soportan esta función. En la nueva página del complemento, opciones como plugins.eas_service y resource_exporter_enable se sustituyen por default_scheduler_conf.

Inicie sesión en la consola de CCE y acceda a la consola del clúster. Elija Add-ons en el panel de navegación. A la derecha de la página, localice volcano y haga clic en Install o Upgrade. En el área Parameters, configure los parámetros de volcano-scheduler.

  • Uso de resource_exporter:
    {
        "ca_cert": "",
        "default_scheduler_conf": {
            "actions": "allocate, backfill",
            "tiers": [
                {
                    "plugins": [
                        {
                            "name": "priority"
                        },
                        {
                            "name": "gang"
                        },
                        {
                            "name": "conformance"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "drf"
                        },
                        {
                            "name": "predicates"
                        },
                        {
                            "name": "nodeorder"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "cce-gpu-topology-predicate"
                        },
                        {
                            "name": "cce-gpu-topology-priority"
                        },
                        {
                            "name": "cce-gpu"
                        },
                        {
                            "name": "numa-aware" # add this also enable resource_exporter
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "nodelocalvolume"
                        },
                        {
                            "name": "nodeemptydirvolume"
                        },
                        {
                            "name": "nodeCSIscheduling"
                        },
                        {
                            "name": "networkresource"
                        }
                    ]
                }
            ]
        },
        "server_cert": "",
        "server_key": ""
    }

    Después de que esta función esté habilitada, puede usar las funciones del complemento numa-aware y resource_exporter al mismo tiempo.

  • Uso de eas_service:
    {
        "ca_cert": "",
        "default_scheduler_conf": {
            "actions": "allocate, backfill",
            "tiers": [
                {
                    "plugins": [
                        {
                            "name": "priority"
                        },
                        {
                            "name": "gang"
                        },
                        {
                            "name": "conformance"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "drf"
                        },
                        {
                            "name": "predicates"
                        },
                        {
                            "name": "nodeorder"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "cce-gpu-topology-predicate"
                        },
                        {
                            "name": "cce-gpu-topology-priority"
                        },
                        {
                            "name": "cce-gpu"
                        },
                        {
                            "name": "eas",
                            "custom": {
                                "availability_zone_id": "",
                                "driver_id": "",
                                "endpoint": "",
                                "flavor_id": "",
                                "network_type": "",
                                "network_virtual_subnet_id": "",
                                "pool_id": "",
                                "project_id": "",
                                "secret_name": "eas-service-secret"
                            }
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "nodelocalvolume"
                        },
                        {
                            "name": "nodeemptydirvolume"
                        },
                        {
                            "name": "nodeCSIscheduling"
                        },
                        {
                            "name": "networkresource"
                        }
                    ]
                }
            ]
        },
        "server_cert": "",
        "server_key": ""
    }
  • Using ief:
    {
        "ca_cert": "",
        "default_scheduler_conf": {
            "actions": "allocate, backfill",
            "tiers": [
                {
                    "plugins": [
                        {
                            "name": "priority"
                        },
                        {
                            "name": "gang"
                        },
                        {
                            "name": "conformance"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "drf"
                        },
                        {
                            "name": "predicates"
                        },
                        {
                            "name": "nodeorder"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "cce-gpu-topology-predicate"
                        },
                        {
                            "name": "cce-gpu-topology-priority"
                        },
                        {
                            "name": "cce-gpu"
                        },
                        {
                            "name": "ief",
                            "enableBestNode": true
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "nodelocalvolume"
                        },
                        {
                            "name": "nodeemptydirvolume"
                        },
                        {
                            "name": "nodeCSIscheduling"
                        },
                        {
                            "name": "networkresource"
                        }
                    ]
                }
            ]
        },
        "server_cert": "",
        "server_key": ""
    }

Retención de las configuraciones originales de volcano-scheduler-configmap

Si desea utilizar la configuración original después de actualizar el complemento, realice los siguientes pasos:

  1. Compruebe y haga una copia de respaldo de la configuración original de volcano-scheduler-configmap.

    Por ejemplo:
    # kubectl edit cm volcano-scheduler-configmap -n kube-system
    apiVersion: v1
    data:
      default-scheduler.conf: |-
        actions: "enqueue, allocate, backfill"
        tiers:
        - plugins:
          - name: priority
          - name: gang
          - name: conformance
        - plugins:
          - name: drf
          - name: predicates
          - name: nodeorder
          - name: binpack
            arguments:
              binpack.cpu: 100
              binpack.weight: 10
              binpack.resources: nvidia.com/gpu
              binpack.resources.nvidia.com/gpu: 10000
        - plugins:
          - name: cce-gpu-topology-predicate
          - name: cce-gpu-topology-priority
          - name: cce-gpu
        - plugins:
          - name: nodelocalvolume
          - name: nodeemptydirvolume
          - name: nodeCSIscheduling
          - name: networkresource

  2. Introduzca el contenido personalizado en el área Parameters de la consola.

    {
        "ca_cert": "",
        "default_scheduler_conf": {
            "actions": "enqueue, allocate, backfill",
            "tiers": [
                {
                    "plugins": [
                        {
                            "name": "priority"
                        },
                        {
                            "name": "gang"
                        },
                        {
                            "name": "conformance"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "drf"
                        },
                        {
                            "name": "predicates"
                        },
                        {
                            "name": "nodeorder"
                        },
                        {
                            "name": "binpack",
                            "arguments": {
                                "binpack.cpu": 100,
                                "binpack.weight": 10,
                                "binpack.resources": "nvidia.com/gpu",
                                "binpack.resources.nvidia.com/gpu": 10000
                            }
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "cce-gpu-topology-predicate"
                        },
                        {
                            "name": "cce-gpu-topology-priority"
                        },
                        {
                            "name": "cce-gpu"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "nodelocalvolume"
                        },
                        {
                            "name": "nodeemptydirvolume"
                        },
                        {
                            "name": "nodeCSIscheduling"
                        },
                        {
                            "name": "networkresource"
                        }
                    ]
                }
            ]
        },
        "server_cert": "",
        "server_key": ""
    }

    Cuando se utiliza esta función, se sobrescribirá el contenido original en volcano-scheduler-configmap. Por lo tanto, debe verificar si volcano-scheduler-configmap ha sido modificado durante la actualización. Si es así, sincronice la modificación en la página de actualización.

Historial de cambios

Se recomienda actualizar Volcano a la última versión que coincida con el clúster.

Tabla 3 Asignación de versión de clúster

Versión del clúster

Versión del complemento

v1.25

1.7.1 y 1.7.2

v1.23

1.7.1 y 1.7.2

v1.21

1.7.1 y 1.7.2

v1.19.16

1.3.7, 1.3.10, 1.4.5, 1.7.1 y 1.7.2

v1.19

1.3.7, 1.3.10 y 1.4.5

v1.17 (Fin de mantenimiento)

1.3.7, 1.3.10 y 1.4.5

v1.15 (Fin de mantenimiento)

1.3.7, 1.3.10 y 1.4.5

Tabla 4 Versiones de complementos de CCE

Versión del complemento

Versión de clúster admitida

Característica actualizada

1.7.2

/v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/

  • Compatible con Kubernetes 1.25.
  • Mejorada la programación del volcano.

1.7.1

/v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/

Compatible con Kubernetes 1.25.

1.6.5

/v1.19.*|v1.21.*|v1.23.*/

  • Sirve como el programador predeterminado de CCE.
  • Admitida la programación unificada en despliegues híbridos.

1.4.5

/v1.17.*|v1.19.*|v1.21.*/

  • Cambiado el modo de despliegue del volcano-scheduler desde statefulset hasta deployment. Se ha corregido el problema de que los pods no se pueden migrar automáticamente cuando el nodo es anormal.

1.4.2

/v1.15.*|v1.17.*|v1.19.*|v1.21.*/

  • Resuelto el problema de que la asignación entre las GPU falla.
  • Compatible con la API de EAS actualizada.

1.3.3

/v1.15.*|v1.17.*|v1.19.*|v1.21.*/

  • Corregido el problema de bloqueo del planificador causado por las excepciones de GPU y el problema de error de admisión para contenedores de inicio privilegiado.

1.3.1

/v1.15.*|v1.17.*|v1.19.*/

  • Actualizado el firmware de la tarjeta controladora RAID a la versión más reciente.
  • Compatible con Kubernetes 1.19.
  • Agregado el complemento numa-aware.
  • Corregido el problema de ajuste de despliegue en el escenario de colas múltiples.
  • Ajustado el complemento de algoritmo habilitado de forma predeterminada.

1.2.5

/v1.15.*|v1.17.*|v1.19.*/

  • Corregido el problema de OutOfcpu en algunos escenarios.
  • Corregido el problema de que los pods no se pueden programar cuando se configuran algunas capacidades para una cola.
  • El tiempo de log del componente de volcano es consistente con el tiempo del sistema.
  • Corregido el problema de preferencia entre varias colas.
  • Solucionado el problema de que el resultado del complemento IoAware no cumple con la expectativa en algunos escenarios extremos.
  • Compatibles con los clústeres híbridos.

1.2.3

/v1.15.*|v1.17.*|v1.19.*/

  • Corregido el problema de OOM de la tarea de entrenamiento causado por la precisión insuficiente.
  • Corregido el problema de programación de GPU en CCE 1.15 y versiones posteriores. No se admite la actualización continua de las versiones de CCE durante la distribución de tareas.
  • Corregido el problema por el que se desconocía el estado de la cola en ciertos escenarios.
  • Corregido el problema por el que se producía un pánico cuando se montaba un PVC en un trabajo en un escenario específico.
  • Corregido el problema de que los decimales no se podían configurar para los trabajos de GPU.
  • Agregado el complemento ioaware.
  • Agregado el controlador de anillo.