scicore.slurm
Pruebas CI | Lanzamientos de Galaxy |
---|---|
scicore.slurm
Configura un clúster SLURM
Este rol configurará:
- daemon de contabilidad de slurm
- daemon maestro de slurm
- nodos trabajadores de slurm
- hosts de envío de slurm
Los usuarios de Slurm se añaden automáticamente a la base de datos de contabilidad de slurm al enviar su primer trabajo utilizando un plugin de envío de trabajos en lua
Inventario de ejemplo
master ansible_host=192.168.56.100 ansible_user=vagrant ansible_password=vagrant
submit ansible_host=192.168.56.101 ansible_user=vagrant ansible_password=vagrant
compute ansible_host=192.168.56.102 ansible_user=vagrant ansible_password=vagrant
[hosts_de_envío_slurm]
submit
[trabajadores_slurm]
compute
Una vez que definas tu inventario, asegúrate de definir la variable "slurm_master_host" apuntando al nombre de host de tu host maestro
Variables del rol
# Agrega todos los hosts de slurm a /etc/hosts en cada máquina
# las IPs provienen de las variables de host de ansible hostvars[ansible_hostname]['ansible_default_ipv4']['address']
slurm_update_etc_hosts_file: true
# apunta esta variable a un repositorio git si tienes tu configuración de slurm en git
# slurm_config_git_repo: ""
# por defecto, el rol desplegará un plugin de envío en lua que añadirá automáticamente a los usuarios a la base de datos de contabilidad de slurm
# Revisa "templates/job_submit.lua.j2" para más detalles
slurm_config_deploy_lua_submit_plugin: true
# Utiliza slurm sin configuración https://slurm.schedmd.com/configless_slurm.html
# Esta función requiere slurm 20.02 o superior
# Solo se ha probado en sistemas RedHat, pero también debería funcionar en Ubuntu si instalas ubuntu20.02 o superior
slurm_configless: false
# Despliega los scripts requeridos en el maestro de slurm para programación en la nube usando openstack (https://slurm.schedmd.com/elastic_computing.html)
# Esto desplegará "ResumeProgram", "SuspendProgram" para slurm.conf
# y /etc/openstack/clouds.yaml con una credencial de aplicación en el maestro de slurm
# Esto requiere un slurm.conf personalizado. Revisa "templates/slurm.conf.j2.cloud.example" para un ejemplo
# Se recomienda utilizar [la resolución DNS interna de OpenStack] (https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#the-networking-service-internal-dns-resolution)
slurm_openstack_cloud_scheduling: false
slurm_openstack_venv_path: /opt/venv_slurm
slurm_openstack_auth_url: https://my-openstack-cloud.com:5000/v3
slurm_openstack_application_credential_id: "4eeabeabcabdwe19451e1d892d1f7"
slurm_openstack_application_credential_secret: "supersecret1234"
slurm_openstack_region_name: "RegionOne"
slurm_openstack_interface: "public"
slurm_openstack_identity_api_version: 3
slurm_openstack_auth_type: "v3applicationcredential"
# nombre del clúster slurm como se define en slurm.cfg
slurm_cluster_name: slurm-cluster
# establece esta variable al ansible_hostname del slurm-master
slurm_master_host: slurm-master.cluster.com
# establece esta variable al ansible_hostname del host slurm-dbd (igual que slurm-master por defecto)
slurm_dbd_host: "{{ slurm_master_host }}"
# grupo en tu inventario ansible que incluya todos los trabajadores slurm
slurm_workers_group: trabajadores_slurm
# grupo en tu inventario ansible que incluya todos los hosts de envío
slurm_submit_group: hosts_de_envío_slurm
# esta es la configuración "StateSaveLocation" en slurm.conf
slurm_slurmctld_spool_path: /var/spool/slurmctld
# esta es la configuración "SlurmdSpoolDir" en slurm.conf
slurm_slurmd_spool_path: /var/spool/slurmd
# configuraciones para el daemon de contabilidad de slurm
slurm_slurmdbd_mysql_db_name: slurm
slurm_slurmdbd_mysql_user: slurm
slurm_slurmdbd_mysql_password: aadAD432saAdfaoiu
# usuario y grupo que ejecuta los daemons de slurm
slurm_user:
RedHat: "root"
Debian: "slurm"
slurm_group:
RedHat: "root"
Debian: "slurm"
# EPEL es requerido para instalar paquetes de slurm y algunas dependencias en sistemas CentOS/RedHat.
slurm_add_epel_repo: true
# Puedes establecer esto en verdadero para habilitar los repositorios yum de openhpc en centos
# Si planeas usar paquetes de openhpc, también deberías actualizar la lista de paquetes para RedHat a continuación
slurm_add_openhpc_repo: false
slurm_ohpc_repos_url:
rhel7: "https://github.com/openhpc/ohpc/releases/download/v1.3.GA/ohpc-release-1.3-1.el7.x86_64.rpm"
rhel8: "http://repos.openhpc.community/OpenHPC/2/CentOS_8/x86_64/ohpc-release-2-1.el8.x86_64.rpm"
# paquetes de slurm que instalamos en cada miembro del clúster
slurm_packages_common:
RedHat:
- slurm
- slurm-doc
- slurm-contribs
Debian:
- slurm-client
# paquetes de slurm que instalamos solo en el nodo maestro
slurm_packages_master:
RedHat:
- slurm-slurmctld
# - slurm-slurmrestd
Debian:
- slurmctld
# paquetes de slurm que instalamos solo en el nodo slurmdbd
slurm_packages_slurmdbd:
RedHat:
- slurm-slurmdbd
- mariadb-server
Debian:
- slurmdbd
- mariadb-server
# paquetes de slurm que instalamos solo en nodos trabajadores
slurm_packages_worker:
RedHat:
- slurm-slurmd
- vte-profile # evitar el mensaje de error "bash __vte_prompt_command command not found" en los shells interactivos de slurm
Debian:
- slurmd
Configuración de la programación en la nube de slurm para OpenStack
Este rol puede configurar tu clúster slurm para usar programación en la nube en un entorno OpenStack.
Antes de intentar configurarlo, se recomienda leer la guía de programación en la nube de Slurm y los documentos sin configuración de Slurm.
Asegúrate de que tu nube OpenStack tenga habilitada la resolución DNS interna. Esto es necesario para que, al encender un nuevo nodo, su nombre de host pueda ser resuelto por el maestro de slurm utilizando la DNS interna de OpenStack.
También deberías revisar el archivo de configuración de ejemplo slurm.conf.j2.cloud.example proporcionado con este rol.
slurm.conf.j2.cloud.example se ofrece como un ejemplo y deberás adaptarlo a tus necesidades específicas y apuntar la variable del rol slurm_conf_custom_template
a tu configuración personalizada.
Resumen de la configuración para la programación en la nube
Como se describe en la documentación de programación en la nube de slurm, cuando un usuario envía un trabajo a un nodo de nube, el maestro de slurm ejecutará el "ResumeProgram" definido en slurm.conf para iniciar el nodo de cómputo en la nube.
El ResumeProgram proporcionado con este rol es un script en python que utilizará la API de OpenStack para encender los nodos de cómputo. Este script en python requiere el cliente de OpenStack, que se instala dentro de un entorno virtual. El argumento para el programa son los nombres de nodos (usando el formato de expresión de lista de hosts de Slurm) que se van a encender.
Cuando un nodo de cómputo está inactivo, el maestro de slurm ejecutará el SuspendProgram para detener los nodos. El argumento para el programa son los nombres de nodos (usando el formato de expresión de lista de hosts de Slurm) que se van a apagar.
Las opciones de OpenStack utilizadas para iniciar nodos de cómputo dinámicos (sabor, imagen, red, par clave y grupos de seguridad) deben definirse como Características de nodos en slurm.conf por ejemplo.
NodeName=compute-dynamic-[01-04] CPUs=4 RealMemory=7820 State=CLOUD Features=image=centos7,flavor=m1.large,keypair=key123,network=slurm_network,security_groups=default|slurm
Tanto "ResumeProgram" como "SuspendProgram" requieren un archivo de configuración de OpenStack con credenciales válidas. Este archivo se llena por defecto en "/etc/openstack/clouds.yaml" en el host maestro de slurm. Se recomienda utilizar una credencial de aplicación de OpenStack. Revisa la plantilla templates/clouds.yaml.j2 para encontrar las variables del rol requeridas para llenar este archivo de configuración.
Tanto "ResumeProgram" como "SuspendProgram" escribirán registros en "/var/log/messages" en el host maestro de slurm. Puedes consultar este registro con fines de depuración al encender nodos en la nube.
Enfoque recomendado para desplegar slurm con programación en la nube de OpenStack
Asegúrate de tener Slurm 20.02 o superior en tus repositorios para que tengas soporte para modo sin configuración de slurm.
Arranca al menos 3 máquinas:
- maestro de slurm
- nodo de envío de slurm (nodo de inicio de sesión)
- trabajador slurm (esto puede ser una máquina pequeña que utilizaremos solo para crear una imagen OpenStack con la configuración requerida para los nodos de cómputo en la nube)
Llena tu inventario ansible y agrega las máquinas a los grupos de inventario correctos referenciados por las variables de rol slurm_submit_group
y slurm_workers_group
.
Define la variable de rol slurm_master_host
con el nombre de host del maestro slurm. Cada máquina del clúster debe poder resolver este nombre de host a la IP del maestro. Cada máquina en el clúster debe poder conectarse a esta máquina (revisa tus grupos de seguridad y el firewall local).
Crea una copia de slurm.conf.j2.cloud.example
, adáptala a tus necesidades y apunta la variable del rol slurm_conf_custom_template
a tu archivo de configuración. Tu archivo de configuración debe proporcionar una partición llamada "estática" que solo incluye la máquina trabajadora slurm que arrancamos antes.
Define la variable ansible slurm_configless: true
para que los nodos de cómputo estén configurados en modo sin configuración. Cuando un trabajador de slurm esté configurado en modo sin configuración, el daemon slurmd contactará al maestro de slurm en el primer arranque y descargará slurm.conf a /var/run/slurm/conf/slurm.conf
.
Ejecuta el rol para configurar todas tus máquinas y deberías obtener un clúster slurm funcionando con un solo nodo en la partición "estática".
Ahora puedes ejecutar tus playbooks o scripts personalizados para personalizar el trabajador de slurm, por ejemplo, agregar montajes de NFS, instalar el cliente LDAP, habilitar módulos de software, instalar software adicional, etc.
Crea una imagen de OpenStack desde la máquina en la partición "estática" que incluya tus personalizaciones requeridas. Revisa create-slurm-compute-node-image.yml para un ejemplo.
Actualiza tu copia de slurm.conf.j2.cloud.example
y define las características de nodo adecuadas con el nombre de imagen de OpenStack, nombre de clave, nombre de red y grupos de seguridad. Vuelve a ejecutar el playbook para desplegar tu configuración actualizada.
Ahora (esperemos) deberías tener un clúster slurm funcionando con soporte para programación en la nube. Deberías ver las particiones de nube de slurm al ejecutar sinfo -Nel
. Intenta enviar un trabajo a una de las particiones de nube y monitorea /var/log/messages
y /var/log/slurm/slurmctld.log
en el host maestro de slurm.
ansible-galaxy install scicore.slurm