Fluid是一个开源的Kubernetes原生分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用。Fluid可以通过管理和调度底层缓存Runtime实现数据集的可见性、弹性伸缩和数据迁移。本文以JindoFS为例演示如何定时数据加载。
前提条件
已创建ACK集群Pro版,且集群版本为1.18及以上。具体操作,请参见创建ACK集群Pro版。
已安装云原生AI套件并部署ack-fluid组件。
重要若您已安装开源Fluid,请卸载后再部署ack-fluid组件。
需确保ack-fluid版本为1.0.3。
已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群。
步骤一:准备OSS Bucket的数据
执行以下命令,下载一份测试数据。
wget https://archive.apache.org/dist/hbase/2.5.2/RELEASENOTES.md
安装ossutil,并创建Bucket。具体操作,请参见安装ossutil。
执行以下命令,将下载的测试数据上传到阿里云OSS对应的Bucket上。
ossutil64 cp RELEASENOTES.md oss://<bucket>/<path>/RELEASENOTES.md
步骤二:创建Dataset和JindoRuntime
创建一个
mySecret.yaml
文件,用于保存OSS的accessKeyId
和accessKeySecret
。YAML示例如下所示。apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: ****** # 请输入accessKeyId。 fs.oss.accessKeySecret: ****** # # 请输入accessKeySecret。
执行以下命令,生成Secret。
kubectl create -f mySecret.yaml
预期输出:
secret/mysecret created
创建一个
dataset.yaml
文件,用于创建Dataset。执行以下命令,通过部署
dateset.yaml
创建JindoRuntime和Dataset。kubectl create -f dataset.yaml
预期输出:
dataset.data.fluid.io/demo created jindoruntime.data.fluid.io/demo created
执行以下命令,查看Dataset的部署情况。
kubectl get dataset
预期输出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 0.00B 10.00GiB 0.0% Bound 2m7s
步骤三:创建支持定时运行的Dataload
创建一个
dataload.yaml
文件。执行以下命令,通过部署
dataload.yaml
来创建Dataload任务。kubectl apply -f dataload.yaml
预期输出:
dataload.data.fluid.io/cron-dataload created
执行以下命令,查看Dataload状态。
kubectl get dataload
如下所示,当
PHASE
的状态为Complete
时,表明数据已加载完成,可进入下一步操作。NAME DATASET PHASE AGE DURATION cron-dataload demo Complete 68s 8s
执行以下命令,查看当前Dataset状态。
kubectl get dataset
预期输出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 588.90KiB 10.00GiB 100.0% Bound 5m50s
结果输出表明,OSS中的文件已经全部加载到缓存。
步骤四:创建应用容器访问OSS中的数据
创建一个
app.yaml
文件,使用应用容器访问RELEASENOTES.md
文件。执行以下命令,创建应用容器。
kubectl create -f app.yaml
预期输出:
pod/nginx created
等待应用容器就绪后,执行以下命令,查看OSS中的数据。
kubectl exec -it nginx -- ls -lh /data
预期输出:
total 589K -rwxrwxr-x 1 root root 589K Jul 31 04:20 RELEASENOTES.md
执行以下命令,将字符串
"hello, crondataload."
写入RELEASENOTES.md
文件中。echo "hello, crondataload." >> RELEASENOTES.md
执行以下文件,重新上传
RELEASENOTES.md
文件到OSS。ossutil64 cp RELEASENOTES.md oss://<bucket-name>/<path>/RELEASENOTES.md
按下确认键
y
后,预期输出:cp: overwrite "oss://<bucket-name>/<path>/RELEASENOTES.md"(y or N)? y Succeed: Total num: 1, size: 21. OK num: 1(upload 1 files). average speed 0(byte/s) 81.827978(s) elapsed
执行以下命令,查看Dataload作业运行情况。
kubectl describe dataload cron-dataload
预期输出:
... Status: Conditions: Last Probe Time: 2023-08-24T06:44:08Z Last Transition Time: 2023-08-24T06:44:08Z Status: True Type: Complete Duration: 8s Last Schedule Time: 2023-08-24T06:44:00Z # 为上一次Dataload作业的调度时间。 Last Successful Time: 2023-08-24T06:44:08Z # 为上一次Dataload作业的完成时间。 Phase: Complete ...
执行以下命令,查看当前Dataset状态。
kubectl get dataset
预期输出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 1.15MiB 10.00GiB 100.0% Bound 10m
预期输出表明,更新后的文件已经加载到了缓存。
执行以下命令,在应用容器中查看更新后的文件。
kubectl exec -it nginx -- tail /data/RELEASENOTES.md
预期输出:
hello, crondataload.
输出结果表明,应用容器已经可以访问更新后的文件。
(可选)步骤五:环境清理
若无需使用该数据加速功能时,请清理环境。
执行以下命令,删除JindoRuntime和应用容器。
kubectl delete -f app.yaml
kubectl delete -f dataset.yaml
预期输出:
pod "nginx" deleted
dataset.data.fluid.io "demo" deleted
jindoruntime.data.fluid.io "demo" deleted