Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Démarrer avec le niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments d'Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles qui sont propres à votre environnement en nuage.
Exécuter les pipelines Nextflow sur OCI à l'aide du service de stockage de fichiers OKE et OCI
Présentation
Il existe de nombreux cas d'utilisation où vous devez exécuter des pipelines de données à 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 sans état et axées sur les événements, certains flux de travail nécessitent un système conçu pour l'orchestration et le flux de données en plusieurs étapes.
Nextflow répond à ce besoin grâce à 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 fonctionnent efficacement dans des environnements distribués.
Objectifs
- Déployez un pipeline Nextflow minimal sur Oracle Cloud Infrastructure Kubernetes Engine (OKE), à l'aide du service de stockage de fichiers d'Oracle Cloud Infrastructure pour les volumes partagés et un hôte bastion pour l'accès et le contrôle.
Préalables
-
Accès à une location OCI.
-
Autorisations de création et de gestion des instances de calcul OCI, des grappes OKE et des ressources de réseau.
-
Grappe OKE existante dans un réseau en nuage virtuel (VCN) qui comporte un sous-réseau public.
-
Volume du service de stockage de fichiers OCI existant.
-
Instance de calcul OCI existante pour agir en tant qu'hôte de saut d'hôte bastion OCI dans un sous-réseau public du même VCN que la grappe OKE.
Tâche 1 : Préparer les noeuds de travail
Les utilitaires client NFS (Network File System) doivent être installés pour les noeuds OKE afin de monter le volume du service de stockage de fichiers OCI.
Accédez par SSH à chaque noeud de travail et exécutez la commande suivante.
sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true
Note : Vous n'avez pas besoin de monter manuellement le service de stockage de fichiers OCI. OKE traitera le montage automatiquement à l'aide du volume persistant.
Tâche 2 : Configurer l'hôte bastion OCI
Si vous commencez avec un nouvel hôte bastion, installez les éléments suivants :
-
Interface de ligne de commande d'Oracle Cloud Infrastructure (interface de ligne de commande OCI). Pour plus d'informations, voir Installation de l'interface de ligne de commande.
-
kubectl et Configuration du fichier Kubeconfig. Pour plus d'informations, voir Accès à une grappe à l'aide de Kubectl.
-
Connexion à la grappe : Suivez les instructions Accéder à votre grappe, que vous pouvez trouver dans la page des détails de la grappe de la console OCI.
-
Montez le volume FSS vers l'hôte bastion, par exemple sous /mnt/nextflow-fss. Par exemple, compte tenu de l'adresse IP privée de la cible de montage à partir de l'image dans la tâche 3 ci-dessous, du chemin d'exportation du service FSS pour OCI et d'un répertoire /mnt/nextflow-fss existant sur l'hôte bastion, la commande serait :
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 travail.
Recommandations de sécurité :
-
Utilisez des groupes de sécurité de réseau ou des listes de sécurité pour restreindre l'accès SSH à l'hôte bastion. Assurez-vous que le port 2049 est ouvert pour l'accès FSS.
-
Assurez-vous que la clé SSH privée et le fichier kubeconfig sont stockés en toute sécurité.
Tâche 3 : Configurer Nextflow à partir de l'hôte bastion
Exécutez toutes les étapes à partir de votre machine virtuelle d'hôte bastion.
-
Créer un espace de noms.
Exécutez la commande suivante pour créer un espace de noms dédié.
kubectl create namespace nextflow-ns
-
Configurer une revendication 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 réelle de la cible de montage (par exemple,10.0.10.163
), trouvée dans les détails de la cible de montage du service de stockage de fichiers pour OCI dans la console OCI. -
Notez également le chemin d'exportation et remplacez-le dans ce même fichier.
-
Exécutez la commande suivante pour appliquer le fichier.
kubectl apply -f nextflow-fss.yaml
-
-
Créez un compte de service et un contrôle d'accès basé sur les rôles.
Ceux-ci seront créés pour garantir que la tâche Nextflow exécutée dans votre grappe OKE dispose des autorisations nécessaires pour interagir avec les ressources OKE lors de l'exécution du pipeline.
Nextflow, lors de l'exécution sur OKE, doit :
- Lancez des pods pour chaque étape du processus.
- Surveillez leur statut.
- Journaux d'accès.
- Liez-vous au PVC.
Toutefois, par défaut, les tâches Kubernetes ne sont pas autorisées à effectuer ces actions, sauf si elles sont accordées explicitement au moyen d'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éer des fichiers de données de test pour le pipeline Nextflow.
Exécutez la commande suivante pour créer des fichiers pour 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éer les fichiers de pipeline.
Cette section définit la logique de pipeline Nextflow (
main.nf
) et sa configuration propre à Kubernetes (nextflow.config
), en spécifiant comment le flux de travail doit s'exécuter, quel conteneur utiliser et comment monter le stockage partagé dans la grappe.Créez et téléchargez ces fichiers sur votre machine virtuelle bastion à partir d'ici :
-
Créez un Kubernetes ConfigMap.
Créez un fichier ConfigMap Kubernetes pour emballer 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 la tâche Nextflow YAML.
Cette section définit la tâche Kubernetes qui exécute le flux de travail Nextflow dans un conteneur. Il utilise le compte de service créé précédemment pour les autorisations, 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 l'application, vous créez la tâche, qui exécute la commande d'exécution Nextflow avec le code et la configuration de pipeline montés, lancez les processus de pipeline en tant que pods Kubernetes et gérez l'entrée/sortie au moyen du volume du service de stockage de fichiers OCI monté.
-
-
Surveillez l'exécution des pods.
Vous pouvez surveiller les pods 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.
Vous devez trouver les fichiers de sortie
.count
à l'aide de la commande suivante.ls /mnt/nextflow-fss/data/*.count
-
Nettoyer pour un nouveau 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
Note : Si vous apportez des modifications aux fichiers
main.nf
ounextflow.config
, recréez également ConfigMap.
Conseils de dépannage :
- 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 travail OKE. - Assurez-vous que l'exportation du service de stockage de fichiers OCI autorise l'accès à partir du sous-réseau de noeuds OKE.
-
Si nécessaire, décrivez les pods défaillants à l'aide de la commande suivante.
kubectl describe pod <pod-name> -n nextflow-ns
Tâche 4 : Évaluer la programmation d'UC et le parallélisme des pods
Nextflow met en parallèle les processus en lançant un pod distinct pour chaque tâche. Si votre noeud OKE a des ressources d'UC limitées, telles que seulement 1 unité centrale virtuelle, Kubernetes ne peut programmer qu'un seul pod à la fois si chaque pod demande une unité centrale complète.
Au cours de l'exécution, vous pouvez voir l'avertissement suivant dans le journal des travaux.
WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.
Pourquoi cela se produit :
- Nextflow soumet toutes les tâches en parallèle par défaut.
- Si vous avez un noeud de travail à 1 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 s'achever.
Solutions :
-
Option 1 : Réduire les demandes d'UC par processus.
Vous pouvez limiter l'utilisation d'UC par tâche dans le fichier
nextflow.config
.process { cpus = 0.5
Dans le
nextflow.config
fourni, vous verrez que cette ligne existe déjà et est réglée à 0.1, ce qui est suffisant pour nos données de démonstration très simples. Vous pouvez l'inclure ou modifier la valeur au besoin. -
Option 2 : Utilisez un noeud plus volumineux.
Mettez à niveau votre forme de noeud vers une forme avec plus de 2 vCPUs pour permettre à d'autres pods de s'exécuter en parallèle.
Liens connexes
Remerciements
- Auteur - Adina Nicolescu (ingénieur en nuage principal)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34272-01
Copyright ©2025, Oracle and/or its affiliates.