Nota

Esegui le pipeline Nextflow su OCI utilizzando il servizio OKE e OCI File Storage

Introduzione

Esistono molti casi d'uso in cui è necessario eseguire pipeline di dati a più fasi che elaborano file di grandi dimensioni, monitorano i risultati intermedi e supportano l'esecuzione parallela. Sebbene le funzioni Oracle Cloud Infrastructure (OCI) siano adatte per attività basate sugli eventi e senza conservazione dello stato, alcuni flussi di lavoro richiedono un sistema progettato per l'orchestrazione e il flusso di dati in più passaggi.

Nextflow risponde a questa esigenza con il supporto integrato per container, gestione di input/output ed esecuzione scalabile su OKE. Consente di eseguire pipeline riproducibili in modo efficiente in ambienti distribuiti.

Obiettivi

Prerequisiti

Task 1: Preparazione dei nodi di lavoro

Per eseguire il MOUNT del volume del servizio di storage di file OCI i nodi OKE devono disporre di utility client NFS (Network File System) installate.

SSH in ciascun nodo di lavoro ed eseguire il comando seguente.

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

Nota: non è necessario eseguire il MOUNT manuale del servizio di storage di file OCI, OKE gestirà il MOUNT automatico utilizzando il volume persistente.

Task 2: Impostazione dell'host bastion OCI

Se si sta iniziando con un nuovo host bastion, installare quanto riportato di seguito.

Suggerimenti di sicurezza:

Task 3: Configura flusso successivo dal bastion

Eseguire tutti i passi dalla VM bastion.

  1. Creare uno spazio di nomi.

    Eseguire il comando seguente per creare uno spazio di nomi dedicato.

    kubectl create namespace nextflow-ns
    
  2. Configura volume persistente e richiesta volume persistente (PVC).

    1. Creare un file denominato nextflow-fss.yaml e scaricare il contenuto da qui: nextflow-fss.yaml.

    2. Assicurarsi di sostituire <MOUNT_TARGET_IP> con l'IP di destinazione di accesso effettivo (ad esempio, 10.0.10.163), trovato nei dettagli della destinazione di accesso del servizio di storage di file OCI in OCI Console.

      IP destinazione di accesso

    3. Prendere nota del percorso di esportazione e sostituirlo in questo stesso file.

    4. Eseguire il comando seguente per applicare il file.

      kubectl apply -f nextflow-fss.yaml
      
  3. Creare un account di servizio e un controllo dell'accesso basato sui ruoli (RBAC, Role-Based Access Control).

    Questi verranno creati per garantire che il job Nextflow in esecuzione nel cluster OKE disponga delle autorizzazioni necessarie per interagire con le risorse OKE durante l'esecuzione della pipeline.

    Nextflow, quando è in esecuzione su OKE, deve:

    • Avvia pod per ogni fase del processo.
    • Monitorare il relativo stato.
    • Log degli accessi.
    • Associazione al PVC.

    Tuttavia, per impostazione predefinita, i job Kubernetes non dispongono dell'autorizzazione per eseguire queste azioni a meno che non vengano concessi in modo esplicito tramite un account di servizio con associazioni RBAC appropriate.

    Eseguire il comando seguente per creare un account di servizio.

    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. (Facoltativo) Creare file di dati di test per la pipeline Nextflow.

    Eseguire il comando seguente per creare alcuni file da utilizzare successivamente in 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. Creare i file della pipeline.

    Questa sezione definisce la logica della pipeline Nextflow (main.nf) e la relativa configurazione specifica di Kubernetes (nextflow.config), specificando come deve essere eseguito il workflow, quale contenitore utilizzare e come eseguire il MOUNT dello storage condiviso nel cluster.

    Creare e scaricare questi file nella VM bastion da qui:

  6. Crea un Kubernetes ConfigMap.

    Creare un package ConfigMap Kubernetes per i file main.nf e nextflow.config in modo che possano essere inseriti nel pod Nextflow in fase di esecuzione.

    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. Crea ed esegui job flusso successivo YAML.

    Questa sezione definisce il job Kubernetes che esegue il workflow Nextflow all'interno di un contenitore. Utilizza l'account di servizio creato in precedenza per le autorizzazioni, esegue il MOUNT del volume condiviso e di ConfigMap e imposta le variabili di directory e ambiente di lavoro necessarie per l'esecuzione di Kubernetes.

    1. Creare i file denominati nextflow-job.yaml e scaricarli da qui: nextflow-job.yaml.

    2. Eseguire il comando seguente per applicare il file.

      kubectl apply -f nextflow-job.yaml
      

    Eseguendo Applica, creerai il job, che esegue il comando di esecuzione Nextflow con il codice e la configurazione della pipeline con MOUNT eseguito, avviando i processi della pipeline come pod Kubernetes e gestendo l'input/output tramite il volume del servizio OCI File Storage con MOUNT eseguito.

  8. Monitorare l'esecuzione dei pod.

    È possibile monitorare i pod avviati e il log dei job utilizzando il comando seguente.

    kubectl get pods -n nextflow-ns -w
    kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
    
  9. Trovare il file di output.

    I file di output .count devono essere trovati utilizzando il comando seguente.

    ls /mnt/nextflow-fss/data/*.count
    
  10. Cleanup per il nuovo test.

    # 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: se si apportano modifiche ai file main.nf o nextflow.config, ricreare anche il file ConfigMap.

Suggerimenti per la risoluzione dei problemi:

Task 4: Valutare la pianificazione della CPU e il parallelismo dei pod

Nextflow parallelizza i processi avviando un pod separato per ogni attività. Se il nodo OKE dispone di risorse CPU limitate, ad esempio solo 1 vCPU, Kubernetes può pianificare un solo pod alla volta se ogni pod richiede una CPU completa.

Durante l'esecuzione, è possibile che nel log dei job venga visualizzata la seguente avvertenza.

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

Perché questo accade:

Soluzioni:

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.