Fluid支持在Serverless场景下,通过JindoRuntime优化对象存储的访问,该访问支持缓存模式和无缓存模式。本文介绍如何使用缓存模式加速Job应用数据访问。
前提条件
已创建一个非ContainerOS操作系统的ACK Pro版集群,且集群版本为1.18及以上。具体操作,请参见创建ACK Pro版集群。
重要ack-fluid组件暂不支持在ContainerOS操作系统上使用。
已安装云原生AI套件并部署ack-fluid组件。
重要若您已安装开源Fluid,请卸载后再部署ack-fluid组件。
已部署ACK虚拟节点(Virtual Node)。具体操作,请参见通过部署ACK虚拟节点组件创建ECI Pod。
已通过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://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
表示存储容量下限。
重要数据访问模式默认为只读模式,如果您想使用读写模式,请参考配置数据集访问模式。
执行以下命令,部署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%
。
步骤四:创建Job类型应用容器访问OSS
您可以通过创建应用容器来使用JindoFS加速服务,或者提交机器学习作业来体验相关功能。本文以创建一个Job类型应用容器访问OSS数据服务为例进行说明。
使用以下内容,创建job.yaml文件。
apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge spec: containers: - name: demo image: debian:buster 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: serverless-data backoffLimit: 4
执行以下命令,创建应用容器。
kubectl create -f job.yaml
执行以下命令,查看启动日志。
kubectl logs demo-app--1-7zqdm -c demo
预期输出:
real 0m1.760s user 0m0.002s sys 0m0.740s
由预期输出得到,文件拷贝时间
real
为0m1.760s
。使用无缓存模式加速Job应用数据访问,文件拷贝时间为0m23.644s
。缓存模式相比无缓存模式,速度提升了约14倍。
步骤五:清理环境
当您不再使用数据访问功能时,请及时清理环境。
执行以下命令,删除应用容器。
kubectl delete job demo-app
执行以下命令,删除Dataset。
kubectl delete dataset serverless-data