Fluid 提供了一些列通用数据操作(data operation)描述数据预热,数据迁移,弹性伸缩,缓存清理,元数据备份,恢复等操作。类似于Kubernetes Job自动清理机制,我们还提供了针对数据操作完成后的自动清理功能,使用TTL(生存时间)机制限制数据操作的生命周期。本文档将向你简单地展示上述特性的使用。
在运行该示例之前,请参考安装文档完成安装,并检查Fluid各组件正常运行:
$ kubectl get pod -n fluid-system
alluxioruntime-controller-5b64fdbbb-84pc6 1/1 Running 0 8h
csi-nodeplugin-fluid-fwgjh 2/2 Running 0 8h
csi-nodeplugin-fluid-ll8bq 2/2 Running 0 8h
dataset-controller-5b7848dbbb-n44dj 1/1 Running 0 8h
配置待创建的Dataset和Runtime对象
$ cat<<EOF >dataset.yaml
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hbase
spec:
mounts:
- mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/
name: hbase
---
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:
name: hbase
spec:
replicas: 1
tieredstore:
levels:
- mediumtype: MEM
path: /dev/shm
quota: 2Gi
high: "0.95"
low: "0.7"
EOF
创建Dataset和Runtime对象
$ kubectl create -f dataset.yaml
等待Dataset和Runtime准备就绪
$ kubectl get datasets hbase
如果看到类似以下结果,说明Dataset和Runtime均已准备就绪:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
hbase 1.21GiB 0.00B 2.00GiB 0.0% Bound 75s
这里我们使用数据预热(Dataload)来演示数据操作的自动清理。
配置待创建的DataLoad对象
$ cat <<EOF > dataload.yaml
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: hbase-dataload
spec:
dataset:
name: hbase
namespace: default
ttlSecondsAfterFinished: 300
EOF
这里,我们使用spec.ttlSecondsAfterFinished
字段来表示数据操作将在作业完成(Complete)或失败(Failed)后的多少秒内被清理,单位为秒(second)。
创建Dataload
$ kubectl apply -f dataload.yaml
观察Dataload状态
$ kubectl get dataload -w
NAME DATASET PHASE AGE DURATION
hbase-dataload hbase Executing 7s Unfinished
hbase-dataload hbase Complete 29s 7s
hbase-dataload hbase Complete 5m29s 7s
$ kubectl get dataload hbase-dataload
Error from server (NotFound): dataloads.data.fluid.io "hbase-dataload" not found
可以看出,在hbase-dataload
执行完成后300s后,该dataload将被自动清理。
由于 TTL-after-finished 控制器(Fluid dataset-controller)使用存储在 Data Operation 中的时间戳来确定 TTL 是否已过期,因此该功能对集群中的时间偏差很敏感,这可能导致控制平面在错误的时间清理 Job 对象。设置非零 TTL 时请注意避免这种风险。