附註:

使用 OKE 和 OCI 檔案儲存服務在 OCI 上執行下一個流程管線

簡介

在許多使用案例中,您需要執行多步驟資料管線來處理大型檔案、追蹤中間結果,以及支援平行執行。雖然 Oracle Cloud Infrastructure (OCI) Functions 非常適合事件導向和無狀態任務,但某些工作流程需要一個專為跨多個步驟協調和資料流程設計的系統。

下一個流程透過對容器、輸入 / 輸出處理以及 OKE 上可擴展執行的內建支援來滿足這項需求。它可讓可重現的管線在分散式環境中有效率地執行。

目標

必要條件

工作 1:準備工作節點

OKE 節點必須安裝「網路檔案系統 (NFS)」從屬端公用程式,才能掛載 OCI 檔案儲存服務磁碟區。

SSH 至每個工作節點,然後執行下列命令。

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

注意:您不需要手動掛載 OCI 檔案儲存服務,OKE 將會使用持續性磁碟區自動處理掛載。

工作 2:設定 OCI 堡壘主機

如果您是從新的堡壘主機開始,請安裝下列項目:

安全建議:

工作 3:設定堡壘主機的下一個流程

執行堡壘主機 VM 的所有步驟。

  1. 建立命名空間

    執行下列命令以建立專用命名空間。

    kubectl create namespace nextflow-ns
    
  2. 設定永久磁碟區和永久磁碟區宣告 (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. 建立服務帳號和以角色為基礎的存取控制 (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
    
  4. (選擇性) 建立下一個流程管線的測試資料檔

    執行下列指令以建立某些檔案供稍後在 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
      

    執行套用後,您將建立執行 Nextflow 執行命令的工作,其中包含已掛載的管線代碼和組態、以 Kubernetes Pod 的身分啟動管線處理作業,以及透過已掛載的 OCI 檔案儲存服務磁碟區處理輸入 / 輸出。

  8. 監督 Pod 執行

    您可以使用下列命令來監督已啟動的 Pod 和工作日誌。

    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 排程與 Pod 平行機制

下一個流程透過為每個任務啟動個別的 Pod 來平行處理。如果您的 OKE 節點的 CPU 資源有限 (例如只有 1 個 vCPU),則當每個 Pod 要求完整 CPU 時,Kubernetes 一次只能排定一個 Pod。

在執行期間,您可能會在工作日誌中看到下列警告。

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 Help Center