Remarques :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction à Oracle Cloud Infrastructure Free Tier.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
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
- Déployez un pipeline Nextflow minimal sur Oracle Cloud Infrastructure Kubernetes Engine (OKE), à l'aide du service Oracle Cloud Infrastructure File Storage pour les volumes partagés et d'un bastion pour l'accès et le contrôle.
Prérequis
-
Accès à une location OCI.
-
Droits d'accès permettant de créer et de gérer des instances OCI Compute, des clusters OKE et des ressources réseau.
-
Cluster OKE existant dans un réseau cloud virtuel (VCN) doté d'un sous-réseau public.
-
Volume de service OCI File Storage existant.
-
Instance OCI Compute existante qui agit en tant qu'hôte Jumphost OCI Bastion dans un sous-réseau public du même VCN que le cluster OKE.
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 :
-
Interface de ligne de commande Oracle Cloud Infrastructure (interface de ligne de commande OCI). Pour plus d'informations, reportez-vous à Installation de la CLI.
-
kubectl et Configuration de Kubeconfig. Pour plus d'informations, reportez-vous à Accès à un cluster à l'aide de Kubectl.
-
Connexion au cluster : suivez les instructions d'accès au cluster disponibles sur la page de détails du cluster de la console OCI.
-
Montez le volume FSS sur le bastion, par exemple sous /mnt/nextflow-fss. Par exemple, si l'on considère l'adresse IP privée de la cible de montage à partir de l'image de la tâche 3 ci-dessous, le chemin d'export du FSS OCI et un répertoire /mnt/nextflow-fss existant sur le bastion, la commande est la suivante :
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
Assurez-vous que nfs-utils est également installé ici, comme ci-dessus, pour les noeuds de processus actif.
Recommandations de sécurité:
-
Utilisez des groupes de sécurité réseau ou des listes de sécurité pour restreindre l'accès SSH au bastion. Assurez-vous que le port 2049 est ouvert pour l'accès FSS.
-
Assurez-vous que la clé SSH privée et kubeconfig sont stockés en toute sécurité.
Tâche 3 : configurer Nextflow à partir du bastion
Exécutez toutes les étapes à partir de la machine virtuelle de bastion.
-
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
-
Configuration de la demande de volume persistant et de volume persistant.
-
Créez un fichier nommé
nextflow-fss.yaml
et téléchargez le contenu à partir d'ici :nextflow-fss.yaml
. -
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. -
Notez également le chemin d'export et remplacez-le dans ce même fichier.
-
Exécutez la commande suivante pour appliquer le fichier.
kubectl apply -f nextflow-fss.yaml
-
-
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
-
(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
-
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 :
-
Créez un ConfigMap Kubernetes.
Créez un fichier ConfigMap Kubernetes pour packager les fichiers
main.nf
etnextflow.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 -
-
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.
-
Créez les fichiers nommés
nextflow-job.yaml
et téléchargez-les à partir d'ici : nextflow-job.yaml. -
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é.
-
-
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
-
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
-
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
ounextflow.config
, recréez également ConfigMap.
Conseils de résolution des problèmes :
- Assurez-vous que le volume est correctement monté par Kubernetes sur tous les pods.
- Assurez-vous que
nfs-utils
est installé sur tous les noeuds de processus actif OKE. - Assurez-vous que l'export de service OCI File Storage autorise l'accès à partir du sous-réseau de noeud OKE.
-
Si nécessaire, décrivez les pods en échec à l'aide de la commande suivante.
kubectl describe pod <pod-name> -n nextflow-ns
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 :
- Par défaut, Nextflow soumet toutes les tâches en parallèle.
- Si vous disposez d'1 noeud de processus actif d'UC et que le noeud exécute déjà un pod qui utilise 1 UC, des pods supplémentaires sont mis en file d'attente jusqu'à ce que les ressources deviennent disponibles.
- Cela ralentit l'exécution, mais tous les travaux finiront par se terminer.
Solutions:
-
Option 1 : réduisez les demandes de CPU par processus.
Vous pouvez limiter l'utilisation de l'UC par tâche dans le fichier
nextflow.config
.process { cpus = 0.5
Dans le fichier
nextflow.config
fourni, vous verrez que cette ligne existe déjà et est définie sur 0.1, ce qui est suffisant pour nos données de démonstration très simples. Vous pouvez l'inclure ou modifier la valeur si nécessaire. -
Option 2 : utilisez un noeud plus grand.
Mettez à niveau la forme de noeud vers une forme avec plus de 2 caractères vCPUs pour permettre l'exécution en parallèle de pods supplémentaires.
Liens connexes
Accusés de réception
- Auteur - Adina Nicolescu (ingénieur cloud senior)
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.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34273-01
Copyright ©2025, Oracle and/or its affiliates.