Hinweis:

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

Voraussetzungen

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:

Sicherheitsempfehlungen:

Aufgabe 3: Nextflow aus der Bastion konfigurieren

Führen Sie alle Schritte von Ihrer Bastion-VM aus.

  1. Namespace erstellen.

    Führen Sie den folgenden Befehl durch, um einen dedizierten Namespace zu erstellen.

    kubectl create namespace nextflow-ns
    
  2. Persistent Volume and Persistent Volume Claim (PVC) konfigurieren.

    1. Erstellen Sie eine Datei mit dem Namen nextflow-fss.yaml, und laden Sie den Inhalt hier herunter: nextflow-fss.yaml.

    2. 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.

      Mountziel-IP

    3. Notieren Sie sich auch den Exportpfad und ersetzen Sie ihn in derselben Datei.

    4. Führen Sie den folgenden Befehl aus, um die Datei anzuwenden.

      kubectl apply -f nextflow-fss.yaml
      
  3. 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
    
  4. (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
    
  5. 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:

  6. Erstellen Sie eine Kubernetes-ConfigMap.

    Erstellen Sie eine Kubernetes-ConfigMap, um die Dateien main.nf und nextflow.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 -
    
  7. 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.

    1. Erstellen Sie die Dateien mit dem Namen nextflow-job.yaml, und laden Sie sie hier herunter: nextflow-job.yaml.

    2. 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.

  8. 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
    
  9. Suchen Sie die Ausgabedatei.

    Sie sollten die Ausgabedateien .count mit dem folgenden Befehl suchen.

    ls /mnt/nextflow-fss/data/*.count
    
  10. 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 oder nextflow.config vornehmen, erstellen Sie auch die Datei ConfigMap neu.

Tipps zur Fehlerbehebung:

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:

Solutions:

Bestätigungen

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.