Se han creado una serie de tareas (Tekton Tasks) y pipelines (Tekton Pipelines) para facilitar la integración con OpenShift Pipelines y con Data Science Pipelines en el namespace superpod-integartion.
Las tareas son:
fetch-repositorypara copiar el contenido de un repositorio que contenga unDockerfileoContainerfilepara generar una imagen de contenedor que contenga todo lo necesario para ejecutarse en el SuperPOD. Hemos seguido el ejemplo y el repositorio es este mismo (http://github.com/cepr1969/Indra-RHOAI).build-imagepara crear la imagen del contenedor a partir de lo que se ha copiado en la tarea anterior. También se hace el push a un registry (para que luego el enroot pueda descargarse la imagen)enroot-imagepara crear la imagen en formato .sqfs a partir de la imagen subida al registry en el paso anterior.scp-run-collectpara copiar la imagen a SuperPOD, preparar un script para ejecutarla, copiar el script, ejecutar el script en el SuperPOD y recuperar los resultados.
De momento lo tenemos con dos pipelines por que necesitan privilegios distintos:
superpod-phase1:- Descripción: ejecuta las dos primeras tareas
- Parámetros
- IMAGE: nombre de la imagen del contenedor en formato sqfs
- git-url: URL del repositorio git, por ejemplo
'https://github.com/cepr1969/Indra-RHOAI' - git-revision
- CONTAINERFILE_PATH: direcotrio donde está el Dockerfile, referido a la raiz del repositorio, por ejemplo
SuperPOD - SUBDIRECTORY: directorio de donde se saca el contenido de la image, referido a la raiz del repositorio, por ejemplo
SuperPOD - DESTINATION_IMAGE_URL: destino de la imagen en el formato $REGISTRY_NAME:$REGISTRY_PORT/$REPO_IMAGE:$IMAGE_TAG, por ejemplo
'registry.mlops.software.bl.platform:8443/superpod/superpod:latest'
- Volúmenes:
-
shared-workspace: PersistentVolumeClaim donde se copia el repositorio -ssh-directory: secreto con el directorio .ssh para acceder al SuperPOD, por ejemplossh-directory-cpiedraf-docker-config: secreto con el .docker/config.json con las credenciales para hacer el push de la imagen al repositorio, por ejmplodocker-credentials
superpod-phase2:- Descripción: ejecuta las dos últimas tareas
- Parámetros:
- IMAGE: nombre de la imagen del contenedor en formato sqfs
- git-url: URL del repositorio git, por ejemplo
'https://github.com/cepr1969/Indra-RHOAI' - git-revision
- CONTAINERFILE_PATH: direcotrio donde está el Dockerfile, referido a la raiz del repositorio, por ejemplo
SuperPOD - SUBDIRECTORY: directorio de donde se saca el contenido de la image, referido a la raiz del repositorio, por ejemplo
SuperPOD - DESTINATION_IMAGE_URL: destino de la imagen en el formato $REGISTRY_NAME:$REGISTRY_PORT/$REPO_IMAGE:$IMAGE_TAG, por ejemplo
'registry.mlops.software.bl.platform:8443/superpod/superpod:latest' - SSH_USER:
- SSH_HOST:
- SSH_DIRECTORY:
- NODES: Número de nodos
- TASKS: Número de tareas
- WORKER: Lista con los nombre de los nodos de trabajo
- GPUS: Número de GPUs
- JOB_NAME: Nombre del trabajo
- TIME: Límite de tiempo -> e.g. 4 días 8 horas 04:08:00:00
- COMMAND: Comando a ejecutar
- Volúmenes:
shared-workspace: PersistentVolumeClaim donde se copia la imagen y los resultadosssh-directory: secreto genérico con el directorio .ssh para acceder al SuperPOD, por ejemplossh-directory-cpiedrafdocker-config: secreto de tipodocker-registrycon el .docker/config.json con las credenciales para hacer a la imagen en el repositorio, por ejemplodocker-credentials
Para crear el secret para el ssh tenemos que hacer, por ejemplo:
oc create secret generic ssh-directory-helper \
--namespace superpod-integration \
--from-file="config=${HOME}/.ssh/config" \
--from-file="authorized_keys=${HOME}/.ssh/authorized_keys" \
--from-file="id_rsa=${HOME}/.ssh/helper_rsa" \
--from-file="known_hosts=${HOME}/.ssh/known_hosts"El secret para acceder al registry es
oc create secret docker-registry docker-credentials \
--namespace superpod-integration \
--from-file=${HOME}/.docker/config.json