快速使用 GooseFSRuntime
使用 GooseFSRuntime 流程简单,在准备完基本 k8s 和对象存储(Cloud Object Storage,COS)环境的条件下,您只需要耗费10分钟左右即可部署完成所需的 GooseFSRuntime 环境,您可以按照下面的流程进行部署。
前提条件
已安装 Git。
已安装 Kubernetes 集群(version >= 1.14),并且支持 CSI 功能。为获得最佳实践,您可以直接在 腾讯云容器服务(Tencent Kubernetes Engine,TKE)部署。
已安装 kubectl(version >= 1.14)。关于
kubectl
安装和配置详情,请参见 Kubernetes 文档。已安装 Helm(version >= 3.0)。关于 Helm 3 安装和配置详情,请参见 HELM 文档。
如下提供了本地安装包
fluid.tgz
,您可以直接安装使用:$ helm install fluid fluid.tgzNAME: fluidLAST DEPLOYED: Mon Mar 29 11:21:46 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: None
说明
helm install
命令的一般格式是helm install <RELEASE_NAME> <SOURCE>
,在上面的命令中,第一个fluid
指定了安装的 release 名称(可自行更改),第二个fluid.tgz
指定了helm chart 所在的路径。操作步骤
1. 创建命名空间
kubectl create ns fluid-system
2. 下载 fluid
注意
3. 使用 Helm 安装 Fluid
helm install --set runtime.goosefs.enabled=true fluid fluid-0.6.0.tgz
4. 查看 Fluid 的运行状态
$ kubectl get pod -n fluid-systemNAME READY STATUS RESTARTS AGEcsi-nodeplugin-fluid-2mfcr 2/2 Running 0 108scsi-nodeplugin-fluid-l7lv6 2/2 Running 0 108sdataset-controller-5465c4bbf9-5ds5p 1/1 Running 0 108sgoosefsruntime-controller-564f59bdd7-49tkc 1/1 Running 0 108s
其中,csi-nodeplugin-fluid-xx 的数量应与 k8s 集群中节点 node 的数量相同。
5. GooseFS 缓存环境准备
(1)准备 COS 服务
(2)准备测试样例数据
我们可以使用 Apache 镜像站点上的 Spark 相关资源文件作为演示中使用的远程文件。在实际使用当中,您也可以将这个远程文件修改为您的任意远程文件。
下载远程资源文件到本地
mkdir tmpcd tmpwget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.8/spark-2.4.8-bin-hadoop2.7.tgzwget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz
(3)创建 dataset 和 GooseFSRuntime
i. 创建一个 resource.yaml 文件,里面包含如下内容:
包含数据集及 ufs 的 dataset 信息。
创建一个 Dataset CRD 对象,描述了数据集的来源,例如示例中的 test-bucket。
创建一个 GooseFSRuntime,相当于启动一个 GooseFS 的集群用于提供缓存服务。
apiVersion: data.fluid.io/v1alpha1kind: Datasetmetadata:name: hadoopspec:mounts:- mountPoint: cosn://test-bucket/options:fs.cosn.userinfo.secretId: <COS_SECRET_ID>fs.cosn.userinfo.secretKey: <COS_SECRET_KEY>fs.cosn.bucket.region: <COS_REGION>fs.cosn.impl: org.apache.hadoop.fs.CosFileSystemfs.AbstractFileSystem.cosn.impl: org.apache.hadoop.fs.CosNfs.cosn.userinfo.appid: <COS_APP_ID>name: hadoop---apiVersion: data.fluid.io/v1alpha1kind: GooseFSRuntimemetadata:name: hadoopspec:replicas: 2tieredstore:levels:- mediumtype: HDDpath: /mnt/disk1quota: 100Ghigh: "0.9"low: "0.8"
Dataset:
mountPoint:表示挂载 UFS 的路径,路径中不需要包含 endpoint 信息。
options:在 options 需要指定存储桶的必要信息,具体可参考 API 术语信息。
fs.cosn.userinfo.secretId/fs.cosn.userinfo.secretKey:拥有权限访问该 COS 存储桶的密钥信息。
GooseFSRuntime:更多 API 可参考 api_doc.md。
replicas:表示创建 GooseFS 集群节点的数量。
mediumtype: GooseFS 支持 HDD/SSD/MEM 三种类型缓存介质,提供多级缓存配置。
path:存储路径。
quota:缓存最大容量。
high:水位上限大小。
low:水位下限大小。
ii. 执行如下命令,创建 GooseFSRuntime:
kubectl create -f resource.yaml
iii. 查看部署的 GooseFSRuntime 情况,显示全部为 Ready 状态表示部署成功。
kubectl get goosefsruntime hadoopNAME MASTER PHASE WORKER PHASE FUSE PHASE AGEhadoop Ready Ready Ready 62m
iv. 查看 dataset 的情况,显示 Bound 状态表示 dataset 绑定成功。
$ kubectl get dataset hadoopNAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGEhadoop 511MiB 0.00B 180.00GiB 0.0% Bound 1h
v. 查看 PV、PVC 创建情况,GooseFSRuntime 部署过程中会自动创建 PV 和 PVC。
kubectl get pv,pvcNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpersistentvolume/hadoop 100Gi RWX Retain Bound default/hadoop 58mNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEpersistentvolumeclaim/hadoop Bound hadoop 100Gi RWX 58m
6. 创建应用容器体验加速效果
您可以通过创建应用容器来使用 GooseFS 加速服务,或者进行提交机器学习作业来进行体验相关功能。
如下,创建一个应用容器 app.yaml 用于使用该数据集。我们将多次访问同一数据,并比较访问时间来展示 GooseFS 的加速效果。
apiVersion: v1kind: Podmetadata:name: demo-appspec:containers:- name: demoimage: nginxvolumeMounts:- mountPath: /dataname: hadoopvolumes:- name: hadooppersistentVolumeClaim:claimName: hadoop
i. 使用 kubectl 完成创建应用:
kubectl create -f app.yaml
ii. 查看文件大小:
$ kubectl exec -it demo-app -- bash$ du -sh /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2210M /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2
iii. 进行文件的 cp 观察时间消耗了18s:
$ time cp /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2 /dev/nullreal 0m18.386suser 0m0.002ssys 0m0.105s
iv. 查看此时 dataset 的缓存情况,发现210MB的数据已经都缓存到了本地。
$ kubectl get dataset hadoopNAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGEhadoop 210.00MiB 210.00MiB 180.00GiB 100.0% Bound 1h
v. 为了避免其他因素(例如 page cache)对结果造成影响,我们将删除之前的容器,新建相同的应用,尝试访问同样的文件。由于此时文件已经被 GooseFS 缓存,可以看到第二次访问所需时间远小于第一次。
kubectl delete -f app.yaml && kubectl create -f app.yaml
vi. 进行文件的拷贝观察时间,发现消耗48ms,整个拷贝的时间缩短了300倍。
$ time cp /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2 /dev/nullreal 0m0.048suser 0m0.001ssys 0m0.046s
7. 环境清理
删除应用和应用容器
删除 GooseFSRuntime
kubectl delete goosefsruntime hadoop
删除 dataset
kubectl delete dataset hadoop