附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 其使用 Oracle Cloud Infrastructure 證明資料、租用戶以及區間的範例值。完成實驗室時,請將這些值替代為雲端環境特定的值。
使用 OKE 和 OCI 檔案儲存服務在 OCI 上執行下一個流程管線
簡介
在許多使用案例中,您需要執行多步驟資料管線來處理大型檔案、追蹤中間結果,以及支援平行執行。雖然 Oracle Cloud Infrastructure (OCI) Functions 非常適合事件導向和無狀態任務,但某些工作流程需要一個專為跨多個步驟協調和資料流程設計的系統。
下一個流程透過對容器、輸入 / 輸出處理以及 OKE 上可擴展執行的內建支援來滿足這項需求。它可讓可重現的管線在分散式環境中有效率地執行。
目標
- 在 Oracle Cloud Infrastructure Kubernetes Engine (OKE) 上部署最小的 Nextflow 管道,使用共用磁碟區的 Oracle Cloud Infrastructure File Storage 服務,以及存取和控制的堡壘主機。
必要條件
-
存取 OCI 租用戶。
-
建立及管理 OCI Compute 執行處理、OKE 叢集以及網路資源的權限。
-
虛擬雲端網路 (VCN) 中具有公用子網路的現有 OKE 叢集。
-
現有的 OCI 檔案儲存服務磁碟區。
-
在與 OKE 叢集相同 VCN 的公用子網路中,作為 OCI 堡壘主機的現有 OCI Compute 執行處理。
工作 1:準備工作節點
OKE 節點必須安裝「網路檔案系統 (NFS)」從屬端公用程式,才能掛載 OCI 檔案儲存服務磁碟區。
SSH 至每個工作節點,然後執行下列命令。
sudo yum install -y nfs-utils
sudo systemctl enable --now nfs-client.target || true
注意:您不需要手動掛載 OCI 檔案儲存服務,OKE 將會使用持續性磁碟區自動處理掛載。
工作 2:設定 OCI 堡壘主機
如果您是從新的堡壘主機開始,請安裝下列項目:
-
Oracle Cloud Infrastructure 命令行介面 (OCI CLI)。如需詳細資訊,請參閱 Installing the CLI 。
-
kubectl 和 Kubeconfig 設定。如需詳細資訊,請參閱使用 Kubectl 存取叢集。
-
叢集連線: 請依照存取您的叢集指示進行,您可以在 OCI 主控台叢集詳細資訊頁面找到這些指示。
-
將 FSS 磁碟區掛載至堡壘主機,例如位於 /mnt/nextflow-fss 底下。例如,假設掛載目標的專用 IP 來自下方工作 3 中的圖片、OCI FSS 的匯出路徑以及堡壘主機上的現有 /mnt/nextflow-fss 目錄,則命令為:
sudo mount -t nfs 10.0.10.163:/nextflow /mnt/nextflow-fss
確定工作節點也已在此處安裝 nfs-utils (如上所示)。
安全建議:
-
使用 NSG 或安全清單限制對堡壘主機的 SSH 存取。確定已開啟連接埠 2049 以進行 FSS 存取。
-
確定私密 SSH 金鑰和 kubeconfig 會安全地儲存。
工作 3:設定堡壘主機的下一個流程
執行堡壘主機 VM 的所有步驟。
-
建立命名空間。
執行下列命令以建立專用命名空間。
kubectl create namespace nextflow-ns
-
設定永久磁碟區和永久磁碟區宣告 (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 叢集中執行的 Nextflow 工作在管線執行期間具備與 OKE 資源互動的必要權限。
下一個流程在 OKE 上執行時需要:
- 啟動每個處理步驟的 Pod。
- 監控其狀態。
- 存取日誌。
- 連結到 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
-
建立管線檔案。
此區段定義 Nextflow 管線邏輯 (
main.nf
) 及其 Kubernetes 特定組態 (nextflow.config
)、指定工作流程的執行方式、要使用的容器,以及如何掛載叢集中的共用儲存體。從此處建立並下載堡壘主機 VM 上的這些檔案:
-
建立 Kubernetes ConfigMap 。
建立 Kubernetes ConfigMap 以封裝
main.nf
和nextflow.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 -
-
建立並執行下一個流程工作 YAML 。
此區段定義在容器內執行 Nextflow 工作的 Kubernetes 工作。它使用先前建立的權限服務帳戶、掛載共用磁碟區和 ConfigMap,以及設定執行 Kubernetes 所需的工作目錄和環境變數。
-
建立名為
nextflow-job.yaml
的檔案,並從此處下載: nextflow-job.yaml 。 -
執行下列命令以套用檔案。
kubectl apply -f nextflow-job.yaml
執行套用後,您將建立執行 Nextflow 執行命令的工作,其中包含已掛載的管線代碼和組態、以 Kubernetes Pod 的身分啟動管線處理作業,以及透過已掛載的 OCI 檔案儲存服務磁碟區處理輸入 / 輸出。
-
-
監督 Pod 執行。
您可以使用下列命令來監督已啟動的 Pod 和工作日誌。
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 在所有 Pod 上正確掛載磁碟區。
- 確定所有 OKE 工作節點都安裝
nfs-utils
。 - 確定 OCI 檔案儲存服務匯出允許從 OKE 節點子網路存取。
-
如有需要,請使用以下指令描述失敗的 Pod。
kubectl describe pod <pod-name> -n nextflow-ns
工作 4:評估 CPU 排程與 Pod 平行機制
下一個流程透過為每個任務啟動個別的 Pod 來平行處理。如果您的 OKE 節點的 CPU 資源有限 (例如只有 1 個 vCPU),則當每個 Pod 要求完整 CPU 時,Kubernetes 一次只能排定一個 Pod。
在執行期間,您可能會在工作日誌中看到下列警告。
WARN: K8s pod cannot be scheduled -- 0/1 nodes are available: 1 Insufficient cpu.
發生此狀況的原因:
- 下一個流程預設會平行提交所有任務。
- 如果您有 1 個 CPU 工作節點,且節點已在執行使用 1 個 CPU 的 Pod,則會在有資源可用之前,將額外的 Pod 排入佇列。
- 這會導致執行速度變慢,但最終所有工作將完成。
解決方案:
-
選項 1:減少每個處理作業的 CPU 要求。
您可以限制
nextflow.config
檔案中每項工作的 CPU 使用量。process { cpus = 0.5
在提供的
nextflow.config
中,您會看到此行已經存在,而且設為 0.1,這足以用於我們非常簡單的示範資料。您可以包含或視需要修改值。 -
選項 2:使用較大的節點。
將節點資源配置升級為使用 2+ vCPUs 的節點資源配置,以便讓更多 Pod 以平行方式執行。
相關連結
確認
- 作者 - 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
G34279-01
Copyright ©2025, Oracle and/or its affiliates.