本文档介绍了如何创建或使用 Kubernetes 集群环境,通过 Helm 完成 Fluid 安装部署,并使用 Fluid 创建数据集。
-
Kubernetes cluster >= v1.18
如果你目前没有满足条件的 Kubernetes 环境, 那么我们推荐你选择官方认证的 Kubernetes 云服务, 通常情况下, 你仅需寥寥几步即可快速获得一个专属的 Kubernetes 环境, 以下列出了部分经过认证的 Kubernetes 云服务:
注意: 考虑到 Minikube 功能的局限性,我们不推荐使用 Minikube 进行接下来的步骤
-
Kubectl 1.18+
请确保Kubectl已经正确配置使其能够与你的Kubernetes环境进行交互
-
在接下来的步骤中, 将使用Helm 3进行 Fluid 的快速安装
-
创建命名空间
$ kubectl create ns fluid-system
-
为您本地Helm仓库添加并且更新“fluid”源到最新版本
$ helm repo add fluid https://fluid-cloudnative.github.io/charts $ helm repo update
-
使用 Helm 安装 Fluid
$ helm install fluid fluid/fluid NAME: fluid LAST DEPLOYED: Tue Jul 7 11:22:07 2020 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
-
查看Fluid的运行状态
$ kubectl get po -n fluid-system NAME READY STATUS RESTARTS AGE alluxioruntime-controller-64948b68c9-zzsx2 1/1 Running 0 108s csi-nodeplugin-fluid-2mfcr 2/2 Running 0 108s csi-nodeplugin-fluid-l7lv6 2/2 Running 0 108s dataset-controller-5465c4bbf9-5ds5p 1/1 Running 0 108s
Fluid提供了云原生的数据加速和管理能力,并抽象出了数据集(Dataset)
概念方便用户管理,接下来将演示如何用 Fluid 创建一个数据集。
-
创建一个Dataset CRD对象,其中描述了数据集的来源。
$ cat<<EOF >dataset.yaml apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: demo spec: mounts: - mountPoint: https://mirrors.bit.edu.cn/apache/spark/ name: spark EOF
执行安装
$ kubectl create -f dataset.yaml
-
创建
AlluxioRuntime
CRD对象,用来描述支持这个数据集的 Runtime, 在这里我们使用Alluxio作为其Runtime$ cat<<EOF >runtime.yaml apiVersion: data.fluid.io/v1alpha1 kind: AlluxioRuntime metadata: name: demo spec: replicas: 1 tieredstore: levels: - mediumtype: MEM path: /dev/shm quota: 2Gi high: "0.95" low: "0.7" EOF
使用
kubectl
完成创建$ kubectl create -f runtime.yaml
-
接下来,我们创建一个应用容器来使用该数据集,我们将多次访问同一数据,并比较访问时间来展示 Fluid 的加速效果。
$ cat<<EOF >app.yaml apiVersion: v1 kind: Pod metadata: name: demo-app spec: containers: - name: demo image: nginx volumeMounts: - mountPath: /data name: demo volumes: - name: demo persistentVolumeClaim: claimName: demo EOF
使用
kubectl
完成创建$ kubectl create -f app.yaml
-
登录到应用容器中访问数据,初次访问会花费更长时间。
$ kubectl exec -it demo-app -- bash $ du -sh /data/spark/spark-3.0.1/spark-3.0.1-bin-without-hadoop.tgz 150M /data/spark/spark-3.0.1/spark-3.0.1-bin-without-hadoop.tgz $ time cp /data/spark/spark-3.0.1/spark-3.0.1-bin-without-hadoop.tgz /dev/null real 0m13.171s user 0m0.002s sys 0m0.028s
-
为了避免其他因素(比如 page cache )对结果造成影响,我们将删除之前的容器,新建相同的应用,尝试访问同样的文件。由于此时文件已经被
Alluxio
缓存,可以看到第二次访问所需时间远小于第一次。$ kubectl delete -f app.yaml && kubectl create -f app.yaml $ kubectl exec -it demo-app -- bash $ time cp /data/spark/spark-3.0.1/spark-3.0.1-bin-without-hadoop.tgz /dev/null real 0m0.034s user 0m0.001s sys 0m0.032s
到这里,我们简单地创建了一个数据集并实现了数据集的抽象管理与加速, 更多有关 Fluid 的更详细的信息, 请参考以下示例文档: