Note:

Ejecutar pipelines de Nextflow en OCI con OKE y el servicio OCI File Storage

Introducción

Hay muchos casos de uso en los que necesita ejecutar pipelines de datos de varios pasos que procesan archivos de gran tamaño, realizan un seguimiento de los resultados intermedios y soportan la ejecución en paralelo. Aunque Oracle Cloud Infrastructure (OCI) Functions es adecuado para tareas basadas en eventos y sin estado, algunos flujos de trabajo requieren un sistema diseñado para la orquestación y el flujo de datos en varios pasos.

Nextflow aborda esta necesidad con soporte integrado para contenedores, manejo de entrada/salida y ejecución escalable en OKE. Permite pipelines reproducibles que se ejecutan de forma eficaz en entornos distribuidos.

Objetivos

Requisitos

Tarea 1: Preparación de los nodos de trabajador

Los nodos de OKE deben tener instaladas utilidades de cliente del sistema de archivos de red (NFS) para montar el volumen del servicio OCI File Storage.

Utilice SSH en cada nodo de trabajador y ejecute el siguiente comando.

sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true

Nota: No es necesario montar manualmente el servicio OCI File Storage; OKE gestionará el montaje automáticamente mediante el volumen persistente.

Tarea 2: Configuración del host de OCI Bastion

Si está comenzando con un nuevo host bastión, instale lo siguiente:

Recomendaciones de seguridad:

Tarea 3: Configurar Nextflow desde el bastión

Ejecute todos los pasos desde su máquina virtual bastión.

  1. Crear un espacio de nombres.

    Ejecute el siguiente comando para crear un espacio de nombres dedicado.

    kubectl create namespace nextflow-ns
    
  2. Configuración de solicitud de volumen persistente y solicitud de volumen persistente (PVC).

    1. Cree un archivo denominado nextflow-fss.yaml y descargue el contenido desde aquí: nextflow-fss.yaml.

    2. Asegúrese de sustituir <MOUNT_TARGET_IP> por la IP de destino de montaje real (por ejemplo, 10.0.10.163), que se encuentra en los detalles del destino de montaje del servicio OCI File Storage en la consola de OCI.

      IP de destino de montaje

    3. Tome nota también de la ruta de exportación y sustitúyala en este mismo archivo.

    4. Ejecute el siguiente comando para aplicar el archivo.

      kubectl apply -f nextflow-fss.yaml
      
  3. Crear una cuenta de servicio y un control de acceso basado en roles (RBAC).

    Se crearán para garantizar que el trabajo Nextflow que se ejecuta en el cluster de OKE tenga los permisos necesarios para interactuar con los recursos de OKE durante la ejecución del pipeline.

    Nextflow, cuando se ejecuta en OKE, necesita:

    • Inicie pods para cada paso del proceso.
    • Supervisar su estado.
    • Logs de acceso.
    • Enlace al PVC.

    Sin embargo, por defecto, los trabajos de Kubernetes no tienen permiso para realizar estas acciones a menos que se otorguen explícitamente a través de una cuenta de servicio con enlaces RBAC adecuados.

    Ejecute el siguiente comando para crear una cuenta de servicio.

    kubectl create serviceaccount nextflow-sa -n nextflow-ns
    
    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    name: nextflow-pod-role
    namespace: nextflow-ns
    rules:
    - apiGroups: [""]
    resources: ["pods", "pods/log", "pods/status", "persistentvolumeclaims"]
    verbs: ["create", "get", "watch", "list", "delete"]
    EOF
    
    kubectl apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    name: nextflow-pod-binding
    namespace: nextflow-ns
    subjects:
    - kind: ServiceAccount
    name: nextflow-sa
    namespace: nextflow-ns
    roleRef:
    kind: Role
    name: nextflow-pod-role
    apiGroup: rbac.authorization.k8s.io
    EOF
    
  4. (Opcional) Crear archivos de datos de prueba para el pipeline de flujo siguiente.

    Ejecute el siguiente comando para crear algunos archivos para su uso posterior en Nextflow.

    mkdir -p /mnt/nextflow-fss/data
    echo -e "line1\nline2\nline3" > /mnt/nextflow-fss/data/test1.txt
    echo -e "nextflow\nrocks"     > /mnt/nextflow-fss/data/test2.txt
    
  5. Cree los archivos de pipeline.

    Esta sección define la lógica de pipeline de Nextflow (main.nf) y su configuración específica de Kubernetes (nextflow.config), especificando cómo se debe ejecutar el flujo de trabajo, qué contenedor utilizar y cómo montar el almacenamiento compartido en el cluster.

    Cree y descargue estos archivos en la máquina virtual de bastión desde aquí:

  6. Cree un servicio ConfigMap de Kubernetes.

    Cree un ConfigMap de Kubernetes para empaquetar los archivos main.nf y nextflow.config para que se puedan inyectar en el pod de Nextflow en tiempo de ejecución.

    kubectl create configmap nextflow-code \
    --from-file=main.nf \
    --from-file=nextflow.config \
    -n nextflow-ns \
    --dry-run=client -o yaml | kubectl apply -f -
    
  7. Crear y ejecutar el trabajo de flujo siguiente YAML.

    Esta sección define el trabajo de Kubernetes que ejecuta el flujo de trabajo Nextflow dentro de un contenedor. Utiliza la cuenta de servicio creada anteriormente para permisos, monta el volumen compartido y ConfigMap, y define el directorio de trabajo y las variables de entorno necesarias para la ejecución de Kubernetes.

    1. Cree los archivos denominados nextflow-job.yaml y descárguelos desde aquí: nextflow-job.yaml.

    2. Ejecute el siguiente comando para aplicar el archivo.

      kubectl apply -f nextflow-job.yaml
      

    Al ejecutar la aplicación, creará el trabajo, que ejecuta el comando de ejecución Nextflow con el código y la configuración de pipeline montados, iniciará procesos de pipeline como pods de Kubernetes y gestionará la entrada/salida a través del volumen de servicio de OCI File Storage montado.

  8. Supervisar la ejecución de pods.

    Puede supervisar los pods que se inician y el log de trabajos mediante el siguiente comando.

    kubectl get pods -n nextflow-ns -w
    kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
    
  9. Busque el archivo de salida.

    Debe buscar los archivos de salida .count mediante el siguiente comando.

    ls /mnt/nextflow-fss/data/*.count
    
  10. Limpiar para volver a probar.

    # Remove old job and pods
    kubectl delete job --all -n nextflow-ns
    kubectl delete pod --all -n nextflow-ns
    
    # Delete only count files to rerun
    sudo find /mnt/nextflow-fss -name "*.count" -type f -delete
    

Nota: En caso de que realice cambios en los archivos main.nf o nextflow.config, vuelva a crear también ConfigMap.

Consejos para la solución de problemas:

Tarea 4: Evaluación de la programación de CPU y el paralelismo de pod

Nextflow paraleliza los procesos iniciando un pod independiente para cada tarea. Si el nodo de OKE tiene recursos de CPU limitados, como solo 1 vCPU, Kubernetes solo puede programar un pod a la vez si cada pod solicita una CPU completa.

Durante la ejecución, puede que vea la siguiente advertencia en el log de trabajos.

WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.

Por qué sucede esto:

Soluciones:

Acuses de recibo

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.