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
- 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.
- 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
- 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.
-
-
- 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:
- 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
- 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.
Operaciones relacionadas
Historial de cambios
Se recomienda actualizar Volcano a la última versión que coincida con el 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 |
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.*/ |
|
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.*/ |
|
1.4.5 |
/v1.17.*|v1.19.*|v1.21.*/ |
|
1.4.2 |
/v1.15.*|v1.17.*|v1.19.*|v1.21.*/ |
|
1.3.3 |
/v1.15.*|v1.17.*|v1.19.*|v1.21.*/ |
|
1.3.1 |
/v1.15.*|v1.17.*|v1.19.*/ |
|
1.2.5 |
/v1.15.*|v1.17.*|v1.19.*/ |
|
1.2.3 |
/v1.15.*|v1.17.*|v1.19.*/ |
|