前文回顾:
本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景,相关文章请参考:
基于 ACK Fluid 的混合云优化数据访问(一):场景与架构https://blog.csdn.net/yunqiinsight/article/details/132854239
基于 ACK Fluid 的混合云优化数据访问(二):搭建弹性计算实例与第三方存储的桥梁https://blog.csdn.net/yunqiinsight/article/details/133037540
在前一篇文章《基于 ACK Fluid 的混合云优化数据访问(二):搭建弹性计算实例与第三方存储的桥梁》中,介绍如何通过 ACK Fluid 接入第三方分布式存储,可以实现弹性计算实例 ECI 和 ECS 与云下存储系统之间的访问和数据传输,这实际上解决上云的第一阶段问题:连通性。
而对于生产环境来说,如果云上计算访问云下存储系统变成一种常态,就需要考虑性能、成本和稳定性。比如每年的云上访问线下数据的专线成本是多少?云上计算任务耗时和原有 IDC 计算任务相比是否有明显的落差?以及一旦专线出了问题,如何降低云上计算任务的损失?
在本文中将重点介绍如何加速第三方存储访问,实现更好的性能,更低的成本以及降低对专线稳定性的依赖。
即便云上计算能够以 Kubernetes 的标准化协议 PV 存储卷访问企业的线下存储,也无法避免在性能,成本上的挑战和需求:
ACK Fluid 提供了基于 JindoRuntime 的 PV 存储卷通用加速能力,可以支持满足 PVC 的第三方存储简单,快速,安全的获得通过分布式缓存实现数据访问加速能力,可以带来如下好处:
1. 零适配成本:只需要实现 CSI 协议中 PVC 的第三方存储即可以立即使用,无需额外开发。
2. 数据访问性能大幅提升,提升工程效率:
a. 通过基于访问和策略数据预热等手段实现访问云下数据性能等同于数据位于云上计算集群
b. 弹性数据访问带宽应对高并发,数据访问吞吐提升到数百 Gbps,也可以缩容到 0,实现低成本和高吞吐的动态平衡。
c. 数据缓存亲和感知调度避免跨网络数据访问降低延迟
3. 避免热点数据的反复读取,节约网络成本:通过分布式缓存将热点数据持久到云上,减少数据读取,降低网络流量。
4. 以数据为中心的自动化运维实现高效的数据访问,提升运维效率:包括自动化和定时的数据缓存预热,避免反复拉取数据数据。还支持数据缓存扩容,缩容和清理,实现数据缓存的自动化管理。
5. 通过分布式内存缓存避免元数据和数据落盘,更加安全:对于数据安全敏感用户,ACK-Fluid 提供分布式内存缓存一方面性能好,另一方面也避免用户对于数据落盘的担忧。
总结:ACK Fluid 为云上计算访问第三方存储 PVC 提供了开箱即用,高性能,低成本,自动化和无数据落盘的收益。
执行如下命令,查询 Kubernetes 中 PV 存储卷和 PVC 存储卷声明的信息。
$ kubectl get pvc,pv
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/demo-pvc Bound demo-pv 5Gi ROX 19h
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/demo-pv 30Gi ROX Retain Bound default/demo-pvc 19h
PV存储卷 demo-pv 的容量为 30GB,支持 RWX 访问模式,已被绑定到 PVC 名称为 demo-pvc 的存储卷声明上,均可正常使用。
1)创建 dataset.yaml 文件,以下 Yaml 文件中包含两个待创建的 Fluid 资源对象,分别是 Dataset 和 JindoRuntime
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: pv-demo-dataset
spec:
mounts:
- mountPoint: pvc://demo-pvc
name: data
path: /
accessModes:
- ReadOnlyMany
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
name: pv-demo-dataset
spec:
replicas: 2
tieredstore:
levels:
- mediumtype: MEM
path: /dev/shm
quota: 10Gi
high: "0.9"
low: "0.8"
配置文件中资源对象的详细参数说明如下。
2)执行如下命令,创建 Dataset 和 JindoRuntime 资源对象
$ kubectl create -f dataset.yaml
3)执行如下命令,查看 Dataset 的部署情况
$ kubectl get dataset pv-demo-dataset
预期输出:说明初次启动 JindoFS 缓存系统时涉及镜像拉取过程,因为网络环境等因素的影响,可能需要耗时 2~3 分钟。Dataset 处于 Bound 状态,表明 JindoFS 缓存系统已在集群内正常启动,应用 Pod 可正常访问 Dataset 中定义的数据。
由于首次访问无法命中数据缓存,应用 Pod 的数据访问效率可能较低,Fluid 提供了 DataLoad 缓存预热操作提升首次数据访问的效率。
1)创建 dataload.yaml 文件,代码示例如下
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: dataset-warmup
spec:
dataset:
name: pv-demo-dataset
namespace: default
loadMetadata: true
target:
- path: /
replicas: 1
上述资源对象的详细参数说明如下所示。
2)执行如下命令,创建 DataLoad 对象
$ kubectl create -f dataload.yaml
3)执行如下命令,查看 DataLoad 状态
$ kubectl get dataload dataset-warmup
预期输出:
NAME DATASET PHASE AGE DURATION
dataset-warmup pv-demo-dataset Complete 62s 12s
4)执行如下命令,查看数据缓存状态
$ kubectl get dataset
预期输出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
pv-demo-dataset 10.96GiB 10.96GiB 20.00GiB 100.0% Bound 3m13s
DataLoad 缓存预热操作完成后,数据集的已缓存数据量(CACHED)已更新为整个数据集的大小,代表整个数据集已被缓存,缓存百分比(CACHED PERCENTAGE)为 100.0%。
1)使用如下 YAML,创建 pod.yaml 文件,并修改 YAML 文件中的 claimName 名称与步骤二创建的 Dataset 名称相同
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
command:
- "bash"
- "-c"
- "sleep inf"
volumeMounts:
- mountPath: /data
name: data-vol
volumes:
- name: data-vol
persistentVolumeClaim:
claimName: pv-demo-dataset # 名称需要与Dataset相同。
2)执行如下命令,创建应用 Pod
$ kubectl create -f pod.yaml
3)执行如下命令,登录 Pod 访问数据
$ kubectl exec -it nginx bash
预期输出:
# Nginx Pod中,/data目录下有一个名为demofile的文件,大小为11 GB。
$ ls -lh /data
total 11G
-rw-r----- 1 root root 11G Jul 28 2023 demofile
# 执行cat /data/demofile > /dev/null命令,将demofile文件中的内容读取并写入/dev/null设备中,用时11.004秒。
$ time cat /data/demofile > /dev/null
real 0m11.004s
user 0m0.065s
sys 0m3.089s
由于数据集中的数据已经全部缓存在了分布式缓存系统中,读取数据时将会从缓存中读取,而不是从远程存储系统中读取,从而减少了网络传输,提升了数据访问效率。
相关链接:
[1] 创建 ACK Pro 版集群
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-2#task-skz-qwk-qfb
[2] 安装云原生 AI 套件
https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/deploy-the-cloud-native-ai-suite#task-2038811
[3] 通过 kubectl 工具连接集群
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/obtain-the-kubeconfig-file-of-a-cluster-and-use-kubectl-to-connect-to-the-cluster#task-ubf-lhg-vdb
作者:车漾
点击立即免费试用云产品 开启云上实践之旅!
原文链接
本文为阿里云原创内容,未经允许不得转载。