注意:

使用 OKE 和 OCI 文件存储服务在 OCI 上运行 Nextflow 管道

简介

在许多用例中,您需要运行多步骤数据管道来处理大型文件、跟踪中间结果并支持并行执行。虽然 Oracle Cloud Infrastructure (OCI) Functions 非常适合事件驱动和无状态任务,但一些工作流需要专为跨多个步骤进行编排和数据流设计的系统。

Nextflow 可满足这一需求,内置支持容器、输入/输出处理以及 OKE 上的可伸缩执行。它支持在分布式环境中高效运行的可重现管道。

目标

先决条件

任务 1:准备 Worker 节点

OKE 节点必须安装网络文件系统 (Network File System,NFS) 客户端实用程序才能挂载 OCI 文件存储服务卷。

通过 SSH 连接到每个 worker 节点并运行以下命令。

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

注:您无需手动挂载 OCI 文件存储服务,OKE 将使用持久性卷自动处理挂载。

任务 2:设置 OCI 堡垒主机

如果要从新的堡垒主机开始,请安装以下命令:

安全建议:

任务 3:配置堡垒中的下一流

运行堡垒 VM 中的所有步骤。

  1. Create a Namespace(创建名称空间)

    运行以下命令以创建专用名称空间。

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

    1. 创建一个名为 nextflow-fss.yaml 的文件,并从此处下载内容:nextflow-fss.yaml

    2. 确保将 <MOUNT_TARGET_IP> 替换为 OCI 控制台中 OCI 文件存储服务装载目标详细信息中的实际装载目标 IP(例如 10.0.10.163)。

      装载目标 IP

    3. 同时记下导出路径并将其替换为同一文件。

    4. 运行以下命令以应用该文件。

      kubectl apply -f nextflow-fss.yaml
      
  3. 创建服务账户和基于角色的访问控制 (Role-based Access Control,RBAC)

    这些将创建,以确保在 OKE 集群中运行的 Nextflow 作业具有在管道执行期间与 OKE 资源进行交互所需的权限。

    在 OKE 上运行时,下一个流需要:

    • 为每个流程步骤启动 pod。
    • 监视其状态。
    • 访问日志。
    • 绑定到 PVC。

    但是,默认情况下,Kubernetes 作业没有执行这些操作的权限,除非通过具有正确 RBAC 绑定的服务帐户显式授予。

    运行以下命令以创建服务帐户。

    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. (可选)为 Nextflow 管道创建测试数据文件

    运行以下命令以创建一些文件,供以后在 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. 创建管道文件

    本节定义 Nextflow 管道逻辑 (main.nf) 及其特定于 Kubernetes 的配置 (nextflow.config),指定工作流应如何运行、要使用的容器以及如何在集群中挂载共享存储。

    从此处在堡垒 VM 上创建和下载这些文件:

  6. 创建 Kubernetes ConfigMap

    创建 Kubernetes ConfigMap 以打包 main.nfnextflow.config 文件,以便在运行时将其注入到 Nextflow pod 中。

    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. 创建并运行下一流作业 YAML

    本节定义在容器内运行 Nextflow 工作流的 Kubernetes 作业。它使用以前创建的服务帐户获取权限,挂载共享卷和 ConfigMap,并设置 Kubernetes 执行所需的工作目录和环境变量。

    1. 创建名为 nextflow-job.yaml 的文件并从此处下载: nextflow-job.yaml

    2. 运行以下命令以应用该文件。

      kubectl apply -f nextflow-job.yaml
      

    通过运行“application(应用)”,您将创建该作业。该作业运行 Nextflow 运行命令并包含已挂载的管道代码和配置,以 Kubernetes 云池的形式启动管道进程,并通过已挂载的 OCI 文件存储服务卷处理输入/输出。

  8. 监视云池执行

    您可以使用以下命令监视已启动的云池和作业日志。

    kubectl get pods -n nextflow-ns -w
    kubectl logs -n nextflow-ns -l job-name=nextflow-job --tail=100
    
  9. 查找输出文件

    您应使用以下命令查找 .count 输出文件。

    ls /mnt/nextflow-fss/data/*.count
    
  10. 重新测试的清除

    # 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.nfnextflow.config 文件,请同时重新创建 ConfigMap。

故障排除提示:

任务 4:评估 CPU 调度和云池并行度

Nextflow 通过为每个任务启动一个单独的 pod 来并行化进程。如果 OKE 节点的 CPU 资源有限(例如只有 1 个 vCPU),则当每个云池请求一个完整的 CPU 时,Kubernetes 一次只能调度一个云池。

在执行期间,您可能会在作业日志中看到以下警告。

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

发生这种情况的原因:

解决方案:

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心