Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
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
- Despliegue un pipeline de Nextflow mínimo en Oracle Cloud Infrastructure Kubernetes Engine (OKE), utilizando el servicio Oracle Cloud Infrastructure File Storage para volúmenes compartidos y un host bastión para acceder y controlar.
Requisitos
-
Acceso a un arrendamiento de OCI.
-
Permisos para crear y gestionar instancias de OCI Compute, clusters de OKE y recursos de red.
-
Cluster de OKE existente en una red virtual en la nube (VCN) que tiene una subred pública.
-
Volumen de servicio de OCI File Storage existente.
-
Instancia de OCI Compute existente para que actúe como punto intermedio de OCI Bastion en una subred pública en la misma VCN que el cluster de OKE.
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:
-
Interfaz de línea de comandos (CLI de OCI) de Oracle Cloud Infrastructure. Para obtener más información, consulte Installing the CLI.
-
kubectl y Configuración de Kubeconfig. Para obtener más información, consulte Acceso a un cluster mediante Kubectl.
-
Conexión de cluster: siga las instrucciones de Acceso al cluster, que puede encontrar en la página de detalles del cluster de la consola de OCI.
-
Monte el volumen FSS en el bastión, por ejemplo, en /mnt/nextflow-fss. Por ejemplo, teniendo en cuenta la IP privada del destino de montaje de la imagen de la Tarea 3 siguiente, la ruta de exportación del FSS de OCI y un directorio /mnt/nextflow-fss existente en el bastión, el comando sería:
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
Asegúrese de que nfs-utils también esté instalado aquí, como arriba, para los nodos de trabajador.
Recomendaciones de seguridad:
-
Utilice NSG o listas de seguridad para restringir el acceso SSH al bastión. Asegúrese de que el puerto 2049 esté abierto para el acceso FSS.
-
Asegúrese de que la clave SSH privada y kubeconfig se almacenen de forma segura.
Tarea 3: Configurar Nextflow desde el bastión
Ejecute todos los pasos desde su máquina virtual bastión.
-
Crear un espacio de nombres.
Ejecute el siguiente comando para crear un espacio de nombres dedicado.
kubectl create namespace nextflow-ns
-
Configuración de solicitud de volumen persistente y solicitud de volumen persistente (PVC).
-
Cree un archivo denominado
nextflow-fss.yaml
y descargue el contenido desde aquí:nextflow-fss.yaml
. -
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. -
Tome nota también de la ruta de exportación y sustitúyala en este mismo archivo.
-
Ejecute el siguiente comando para aplicar el archivo.
kubectl apply -f nextflow-fss.yaml
-
-
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
-
(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
-
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í:
-
Cree un servicio ConfigMap de Kubernetes.
Cree un ConfigMap de Kubernetes para empaquetar los archivos
main.nf
ynextflow.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 -
-
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.
-
Cree los archivos denominados
nextflow-job.yaml
y descárguelos desde aquí: nextflow-job.yaml. -
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.
-
-
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
-
Busque el archivo de salida.
Debe buscar los archivos de salida
.count
mediante el siguiente comando.ls /mnt/nextflow-fss/data/*.count
-
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
onextflow.config
, vuelva a crear también ConfigMap.
Consejos para la solución de problemas:
- Asegúrese de que Kubernetes monte correctamente el volumen en todos los pods.
- Asegúrese de que
nfs-utils
esté instalado en todos los nodos de trabajador de OKE. - Asegúrese de que la exportación del servicio OCI File Storage permite el acceso desde la subred del nodo de OKE.
-
Si es necesario, describa los pods con fallos mediante el siguiente comando.
kubectl describe pod <pod-name> -n nextflow-ns
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:
- Nextflow envía todas las tareas en paralelo por defecto.
- Si tiene un nodo de trabajador de 1 CPU y el nodo ya está ejecutando un pod que utiliza 1 CPU, los pods adicionales se ponen en cola hasta que los recursos estén disponibles.
- Esto se traduce en una ejecución más lenta, pero todos los trabajos terminarán finalmente.
Soluciones:
-
Opción 1: reduzca las solicitudes de CPU por proceso.
Puede limitar el uso de CPU por tarea en el archivo
nextflow.config
.process { cpus = 0.5
En el
nextflow.config
proporcionado verá que esta línea ya existe y está definida en 0.1, lo que es suficiente para nuestros datos de demostración muy simples. Puede incluirlo o modificar el valor según sea necesario. -
Opción 2: utilice un nodo más grande.
Actualice la unidad de nodo a una con 2+ vCPUs para permitir que se ejecuten más pods en paralelo.
Enlaces relacionados
Acuses de recibo
- Autor: Adina Nicolescu (ingeniera superior en la nube)
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.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34280-01
Copyright ©2025, Oracle and/or its affiliates.