Remarques :

Exécution de pipelines Nextflow sur OCI à l'aide d'OKE et du service OCI File Storage

Introduction

Dans de nombreux cas d'utilisation, vous devez exécuter des pipelines de données en plusieurs étapes qui traitent des fichiers volumineux, assurent le suivi des résultats intermédiaires et prennent en charge l'exécution en parallèle. Bien qu'Oracle Cloud Infrastructure (OCI) Functions soit bien adapté aux tâches orientées événements et sans conservation de statut, certains workflows nécessitent un système conçu pour l'orchestration et le flux de données en plusieurs étapes.

Nextflow répond à ce besoin avec la prise en charge intégrée des conteneurs, de la gestion des entrées/sorties et de l'exécution évolutive sur OKE. Il permet des pipelines reproductibles qui s'exécutent efficacement dans des environnements distribués.

Objectifs

Prérequis

Tâche 1 : préparer les noeuds de processus actif

Des utilitaires client NFS (Network File System) doivent être installés sur les noeuds OKE pour monter le volume de service OCI File Storage.

Connectez-vous via SSH à chaque noeud de processus actif et exécutez la commande suivante.

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

Remarque : vous n'avez pas besoin de monter manuellement le service OCI File Storage. OKE gère automatiquement le montage à l'aide du volume persistant.

Tâche 2 : configuration de l'hôte OCI Bastion

Si vous démarrez avec un nouveau bastion, installez ce qui suit :

Recommandations de sécurité:

Tâche 3 : configurer Nextflow à partir du bastion

Exécutez toutes les étapes à partir de la machine virtuelle de bastion.

  1. Créez un espace de noms.

    Exécutez la commande suivante pour créer un espace de noms dédié.

    kubectl create namespace nextflow-ns
    
  2. Configuration de la demande de volume persistant et de volume persistant.

    1. Créez un fichier nommé nextflow-fss.yaml et téléchargez le contenu à partir d'ici : nextflow-fss.yaml.

    2. Veillez à remplacer <MOUNT_TARGET_IP> par l'adresse IP de cible de montage réelle (par exemple, 10.0.10.163), trouvée dans les détails de cible de montage du service OCI File Storage dans la console OCI.

      Adresse IP de cible de montage

    3. Notez également le chemin d'export et remplacez-le dans ce même fichier.

    4. Exécutez la commande suivante pour appliquer le fichier.

      kubectl apply -f nextflow-fss.yaml
      
  3. Créer un compte de service et un contrôle d'accès basé sur les rôles (RBAC).

    Ceux-ci seront créés pour garantir que le travail Nextflow en cours d'exécution dans votre cluster OKE dispose des droits d'accès nécessaires pour interagir avec les ressources OKE pendant l'exécution du pipeline.

    Nextflow, lorsqu'il est exécuté sur OKE, doit :

    • Lancez des pods pour chaque étape du processus.
    • Surveiller leur statut.
    • Journaux d'accès.
    • Liaison à la demande de volume persistant.

    Toutefois, par défaut, les travaux Kubernetes ne sont pas autorisés à effectuer ces actions, sauf s'ils sont explicitement accordés via un compte de service avec des liaisons RBAC appropriées.

    Exécutez la commande suivante pour créer un compte de service.

    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. (Facultatif) Création de fichiers de données de test pour le pipeline Nextflow.

    Exécutez la commande suivante pour créer des fichiers en vue d'une utilisation ultérieure dans 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. Créez les fichiers de pipeline.

    Cette section définit la logique de pipeline Nextflow (main.nf) et sa configuration propre à Kubernetes (nextflow.config), en indiquant comment le workflow doit s'exécuter, quel conteneur utiliser et comment monter le stockage partagé dans le cluster.

    Créez et téléchargez ces fichiers sur la machine virtuelle de bastion à partir d'ici :

  6. Créez un ConfigMap Kubernetes.

    Créez un fichier ConfigMap Kubernetes pour packager les fichiers main.nf et nextflow.config afin qu'ils puissent être injectés dans le pod Nextflow lors de l'exécution.

    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. Créer et exécuter le travail Nextflow YAML.

    Cette section définit le travail Kubernetes qui exécute le workflow Nextflow dans un conteneur. Il utilise le compte de service précédemment créé pour les droits d'accès, monte le volume partagé et ConfigMap, et définit le répertoire de travail et les variables d'environnement nécessaires à l'exécution de Kubernetes.

    1. Créez les fichiers nommés nextflow-job.yaml et téléchargez-les à partir d'ici : nextflow-job.yaml.

    2. Exécutez la commande suivante pour appliquer le fichier.

      kubectl apply -f nextflow-job.yaml
      

    En exécutant Apply, vous créez le travail, qui exécute la commande d'exécution Nextflow avec le code de pipeline et la configuration montés, lancez des processus de pipeline en tant que pods Kubernetes et gérez les entrées/sorties via le volume de service OCI File Storage monté.

  8. Surveillez l'exécution des pods.

    Vous pouvez surveiller les pods qui sont lancés et le journal des travaux à l'aide de la commande suivante.

    kubectl get pods -n nextflow-ns -w
    kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
    
  9. Recherchez le fichier de sortie.

    Les fichiers de sortie .count doivent être trouvés à l'aide de la commande suivante.

    ls /mnt/nextflow-fss/data/*.count
    
  10. Nettoyer pour les nouveaux tests.

    # 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
    

Remarque : si vous modifiez les fichiers main.nf ou nextflow.config, recréez également ConfigMap.

Conseils de résolution des problèmes :

Tâche 4 : évaluation de la planification de l'UC et du parallélisme des pods

Nextflow parallèle les processus en lançant un pod distinct pour chaque tâche. Si votre noeud OKE dispose de ressources d'UC limitées, telles que 1 UC virtuelle uniquement, Kubernetes ne peut programmer qu'un pod à la fois si chaque pod demande une UC complète.

Au cours de l'exécution, l'avertissement suivant peut apparaître dans le journal des travaux.

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

Pourquoi cela se produit-il :

Solutions:

Accusés de réception

Ressources de formation supplémentaires

Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.