全部產品
Search
文件中心

Container Service for Kubernetes:加速Job應用資料訪問

更新時間:Aug 27, 2024

Fluid支援ACK Serverless叢集的資料訪問加速,您可以將Fluid的全部組件,包括Fluid控制器、緩衝系統組件和您的應用程式全部運行於ACK Serverless環境。本文介紹如何在ACK Serverless叢集上加速Job應用資料訪問。

前提條件

使用限制

本功能與ACK Serverless叢集的虛擬節點調度功能衝突,暫不支援同時使用。關於虛擬節點調度功能的更多資訊,請參見開啟叢集虛擬節點調度策略

部署Fluid控制面組件

重要

若您已安裝開源Fluid,請卸載後再部署ack-fluid組件。

  1. 部署Fluid控制面組件。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

    3. Helm頁面,單擊建立

    4. 基本資料設定精靈,配置相關參數,然後單擊下一步

      部分參數說明如下:

      參數

      說明

      來源

      選擇應用市場

      Chart

      搜尋並選中ack-fluid

      說明

      Chart預設的發布名稱為ack-fluid、命名空間為fluid-system。單擊下一步時,若發布名稱或命名空間與Chart預設值不同,則會彈出請確認的提示框,提示您採用Chart預設的發布名稱或命名空間,建議您在提示框中單擊

    5. 參數配置設定精靈,單擊確定

  2. 執行以下命令,查看Fluid是否部署成功。

    kubectl get pod -n fluid-system

    預期輸出:

    NAME                                  READY   STATUS    RESTARTS   AGE
    dataset-controller-d99998f79-dgkmh    1/1     Running   0          2m48s
    fluid-webhook-55c6d9d497-dmrzb        1/1     Running   0          2m49s

    顯示類似輸出結果,說明Fluid部署成功。組件說明如下:

    • Dataset Controller:負責維護Fluid所引入的各個Dataset CRs(自訂資源)的完整生命週期。

    • Fluid Webhook:負責對使用者需要訪問資料的應用Pod進行Sidecar容器注入,無感知地協助使用者實現Serverless情境的資料訪問功能。

    說明

    除了上述描述的兩個組件外,Fluid的控制面仍然包含了一些與管理緩衝系統(例如JindoFS、JuiceFS、Alluxio等)生命週期的控制器組件,這些組件在初始部署狀態下不會建立,僅當使用者指定需要使用某種緩衝系統時,與其相關的緩衝系統控制器組件Pod才會按需擴容。

ACK Serverless叢集資料訪問加速樣本

步驟一:上傳測試資料到OSS Bucket

  1. 建立一個2 GB的測試檔案,本文以test為例。

  2. 將測試檔案上傳到阿里雲OSS對應的Bucket。

    您可以通過OSS提供的用戶端工具ossutil上傳資料。具體操作,請參見安裝ossutil

步驟二:建立Fluid Dataset和Runtime資源

資料準備和上傳後,即可在Fluid中聲明上述待訪問的資料。您需要提交一個Dataset CR和一個Runtime CR。

  • Dataset CR:描述資料在外部儲存系統中的URL位置。

  • Runtime CR:描述緩衝系統及其具體配置。

  1. 執行以下命令,建立Secret資源,將訪問OSS Bucket所需的身份憑證資訊儲存於Secret中。

    kubectl create secret generic oss-access-key \
      --from-literal=fs.oss.accessKeyId=<access_key_id> \
      --from-literal=fs.oss.accessKeySecret=<access_key_secret>
  2. 使用以下內容,建立dataset.yaml檔案,定義如下Dataset CR和Runtime CR。

    本文選擇JindoFS作為緩衝系統後端(即對應JindoRuntime)。

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: demo-dataset
    spec:
      mounts:
        - mountPoint: oss://<bucket_name>/<bucket_path>
          name: demo
          path: /
          options:
            fs.oss.endpoint: oss-<region>.aliyuncs.com # OSS Bucket訪問端點。
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: oss-access-key
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: oss-access-key
                  key: fs.oss.accessKeySecret
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: demo-dataset
    spec:
      # 緩衝Worker節點數量。
      replicas: 2
      worker:
        podMetadata:
          annotations:
            # 禁用虛擬節點調度功能。
            alibabacloud.com/burst-resource: eci_only
            # 選擇JindoFS Pod使用的執行個體規格。
            k8s.aliyun.com/eci-use-specs: <eci_instance_spec>
            # 啟用執行個體鏡像緩衝,加速Pod啟動過程。
            k8s.aliyun.com/eci-image-cache: "true"
      tieredstore:
        levels:
          # 以10 GiB的記憶體作為每個緩衝Worker節點的緩衝介質。
          - mediumtype: MEM
            volumeType: emptyDir
            path: /dev/shm
            quota: 10Gi
            high: "0.99"
            low: "0.99"

    部分參數說明如下:

    參數

    說明

    mountPoint

    表示掛載UFS的路徑,路徑格式為oss://<oss_bucket>/<bucket_dir>

    路徑中不需要包含Endpoint資訊。如果您使用單掛載點,可以將path設定為/

    options

    設定了OSS Bucket的訪問端點,可以配置為經典VPC內網訪問端點或外網訪問端點

    fs.oss.endpoint

    表示OSS Bucket的Endpoint資訊,配置您的公網或私網地址。

    配置私網地址可以提高資料訪問效能,但是需要您的K8s叢集所在地區和OSS地區相同。例如您的Bucket在杭州Region,則公網地址為oss-cn-hangzhou.aliyuncs.com,私網地址為oss-cn-hangzhou-internal.aliyuncs.com

    fs.oss.accessKeyId

    表示OSS Bucket的AK ID資訊,有許可權訪問Bucket。

    fs.oss.accessKeySecret

    表示OSS Bucket的AK ID密鑰資訊,有許可權訪問Bucket。

    replicas

    表示建立JindoRuntime緩衝Worker Pod的數量,該數量將會影響分布式緩衝系統的最大緩衝可用容量。

    worker.podMetadata.annotations

    可以指定與ECI執行個體規格ECI執行個體鏡像緩衝相關的資訊。

    tieredstore.levels

    可以通過quota欄位指定每個緩衝Worker Pod可提供的最大緩衝容量。

    tieredstore.levels.mediumtype

    緩衝類型。僅支援HDD(機械硬碟)、SSD(固態硬碟)和MEM(記憶體)三種類型。

    關於mediumtype的推薦配置,請參見策略二:選擇緩衝介質

    tieredstore.levels.volumeType

    緩衝介質儲存卷類型。僅支援emptyDir和hostPath兩種類型,預設為hostPath類型。

    • 如果使用記憶體或本機存放區的系統硬碟作為緩衝介質,推薦選擇emptyDir類型,避免節點上快取資料殘留,進而影響節點可用性。

    • 如果使用本機存放區的資料盤作為緩衝介質,可使用hostPath類型,並配置path指定為宿主機上資料盤的掛載路徑。

    關於volumeType的推薦配置,請參見策略二:選擇緩衝介質

    tieredstore.levels.path

    表示緩衝路徑,目前只支援單個路徑。

    tieredstore.levels.quota

    表示緩衝的最大容量。例如100 Gi表示最大可用100 GiB。

    tieredstore.levels.high

    表示儲存容量上限。

    tieredstore.levels.low

    表示儲存容量下限。

  3. 執行以下命令,建立Dataset和JindoRuntime資源。

    kubectl create -f dataset.yaml
  4. 執行以下命令,查看Dataset部署狀態。

    Dataset CR和JindoRuntime CR建立約1~2分鐘後,緩衝系統將部署完畢,之後您可以查看到與緩衝系統以及後端儲存系統中資料的相關資訊。

    kubectl get dataset demo-dataset

    預期輸出:

    NAME           UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    demo-dataset   1.16GiB          0.00B    20.00GiB         0.0%                Bound   2m58s

    輸出結果中顯示了Fluid Dataset的相關資訊,部分輸出項說明如下:

    輸出項

    說明

    UFS TOTAL SIZE

    OSS中資料集總大小。

    CACHED

    當前緩衝量。

    CACHE CAPACITY

    緩衝系統容量。

    CACHED PERCENTAGE

    資料集緩衝百分比。

    PHASE

    Dataset狀態。參數值為Bound,表示已成功部署。

(可選)步驟三:資料緩衝預熱

預先加熱資料可以提升首次資料的訪問效能。如果您希望在首次訪問資料時得到更好的效能體驗,建議您使用該功能。

  1. 使用以下內容,建立dataload.yaml檔案。

    apiVersion: data.fluid.io/v1alpha1
    kind: DataLoad
    metadata:
      name: data-warmup
    spec:
      dataset:
        name: demo-dataset
        namespace: default
      loadMetadata: true
  2. 執行以下命令,部署Dataload。

    kubectl create -f dataload.yaml

    預期輸出:

    NAME          DATASET        PHASE      AGE   DURATION
    data-warmup   demo-dataset   Complete   99s   58s

    由預期輸出得到,資料預熱耗時約為58s

步驟四:建立Job應用訪問資料

您可以通過建立應用程式容器來使用JindoFS資料訪問加速服務,或者提交機器學習作業來體驗相關功能。本文以建立Job類型應用程式容器訪問OSS為例進行說明。

  1. 使用以下內容,建立job.yaml,定義如下Job資源。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: demo-app
    spec:
      template:
        metadata:
          labels:
            alibabacloud.com/fluid-sidecar-target: eci
          annotations:
            # 禁用虛擬節點調度功能。
            alibabacloud.com/burst-resource: eci_only
            # 選擇應用Pod使用的執行個體規格。
            k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge
        spec:
          containers:
            - name: demo
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              args:
                - -c
                - du -sh /data && time cp -r /data/ /tmp
              command:
                - /bin/bash
              volumeMounts:
                - mountPath: /data
                  name: demo
          restartPolicy: Never
          volumes:
            - name: demo
              persistentVolumeClaim:
                claimName: demo-dataset
      backoffLimit: 4
  2. 執行以下命令,建立Job。

    kubectl create -f job.yaml
  3. 執行以下命令,查看Job Pod開機記錄。

    kubectl logs demo-app-jwktf -c demo

    預期輸出:

    1.2G    /data
    
    real    0m0.992s
    user    0m0.004s
    sys     0m0.674s

    由預期輸出得到,檔案拷貝時間real僅為0m0.992s

步驟五:環境清理

當您不再使用資料訪問功能時,請及時清理環境。

  1. 執行以下命令,刪除應用程式容器。

    kubectl delete job demo-app
  2. 執行以下命令,刪除Dataset以及綁定的緩衝系統組件。

    kubectl delete dataset demo-dataset
    重要

    緩衝系統組件的清理可能會需要約1分鐘時間,請檢查緩衝系統各組件Pod被完整刪除後,再執行後續清理操作。

  3. 執行以下命令,回收Fluid控制面組件。

    kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0

    當您再次使用資料訪問功能時,在建立Fluid Dataset和Runtime資源前,您需要先執行以下命令,建立Fluid控制面組件。

    kubectl scale -n fluid-system deployment dataset-controller --replicas=1
    kubectl scale -n fluid-system deployment fluid-webhook --replicas=1