-
Notifications
You must be signed in to change notification settings - Fork 12
HTCondor and Docker
HTCondor es una plataforma para HTC que permite el envío de lotes de trabajos siguiendo un esquema de planificación de ejecución de tareas oportunista. Esta plataforma se caracteriza por soportar la ejecución de miles de unidades de trabajo por parte de diferentes usuarios exhibiendo capacidades de tolerancia a fallos. Un proyecto concebido en la Universidad de Wisconsin-Madison en el año 1988 y que ha sido usado en grandes proyectos de investigación a escala global como el LHC.
Un manejador para la ejecución de contenedores. ¿Qué es una imagen, un contenedor, un volumen y un registry? Una imagen es una colección de cambios en el sistema tal y como si copiaran el sistema de ficheros de su computador y lo llevaran comprimido a cualquier otro lugar.
Un contenedor es una instancia en ejecución de una imagen.
Un volumen es una carpeta visible y compartida en el sistema de ficheros de dos entidades (un contenedor y otro contenedor, un contenedor y el computador donde se ejecuta dicho contenedor, etc)
Un Registry es un compendio ordenado y accesible de imágenes.
Un Job en HTCondor es la ejecución de un programa. Estos normalmente pueden ser detallados por el usuario en un archivo denominado ‘Submit File’.
Un universo en HTCondor es un plan de ejecución para un job. Si por ejemplo tratamos de ejecutar una aplicación de java la cual necesita una máquina virtual, entonces se le indica a condor que el universo será Java. Si por el contrario es un programa que no necesita consideraciones especiales, el universo más apropiado sería el ‘Vainilla’ (porque ese sabor combina con cualquier otro :P). En esta guía detallamos el universo Docker.
- No es más que un job del universo Vainilla
- Es necesario especificar la imagen del contenedor a ejecutar
- Es necesario especificar los ficheros/carpetas de entrada/salida (si no se encuentra en el contenedor)
- Uno de los beneficios de usar docker está relacionado con el aislamiento de los recursos que el Job vaya a usar (aunque no es equiparable con el de una máquina virtual)
- Si la imagen no se encuentra en nodo, condor la descargará.
- HTCondor solo consume la API de docker para hallar los stats
- Para todo lo demás inicia un proceso invocando el binario de /usr/bin/docker como si se tratara de una consola
- HTCondor puede pausar, reanudar, crear, eliminar contenedores y, por otro lado, eliminar imágenes
- Un Job de HTCondor que usa el universo Docker, instancia un contendor de una imagen existente. Este contenedor es manejado por HTCondor como si fuera un Job habitual en el computador donde se ejecuta.
- Si no se especifica la opción ‘should_transfer_files = YES’ y no se le indica a HTCondor el nombre del ejecutable, este no será transferido al contenedor porque se presumirá que ya se encuentra allí.
- Los contenedores de Docker corren por defecto con todas las capacidades de root deshabilitadas. De ser necesario, un contenedor puede ejecutarse con estas capacidades indicando en el archivo de ‘submit’ el parametro
DOCKER_DROP_ALL_CAPABILITIES=false.
$ echo "deb [arch=amd64] http://research.cs.wisc.edu/htcondor/ubuntu/stable/ trusty contrib" | sudo tee -a /etc/apt/sources.list
$ wget -qO - http://research.cs.wisc.edu/htcondor/ubuntu/HTCondor-Release.gpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -y condor condor-python condor-std-universe condor-static-shadow
$ cd /etc/yum.repos.d/
# Para Centos 7
$ sudo wget https://research.cs.wisc.edu/htcondor/yum/repo.d/htcondor-stable-rhel7.repo
# Para Centos 6
$ sudo wget https://research.cs.wisc.edu/htcondor/yum/repo.d/htcondor-stable-rhel6.repo
$ sudo yum install -y epel-release
$ sudo yum install -y condor condor-python condor-std-universe condor-static-shadow
Para numerosas distribuciones de linux (ubuntu,debian, suse, centos, fedora, gentoo) se puede instalar así:
$ curl -fsSL https://get.docker.com/ | sudo sh
HTCondor crea un usuario llamado ‘condor’ (ver /etc/passwd), el cual debe pertenecer al grupo ‘docker’ para poder usar Docker.
De ser necesario sudo groupadd docker
$ sudo gpasswd -a ${USER} docker
$ sudo gpasswd -a condor docker
$ newgrp docker
$ sudo service docker restart
$ sudo service condor restart
Se debe crear un archivo en /etc/condor/config.d/condor_config.local (o puede modificarse la configuración global de HTCondor), agregando la línea (ver)
/etc/condor/config.d/condor_config.local
DOCKER = /usr/bin/docker
Luego se puede comprobar si la instalación fue exitosa haciendo:
$ condor_reconfig
$ condor_status -l | grep -i docker
$ condor_status -const HasDocker
Los usuarios pueden ejecutar un programa en un contenedor indicandole a Docker el ejecutable, la imagen y los archivos de entrada y salida del contendor usando un submit file, que para este caso se denomina final.submit
final.submit
universe = docker
docker_image = docker.io/haskell
executable = ghc
arguments = --make Main
should_transfer_files = YES
transfer_output_files = Main
transfer_input_files = Main.hs,Tokens.hs,Grammar.hs
when_to_transfer_output = ON_EXIT
output = out.$(Process)
error = err.$(Process)
log = log.$(Process)
request_memory = 10M
queue 1
Luego se envia para su ejecución escribiendo en la terminal
$ condor_submit final.submit
Ya que los Jobs del universo de Docker son equiparables a los Jobs del universo vainilla, se pueden crear Workflows. Estos se describen en un Dagman file que enumera la relaciones de precedencia o dependencia de datos entre jobs.
dagman.dag
Job Nodo1 final.submit
Job Nodo2 final.submit
Job Nodo3 final.submit
PARENT Nodo2 Nodo3 CHILD Nodo1
NODE_STATUS_FILE status
Luego se envia a Dagman (y por tanto a HTCondor) haciendo
$ condor_submit_dag dagman.dag
Considerando que los contenedores tienen su sistema de ficheros aislado ya sea para el host o para otros contenedores, estos pueden compartir carpetas con el host en una operación denominada ‘mapeo de volúmenes’. El administrador de una máquina (y solo él) puede opcionalmente agregar los directorios de solo lectura o escritura de esa máquina a los contendores que se están ejecutando.
Para ello, en el archivo de configuración de HTCondor se agrega una entrada
DOCKER_VOLUMES = BIG, RONLY, DIR_HDFS
DOCKER_VOLUME_DIR_BIG = /path/to/big
DOCKER_VOLUME_DIR_RONLY = /path/to/readonly:ro
DOCKER_VOLUME_DIR_HDFS = /mnt/hadoop:/mnt/hadoop:ro
DOCKER_MOUNT_VOLUMES = BIG, RONLY, DIR_HDFS
Como es costumbre, condor_startd publicará en los clasificados de la máquina los volúmenes disponibles para montar, junto con el atributo de la máquina, HasDockerVolumeSOME_NAME = true para que los Jobs puedan coincidir con las máquinas cuyos volúmenes necesitan.
Esto puede ser particularmente útil para las aplicaciones que tengan muchos datos. Para las aplicaciones de Hadoop (?).
Por defecto, HTCondor mantendrá las 20 imágenes recientemente usadas en la máquina. Este número podrá ser modificado modificando la variable de configuración DOCKER_IMAGE_CACHE_SIZE.
Al igual que los Vainilla Jobs, el problema con los archivos de entrada y salida puede ser resuelto usando un sistema virtual de ficheros en red.
- The configuration file
- Configure HTCondor
- Configure OpenLava, Torque, SLURM
- Add more programs
- How to monitor Uchuva
- Configure HTCondor with Docker
- Adding TTY.js