ノート:
- このチュートリアルでは、Oracle Cloudへのアクセス権が必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
OKEおよびOCI File Storageサービスを使用したOCIでのNextflow Pipelinesの実行
イントロダクション
大きなファイルを処理し、中間結果を追跡し、パラレル実行をサポートするマルチステップ・データ・パイプラインを実行する必要があるユースケースが多数あります。Oracle Cloud Infrastructure (OCI) Functionsはイベントドリブンでステートレスなタスクに適していますが、一部のワークフローでは、複数のステップにわたるオーケストレーションおよびデータフロー用に設計されたシステムが必要です。
Nextflowは、コンテナ、入出力処理、OKEでのスケーラブルな実行の組込みサポートにより、このニーズに対応します。これにより、分散環境で効率的に実行される再現可能なパイプラインが可能になります。
目的
- Oracle Cloud Infrastructure Kubernetes Engine (OKE)に最小限のNextflowパイプラインをデプロイします。これには、共有ボリュームにOracle Cloud Infrastructure File Storageサービスを使用し、アクセスおよび制御に要塞ホストを使用します。
前提条件
-
OCIテナンシへのアクセス。
-
OCIコンピュート・インスタンス、OKEクラスタおよびネットワーキング・リソースを作成および管理する権限。
-
パブリック・サブネットを持つVirtual Cloud Network (VCN)内の既存のOKEクラスタ。
-
既存のOCI File Storageサービス・ボリューム。
-
既存のOCIコンピュート・インスタンスが、OKEクラスタと同じVCNのパブリック・サブネットでOCI Bastion jumphostとして機能します。
タスク1: ワーカー・ノードの準備
OKEノードには、OCI File Storageサービス・ボリュームをマウントするためのネットワーク・ファイル・システム(NFS)クライアント・ユーティリティがインストールされている必要があります。
各ワーカー・ノードにSSHで接続し、次のコマンドを実行します。
sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true
ノート: OCI File Storageサービスを手動でマウントする必要はありません。OKEでは、永続ボリュームを使用してマウントが自動的に処理されます。
タスク2: OCI要塞ホストの設定
新しい要塞ホストで開始する場合は、次をインストールします:
-
Oracle Cloud Infrastructureコマンドライン・インタフェース(OCI CLI)。詳細は、Installing the CLIを参照してください。
-
kubectlおよびKubeconfigの設定。詳細は、Kubectlを使用したクラスタへのアクセスを参照してください。
-
クラスタ接続: 「クラスタへのアクセス」の手順に従います。この手順は、OCIコンソールのクラスタの詳細ページにあります。
-
FSSボリュームを、たとえば /mnt/nextflow-fssの下にある要塞にマウントします。たとえば、次のタスク3の図のマウント・ターゲットのプライベートIP、OCI FSSのエクスポート・パス、および要塞の既存の/mnt/nextflow-fssディレクトリを考慮すると、コマンドは次のようになります:
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
ワーカーノードの nfs-utilsも上記のようにインストールされていることを確認してください。
セキュリティ推奨:
-
NSGまたはセキュリティ・リストを使用して、要塞へのSSHアクセスを制限します。FSSアクセス用にポート2049が開いていることを確認します。
-
SSH秘密鍵とkubeconfigが安全に保管されていることを確認します。
タスク3: 要塞からのネクストフローの構成
要塞VMからすべてのステップを実行します。
-
名前空間の作成。
次のコマンドを実行して、専用ネームスペースを作成します。
kubectl create namespace nextflow-ns
-
Configure Persistent Volume and Persistent Volume Claim (PVC)。
-
nextflow-fss.yaml
という名前のファイルを作成し、nextflow-fss.yaml
からコンテンツをダウンロードします。 -
<MOUNT_TARGET_IP>
を、OCIコンソールのOCIファイル・ストレージ・サービスのマウント・ターゲットの詳細にある実際のマウント・ターゲットIP (10.0.10.163
など)に置き換えてください。 -
エクスポート・パスもメモして、この同じファイルで置き換えます。
-
次のコマンドを実行して、ファイルを適用します。
kubectl apply -f nextflow-fss.yaml
-
-
サービス・アカウントおよびロールベースのアクセス制御(RBAC)を作成します。
これらは、OKEクラスタで実行されているネクストフロー・ジョブが、パイプラインの実行中にOKEリソースと対話するために必要な権限を持っていることを確認するために作成されます。
Nextflowは、OKE上で実行する場合、次のことを行う必要があります。
- 各プロセス ステップのポッドを起動します。
- ステータスを監視します。
- アクセス・ログ
- PVCにバインドします。
ただし、デフォルトでは、適切なRBACバインディングを持つサービス・アカウントを介して明示的に付与されないかぎり、Kubernetesジョブにはこれらのアクションを実行する権限がありません。
サービス・アカウントを作成するには、次のコマンドを実行します。
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
-
(オプション)ネクストフロー・パイプラインのテスト・データ・ファイルの作成。
次のコマンドを実行して、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
-
パイプライン・ファイルの作成。
この項では、ネクストフロー・パイプライン・ロジック(
main.nf
)とそのKubernetes固有の構成(nextflow.config
)を定義し、ワークフローの実行方法、使用するコンテナ、およびクラスタ内の共有記憶域のマウント方法を指定します。次のファイルから、要塞VMでこれらのファイルを作成してダウンロードします:
-
Kubernetes ConfigMapを作成します。
Kubernetes ConfigMapを作成して、実行時にNextflowポッドに注入できるように
main.nf
およびnextflow.config
ファイルをパッケージ化します。kubectl create configmap nextflow-code \ --from-file=main.nf \ --from-file=nextflow.config \ -n nextflow-ns \ --dry-run=client -o yaml | kubectl apply -f -
-
ネクストフロー・ジョブYAMLの作成および実行。
この項では、コンテナ内でNextflowワークフローを実行するKubernetesジョブを定義します。以前に作成したサービス・アカウントを使用して権限を取得し、共有ボリュームおよびConfigMapをマウントし、Kubernetesの実行に必要な作業ディレクトリおよび環境変数を設定します。
-
nextflow-job.yaml
という名前のファイルを作成し、nextflow-job.yamlからダウンロードします。 -
次のコマンドを実行して、ファイルを適用します。
kubectl apply -f nextflow-job.yaml
適用を実行すると、ジョブが作成されます。このジョブは、マウントされたパイプライン・コードおよび構成を使用してNextflow runコマンドを実行し、Kubernetesポッドとしてパイプライン・プロセスを起動し、マウントされたOCI File Storageサービス・ボリュームを介して入出力を処理します。
-
-
ポッド実行をモニターします。
次のコマンドを使用して、起動されたポッドおよびジョブ・ログを監視できます。
kubectl get pods -n nextflow-ns -w kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
-
出力ファイルを検索します。
次のコマンドを使用して、
.count
出力ファイルを見つけます。ls /mnt/nextflow-fss/data/*.count
-
再テストのクリーンアップ。
# 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
ノート:
main.nf
またはnextflow.config
ファイルを変更した場合は、ConfigMapも再作成します。
トラブルシューティングのヒント:
- ボリュームがKubernetesによってすべてのポッドに正しくマウントされていることを確認します。
nfs-utils
がすべてのOKEワーカー・ノードにインストールされていることを確認します。- OCI File Storageサービスのエクスポートで、OKEノード・サブネットからのアクセスが許可されていることを確認します。
-
必要に応じて、次のコマンドを使用して、失敗したポッドを記述します。
kubectl describe pod <pod-name> -n nextflow-ns
タスク4: CPUスケジューリングとポッド並列性の評価
Nextflowでは、タスクごとに個別のポッドを起動して、プロセスをパラレル化します。OKEノードに1つのvCPUのみなどのCPUリソースが制限されている場合、Kubernetesは、各ポッドがフルCPUを要求する場合、一度に1つのポッドのみをスケジュールできます。
実行中に、ジョブ・ログに次の警告が表示される場合があります。
WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.
なぜこれが起こるのか:
- Nextflowは、デフォルトですべてのタスクをパラレルに発行します。
- CPUワーカー・ノードが1つあり、そのノードが1つのCPUを使用するポッドをすでに実行している場合、リソースが使用可能になるまで追加のポッドがキューに入れられます。
- これにより実行が遅くなりますが、すべてのジョブが最終的に完了します。
解決策:
-
オプション1:プロセスごとのCPUリクエストを削減します。
nextflow.config
ファイルのタスク当たりのCPU使用率を制限できます。process { cpus = 0.5
提供された
nextflow.config
では、この行はすでに存在しており、非常に単純なデモ・データで十分である0.1に設定されています。必要に応じて、値を含めるか、または値を変更できます。 -
オプション2:より大きなノードを使用します。
ノード・シェイプを2+ vCPUsのノード・シェイプにアップグレードして、複数のポッドをパラレルに実行できるようにします。
関連リンク
確認
- 著者 - Adina Nicolescu (シニア・クラウド・エンジニア)
その他の学習リソース
docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Run Nextflow Pipelines on OCI using OKE and OCI File Storage Service
G34275-01
Copyright ©2025, Oracle and/or its affiliates.