Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Nextflow Pipelines auf OCI mit OKE und OCI File Storage Service ausführen
Einführung
Es gibt viele Anwendungsfälle, in denen Sie mehrstufige Datenpipelines ausführen müssen, die große Dateien verarbeiten, Zwischenergebnisse verfolgen und die parallele Ausführung unterstützen. Während Oracle Cloud Infrastructure (OCI) Functions gut für ereignisgesteuerte und zustandslose Aufgaben geeignet ist, erfordern einige Workflows ein System, das für Orchestrierung und Datenfluss über mehrere Schritte hinweg entwickelt wurde.
Nextflow erfüllt diesen Bedarf mit integrierter Unterstützung für Container, Eingabe-/Ausgabe-Handling und skalierbarer Ausführung auf OKE. Sie ermöglicht reproduzierbare Pipelines, die effizient in verteilten Umgebungen ausgeführt werden.
Ziele
- Stellen Sie eine minimale Nextflow-Pipeline auf Oracle Cloud Infrastructure Kubernetes Engine (OKE) bereit, und verwenden Sie den Oracle Cloud Infrastructure File Storage-Service für gemeinsame Volumes und einen Bastionhost für Zugriff und Kontrolle.
Voraussetzungen
-
Zugriff auf einen OCI-Mandanten.
-
Berechtigungen zum Erstellen und Verwalten von OCI Compute-Instanzen, OKE-Clustern und Netzwerkressourcen.
-
Ein vorhandenes OKE-Cluster in einem virtuellen Cloud-Netzwerk (VCN), das ein öffentliches Subnetz enthält.
-
Vorhandenes OCI File Storage-Service-Volume.
-
Vorhandene OCI Compute-Instanz, die als OCI-Bastion-Jumphost in einem öffentlichen Subnetz im selben VCN wie das OKE-Cluster fungiert.
Aufgabe 1: Worker-Knoten vorbereiten
Für OKE-Knoten müssen Network File System-(NFS-)Clientutilitys installiert sein, um das OCI File Storage-Service-Volume zu mounten.
Greifen Sie mit SSH auf jeden Worker-Knoten zu, und führen Sie den folgenden Befehl aus.
sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true
Hinweis: Sie müssen den OCI File Storage-Service nicht manuell mounten. OKE verarbeitet das Mounten automatisch mit dem persistenten Volume.
Aufgabe 2: OCI-Bastionhost einrichten
Wenn Sie mit einem neuen Bastionhost beginnen, installieren Sie Folgendes:
-
Oracle Cloud Infrastructure-Befehlszeilenschnittstelle (OCI-CLI). Weitere Informationen finden Sie unter CLI installieren.
-
kubectl und Kubeconfig-Setup. Weitere Informationen finden Sie unter Mit Kubectl auf ein Cluster zugreifen.
-
Clusterverbindung: Befolgen Sie die Anweisungen unter Auf Cluster zugreifen, die Sie auf der Detailseite des OCI-Konsolenclusters finden.
-
Mounten Sie das FSS-Volume in die Bastion. Beispiel: /mnt/nextflow-fss. Beispiel: Wenn Sie die private IP des Mountziels aus der Abbildung in Aufgabe 3 unten, den Exportpfad des OCI-FSS und ein vorhandenes /mnt/nextflow-fss-Verzeichnis in der Bastion berücksichtigen, lautet der Befehl:
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
Stellen Sie sicher, dass nfs-utils auch hier wie oben für die Worker-Knoten installiert ist.
Sicherheitsempfehlungen:
-
Verwenden Sie NSGs oder Sicherheitslisten, um den SSH-Zugriff auf die Bastion einzuschränken. Stellen Sie sicher, dass Port 2049 für den FSS-Zugriff geöffnet ist.
-
Stellen Sie sicher, dass der SSH-Private Key und kubeconfig sicher gespeichert sind.
Aufgabe 3: Nextflow aus der Bastion konfigurieren
Führen Sie alle Schritte von Ihrer Bastion-VM aus.
-
Namespace erstellen.
Führen Sie den folgenden Befehl durch, um einen dedizierten Namespace zu erstellen.
kubectl create namespace nextflow-ns
-
Persistent Volume and Persistent Volume Claim (PVC) konfigurieren.
-
Erstellen Sie eine Datei mit dem Namen
nextflow-fss.yaml
, und laden Sie den Inhalt hier herunter:nextflow-fss.yaml
. -
Ersetzen Sie
<MOUNT_TARGET_IP>
durch die tatsächliche Mountziel-IP (z.B.10.0.10.163
), die in den Mountzieldetails des OCI File Storage-Service in der OCI-Konsole enthalten ist. -
Notieren Sie sich auch den Exportpfad und ersetzen Sie ihn in derselben Datei.
-
Führen Sie den folgenden Befehl aus, um die Datei anzuwenden.
kubectl apply -f nextflow-fss.yaml
-
-
Serviceaccount und rollenbasierte Zugriffskontrolle (Role-Based Access Control, RBAC) erstellen.
Diese werden erstellt, um sicherzustellen, dass der Nextflow-Job, der in Ihrem OKE-Cluster ausgeführt wird, über die erforderlichen Berechtigungen zum Interagieren mit OKE-Ressourcen während der Pipelineausführung verfügt.
Nextflow, wenn es auf OKE ausgeführt wird, muss:
- Starten Sie Pods für jeden Prozessschritt.
- ihren Status zu überwachen.
- Zugriffslogs.
- An PVC binden.
Standardmäßig sind Kubernetes-Jobs jedoch nicht berechtigt, diese Aktionen auszuführen, es sei denn, sie werden explizit über einen Serviceaccount mit korrekten RBAC-Bindings erteilt.
Führen Sie den folgenden Befehl durch, um einen Serviceaccount zu erstellen.
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
-
(Optional) Testdatendateien für Nextflow-Pipeline erstellen.
Führen Sie den folgenden Befehl aus, um einige Dateien für die spätere Verwendung in Nextflow zu erstellen.
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
-
Pipeline-Dateien erstellen.
In diesem Abschnitt werden die Nextflow-Pipelinelogik (
main.nf
) und die zugehörige Kubernetes-spezifische Konfiguration (nextflow.config
) definiert, in der angegeben wird, wie der Workflow ausgeführt werden soll, welcher Container verwendet werden soll und wie Shared Storage im Cluster gemountet wird.Erstellen Sie diese Dateien, und laden Sie sie von hier auf Ihre Bastion-VM herunter:
-
Erstellen Sie eine Kubernetes-ConfigMap.
Erstellen Sie eine Kubernetes-ConfigMap, um die Dateien
main.nf
undnextflow.config
zu verpacken, damit sie zur Laufzeit in den Nextflow-Pod injiziert werden können.kubectl create configmap nextflow-code \ --from-file=main.nf \ --from-file=nextflow.config \ -n nextflow-ns \ --dry-run=client -o yaml | kubectl apply -f -
-
Nextflow-Job YAML erstellen und ausführen.
In diesem Abschnitt wird der Kubernetes-Job definiert, der den Nextflow-Workflow in einem Container ausführt. Er verwendet den zuvor erstellten Serviceaccount für Berechtigungen, mountet das freigegebene Volume und ConfigMap und legt das Arbeitsverzeichnis und die Umgebungsvariablen fest, die für die Kubernetes-Ausführung erforderlich sind.
-
Erstellen Sie die Dateien mit dem Namen
nextflow-job.yaml
, und laden Sie sie hier herunter: nextflow-job.yaml. -
Führen Sie den folgenden Befehl aus, um die Datei anzuwenden.
kubectl apply -f nextflow-job.yaml
Wenn Sie Apply ausführen, erstellen Sie den Job, der den Nextflow-Ausführungsbefehl mit dem gemounteten Pipelinecode und der gemounteten Pipelinekonfiguration ausführt, Pipelineprozesse als Kubernetes-Pods startet und Eingabe/Ausgabe über das gemountete OCI File Storage-Service-Volume verarbeitet.
-
-
Pods-Ausführung überwachen.
Mit dem folgenden Befehl können Sie die gestarteten Pods und das Joblog überwachen.
kubectl get pods -n nextflow-ns -w kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
-
Suchen Sie die Ausgabedatei.
Sie sollten die Ausgabedateien
.count
mit dem folgenden Befehl suchen.ls /mnt/nextflow-fss/data/*.count
-
Bereinigung für erneutes Testen.
# 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
Hinweis: Wenn Sie Änderungen an den Dateien
main.nf
odernextflow.config
vornehmen, erstellen Sie auch die Datei ConfigMap neu.
Tipps zur Fehlerbehebung:
- Stellen Sie sicher, dass das Volume von Kubernetes auf allen Pods korrekt gemountet ist.
- Stellen Sie sicher, dass
nfs-utils
auf allen OKE-Worker-Knoten installiert ist. - Stellen Sie sicher, dass der OCI File Storage-Serviceexport den Zugriff über das OKE-Knotensubnetz zulässt.
-
Beschreiben Sie bei Bedarf fehlerhafte Pods mit dem folgenden Befehl.
kubectl describe pod <pod-name> -n nextflow-ns
Aufgabe 4: CPU-Planung und Podparallelität auswerten
Nextflow parallelisiert Prozesse, indem ein separater Pod für jede Aufgabe gestartet wird. Wenn Ihr OKE-Knoten über begrenzte CPU-Ressourcen verfügt, wie z.B. nur 1 vCPU, kann Kubernetes jeweils nur einen Pod planen, wenn jeder Pod eine vollständige CPU anfordert.
Während der Ausführung wird möglicherweise die folgende Warnung im Joblog angezeigt.
WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.
Warum dies geschieht:
- Nextflow leitet standardmäßig alle Tasks parallel weiter.
- Wenn Sie einen 1-CPU-Worker-Knoten haben und der Knoten bereits einen Pod ausführt, der 1 CPU verwendet, werden zusätzliche Pods in die Queue gestellt, bis Ressourcen verfügbar sind.
- Dies führt zu einer langsameren Ausführung, aber alle Jobs werden schließlich abgeschlossen.
Solutions:
-
Option 1: Reduzieren Sie CPU-Anforderungen pro Prozess.
Sie können die CPU-Auslastung pro Aufgabe in der Datei
nextflow.config
begrenzen.process { cpus = 0.5
In der bereitgestellten
nextflow.config
sehen Sie, dass diese Zeile bereits vorhanden ist und auf 0.1 gesetzt ist, was für unsere sehr einfachen Demodaten ausreicht. Sie können ihn einschließen oder den Wert nach Bedarf ändern. -
Option 2: Verwenden Sie einen größeren Knoten.
Aktualisieren Sie die Knotenausprägung mit 2+ vCPUs auf eine Ausprägung, damit mehr Pods parallel ausgeführt werden können.
Verwandte Links
Bestätigungen
- Autor – Adina Nicolescu (Senior Cloud Engineer)
Weitere Lernressourcen
Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34271-01
Copyright ©2025, Oracle and/or its affiliates.