Fluid支持在Serverless場景下,通過JindoRuntime優化對象存儲的訪問,該訪問支持緩存模式和無緩存模式。本文介紹如何使用緩存模式加速Argo任務數據訪問。
前提條件
已安裝Argo或ack-workflow組件。具體操作,請參見Argo或ack-workflow。
已部署ACK虛擬節點(Virtual Node)。具體操作,請參見通過虛擬節點將Pod調度到ECI上運行。
已創建一個非ContainerOS操作系統的ACK Pro版集群,且集群版本為1.18及以上。具體操作,請參見創建ACK Pro版集群。
重要ack-fluid組件暫不支持在ContainerOS操作系統上使用。
已安裝云原生AI套件并部署ack-fluid組件。
重要若您已安裝開源Fluid,請卸載后再部署ack-fluid組件。
由于云原生AI套件中組件ack-ai-pipeline和ack-workflow存在功能沖突,如果您想使用加速Argo任務數據訪問功能,需要您在部署云原生AI套件時取消勾選Kubeflow Pipelines組件。
已通過kubectl連接Kubernetes集群。具體操作,請參見通過kubectl工具連接集群。
使用限制
本功能與ACK彈性調度功能沖突,暫不支持同時使用。關于彈性調度功能的更多信息,請參見自定義彈性資源優先級調度。
步驟一:上傳測試數據到OSS Bucket
步驟二:創建Dataset和JindoRuntime
當K8s和OSS環境配置完畢后,您只需要耗費幾分鐘即可完成Dataset和JindoRuntime環境的部署。
使用以下內容,創建secret.yaml文件。
在創建Dataset之前,您可以創建如下YAML文件,保存OSS的
fs.oss.accessKeyId
和fs.oss.accessKeySecret
。apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: **** fs.oss.accessKeySecret: ****
執行以下命令,部署Secret。
kubectl create -f secret.yaml
使用以下內容,創建dataset.yaml文件。
YAML文件中包含以下兩部分信息:
Dataset
:描述遠端存儲數據集和UFS的信息。JindoRuntime
:啟動一個JindoFS的集群來提供緩存服務。
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: serverless-data spec: mounts: - mountPoint: oss://<oss_bucket>/<bucket_dir> name: demo path: / options: fs.oss.endpoint: <oss_endpoint> encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: access-key key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: access-key key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: serverless-data spec: replicas: 1 tieredstore: levels: - mediumtype: MEM volumeType: emptyDir path: /dev/shm quota: 5Gi high: "0.95" low: "0.7"
部分參數說明如下:
參數
說明
mountPoint
表示掛載UFS的路徑,路徑格式為
oss://<oss_bucket>/<bucket_dir>
。路徑中不需要包含Endpoint信息。例如:oss://mybucket/path/to/dir。如果您使用單掛載點,可以將
path
設置為/
。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的數量。
mediumtype
緩存類型。僅支持HDD(機械硬盤)、SSD(固態硬盤)和MEM(內存)三種類型。
關于mediumtype的推薦配置,請參見策略二:選擇緩存介質。
volumeType
緩存介質存儲卷類型。僅支持emptyDir和hostPath兩種類型,默認為hostPath類型。
如果使用內存或本地存儲的系統盤作為緩存介質,推薦選擇emptyDir類型,避免節點上緩存數據殘留,進而影響節點可用性。
如果使用本地存儲的數據盤作為緩存介質,可使用hostPath類型,并配置path指定為宿主機上數據盤的掛載路徑。
關于volumeType的推薦配置,請參見策略二:選擇緩存介質。
path
表示緩存路徑,目前只支持單個路徑。
quota
表示緩存最大容量。例如100 Gi表示最大可用100 GiB。
high
表示存儲容量上限。
low
表示存儲容量下限。
重要數據訪問模式默認為只讀模式,如果您想使用讀寫模式,請參考配置數據集訪問模式。
執行以下命令,部署JindoRuntime和Dataset。
kubectl create -f dataset.yaml
執行以下命令,查看Dataset的部署情況。
kubectl get dataset serverless-data
預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE serverless-data 1.16GiB 0.00B 5.00GiB 0.0% Bound 2m8s
由預期輸出得到,
PHASE
為Bound
,表示Dataset部署成功。執行以下命令,查看JindoRuntime的部署情況。
kubectl get jindo serverless-data
預期輸出:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE serverless-data Ready Ready Ready 2m51s
由預期輸出得到,
FUSE
為Ready
,表示JindoRuntime部署成功。
(可選)步驟三:數據預熱
預先加熱數據可以提升首次數據的訪問性能。如果您希望在首次訪問數據時得到更好的性能體驗,建議您使用該功能。
使用以下內容,創建dataload.yaml文件。
apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: serverless-data-warmup spec: dataset: name: serverless-data namespace: default loadMetadata: true
執行以下命令,部署Dataload。
kubectl create -f dataload.yaml
執行以下命令,查看數據預熱的進度。
kubectl get dataload
預期輸出:
NAME DATASET PHASE AGE DURATION serverless-data-warmup serverless-data Complete 2m49s 45s
由預期輸出得到,數據預熱耗時為
45s
。執行以下命令,查看緩存結果。
kubectl get dataset
預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE serverless-data 1.16GiB 1.16GiB 5.00GiB 100.0% Bound 5m20s
由預期輸出得到,未進行數據預熱時,
CACHED
為0.0%
,數據預熱后,CACHED
為100.0%
。
步驟四:創建Argo類型任務訪問OSS
使用以下內容,創建workflow.yaml文件。
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: serverless-workflow- spec: entrypoint: serverless-workflow-example volumes: - name: datadir persistentVolumeClaim: claimName: serverless-data templates: - name: serverless-workflow-example steps: - - name: copy template: copy-files - - name: check template: check-files - name: copy-files metadata: labels: alibabacloud.com/fluid-sidecar-target: eci alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge container: image: debian:buster command: [bash, -c] args: ["time cp -r /data/ /tmp"] volumeMounts: - name: datadir mountPath: /data - name: check-files metadata: labels: alibabacloud.com/fluid-sidecar-target: eci alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge container: image: debian:buster command: [bash, -c] args: ["du -sh /data; md5sum /data/*"] volumeMounts: - name: datadir mountPath: /data
執行以下命令,創建工作流。
kubectl create -f workflow.yaml
執行以下命令,查看啟動日志。
kubectl logs serverless-workflow-g5knn-3271897614
預期輸出:
real 0m1.948s user 0m0.000s sys 0m0.668s
由預期輸出得到,文件拷貝時間
real
為0m1.948s
。使用無緩存模式加速Argo任務數據訪問,文件拷貝時間為0m24.966s
。緩存模式相比無緩存模式,速度提升了約13倍。
步驟五:清理環境
當您不再使用數據訪問功能時,請及時清理環境。具體操作如下:
執行以下命令,刪除應用容器。
kubectl delete workflow serverless-workflow-g5knn
執行以下命令,刪除Dataset。
kubectl delete dataset serverless-data