Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriversi a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Quando completi il tuo laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
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
- Implementa una pipeline Nextflow minima su Oracle Cloud Infrastructure Kubernetes Engine (OKE), utilizzando il servizio Oracle Cloud Infrastructure File Storage per i volumi condivisi e un bastion host per l'accesso e il controllo.
Prerequisiti
-
Accesso a una tenancy OCI.
-
Autorizzazioni per creare e gestire istanze di OCI Compute, cluster OKE e risorse di networking.
-
Cluster OKE esistente in una rete cloud virtuale (VCN) che dispone di una subnet pubblica.
-
Volume del servizio OCI File Storage esistente.
-
Istanza di computazione OCI esistente per agire come OCI Bastion jumphost in una subnet pubblica nella stessa VCN del cluster OKE.
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.
-
Interfaccia a riga di comando di Oracle Cloud Infrastructure (OCI CLI). Per ulteriori informazioni, vedere Installazione dell'interfaccia CLI.
-
kubectl e impostazione di Kubeconfig. Per ulteriori informazioni, vedere Accesso a un cluster mediante Kubectl.
-
Connessione al cluster: seguire le istruzioni Accedi al cluster disponibili nella pagina dei dettagli del cluster di OCI Console.
-
Installare il volume FSS nel bastion, ad esempio in /mnt/nextflow-fss. Ad esempio, se si considera l'IP privato della destinazione di accesso dall'immagine nel Task 3 riportato di seguito, il percorso di esportazione di OCI FSS e una directory /mnt/nextflow-fss esistente nel bastion, il comando sarà:
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
Accertarsi che anche nfs-utils sia installato qui, come descritto sopra, per i nodi di lavoro.
Suggerimenti di sicurezza:
-
Utilizzare i gruppi NSG o le liste di sicurezza per limitare l'accesso SSH al bastion. Accertarsi che la porta 2049 sia aperta per l'accesso FSS.
-
Assicurarsi che la chiave SSH privata e kubeconfig siano memorizzate in modo sicuro.
Task 3: Configura flusso successivo dal bastion
Eseguire tutti i passi dalla VM bastion.
-
Creare uno spazio di nomi.
Eseguire il comando seguente per creare uno spazio di nomi dedicato.
kubectl create namespace nextflow-ns
-
Configura volume persistente e richiesta volume persistente (PVC).
-
Creare un file denominato
nextflow-fss.yaml
e scaricare il contenuto da qui:nextflow-fss.yaml
. -
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. -
Prendere nota del percorso di esportazione e sostituirlo in questo stesso file.
-
Eseguire il comando seguente per applicare il file.
kubectl apply -f nextflow-fss.yaml
-
-
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
-
(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
-
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:
-
Crea un Kubernetes ConfigMap.
Creare un package ConfigMap Kubernetes per i file
main.nf
enextflow.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 -
-
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.
-
Creare i file denominati
nextflow-job.yaml
e scaricarli da qui: nextflow-job.yaml. -
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.
-
-
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
-
Trovare il file di output.
I file di output
.count
devono essere trovati utilizzando il comando seguente.ls /mnt/nextflow-fss/data/*.count
-
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
onextflow.config
, ricreare anche il file ConfigMap.
Suggerimenti per la risoluzione dei problemi:
- Assicurarsi che il volume sia montato correttamente da Kubernetes su tutti i pod.
- Assicurarsi che
nfs-utils
sia installato su tutti i nodi di lavoro OKE. - Assicurarsi che l'esportazione del servizio di storage di file OCI consenta l'accesso dalla subnet del nodo OKE.
-
Se necessario, descrivere i pod in cui si è verificato l'errore utilizzando il comando seguente.
kubectl describe pod <pod-name> -n nextflow-ns
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:
- Nextflow sottomette tutti i task in parallelo per impostazione predefinita.
- Se si dispone di un nodo di lavoro CPU 1 e il nodo sta già eseguendo un pod che utilizza 1 CPU, i pod aggiuntivi vengono messi in coda finché le risorse non diventano disponibili.
- Ciò si traduce in un'esecuzione più lenta, ma alla fine tutti i job verranno completati.
Soluzioni:
-
Opzione 1: ridurre le richieste CPU per processo.
È possibile limitare l'uso della CPU per task nel file
nextflow.config
.process { cpus = 0.5
Nel
nextflow.config
fornito vedrai che questa riga esiste già ed è impostata su 0.1 che è sufficiente per i nostri dati demo molto semplici. È possibile includerlo o modificare il valore in base alle esigenze. -
Opzione 2: utilizzare un nodo più grande.
Aggiornare la forma del nodo a una con 2+ vCPUs per consentire l'esecuzione parallela di più pod.
Collegamenti correlati
Conferme
- Autore - Adina Nicolescu (ingegnere senior cloud)
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.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34274-01
Copyright ©2025, Oracle and/or its affiliates.