Fluid支持在Serverless场景下,通过JindoRuntime优化对象存储的访问,该访问支持缓存模式和无缓存模式。本文介绍如何使用缓存模式加速Argo任务数据访问。
前提条件
- 已提交公测申请表单,开通公测。
- 已创建ACK Pro版集群,且集群的Kubernetes版本≥1.18。具体操作,请参见创建ACK Pro版集群。
- 已安装云原生AI套件并部署ack-fluid组件,云原生AI套件版本≥0.8.0。重要 若您已安装开源Fluid,请卸载后再部署ack-fluid组件。
- 已部署ACK虚拟节点(Virtual Node)。具体操作,请参见通过部署ACK虚拟节点组件创建ECI Pod。
- 已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群。
- 已开通阿里云对象存储(OSS)服务和存储空间(Bucket)。具体操作,请参见开通OSS服务和控制台创建存储空间。
- 已安装Argo或ack-workflow组件。具体操作,请参见Argo或ack-workflow。
使用限制
本功能与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://large-model-sh/ name: demo path: / options: fs.oss.endpoint: oss-cn-shanghai.aliyuncs.com 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 path: /dev/shm quota: 5Gi high: "0.95" low: "0.7"
参数 说明 mountPoint
表示挂载UFS的路径,路径格式为 oss://<oss_bucket>/<bucket_dir>
。路径中不需要包含Endpoint信息。如果您使用单挂载点,可以将
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
表示缓存类型。 创建JindoRuntime模板样例时,JindoFS目前只支持
HDD
、SSD
或MEM
三者中的某一种缓存类型。path
表示缓存路径,目前只支持单个路径。 quota
表示缓存最大容量。例如100 Gi表示最大可用100 GiB。 high
表示存储容量上限。 low
表示存储容量下限。 重要 数据访问模式默认为只读模式,如果您想使用读写模式,请参考jindo_fluid_oss_append_fuseonly.md。 - 执行以下命令,部署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-serverless: 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