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
使用以下内容,创建resource.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 accessModes: - ReadWriteMany --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: serverless-data spec: master: disabled: true worker: disabled: true
部分参数说明如下:
参数
说明
mountPoint
表示挂载UFS的路径,路径格式为
oss://<oss_bucket>/<bucket_dir>
。路径中不需要包含Endpoint信息。如果您直接访问Bucket,可以不配置
<bucket_dir>
。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。
accessModes
表示支持的读写模式。读写模式包括
ReadWriteOnce
、ReadOnlyMany
、ReadWriteMany
和ReadWriteOncePod
,默认为ReadOnlyMany
。disabled
Master和Worker都配置为
true
,表示开启无缓存模式。执行以下命令,部署JindoRuntime和Dataset。
kubectl create -f resource.yaml
执行以下命令,查看Dataset的部署情况。
kubectl get dataset serverless-data
预期输出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE serverless-data Bound 1d
由预期输出得到,
PHASE
为Bound
,表示Dataset部署成功。执行以下命令,查看JindoRuntime的部署情况。
kubectl get jindo serverless-data
预期输出:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE serverless-data Ready 3m41s
由预期输出得到,
FUSE
为Ready
,表示JindoRuntime部署成功。
步骤三:创建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-5fr74 -c demo
预期输出:
real 0m23.644s user 0m0.004s sys 0m1.036s
由预期输出得到,文件的拷贝时间
real
为0m23.644s
。拷贝时间取决于网络延时和带宽,如果您希望加速数据访问,请参见使用缓存模式加速Job应用数据访问。
步骤四:清理环境
当您不再使用数据访问功能时,请及时清理环境。
执行以下命令,删除应用容器。
kubectl delete job demo-app
执行以下命令,删除Dataset。
kubectl delete dataset serverless-data