前文回顾:
本系列将介绍如何基于 ACK Fluid 反对和优化混合云的数据拜访场景,相干文章请参考:
《基于 ACK Fluid 的混合云优化数据拜访(一):场景与架构》
《基于 ACK Fluid 的混合云优化数据拜访(二):搭建弹性计算实例与第三方存储的桥梁》
在前一篇文章《基于 ACK Fluid 的混合云优化数据拜访(二):搭建弹性计算实例与第三方存储的桥梁》中,介绍如何通过 ACK Fluid 接入第三方分布式存储,能够实现弹性计算实例 ECI 和 ECS 与云下存储系统之间的拜访和数据传输,这实际上解决上云的第一阶段问题:连通性。
而对于生产环境来说,如果云上计算拜访云下存储系统变成一种常态,就须要思考性能、老本和稳定性。比方每年的云上拜访线下数据的专线老本是多少?云上计算工作耗时和原有 IDC 计算工作相比是否有显著的落差?以及一旦专线出了问题,如何升高云上计算工作的损失?
在本文中将重点介绍如何减速第三方存储拜访,实现更好的性能,更低的老本以及升高对专线稳定性的依赖。
概述
即使云上计算可能以 Kubernetes 的标准化协定 PV 存储卷拜访企业的线下存储,也无奈防止在性能,老本上的挑战和需要:
- 数据拜访带宽无限和高延时:云上计算拜访云下存储带来的数据拜访延时和带宽无限,导致高性能计算耗时长,计算资源利用率低
- 数据冗余读取,网络费用低廉:深度学习模型的超参调优、主动调参深度学习工作等运行期间会一直反复拜访同一数据。然而因为 Kubernetes 原生调度器无奈感知数据缓存状态,导致利用调度的后果不佳,缓存无奈重用,导致数据反复拉取引入更多外网和专线费用。
- 线下分布式存储是数据并发拜访的瓶颈,而且面临着性能和稳定性方面的挑战:当大规模算力并发拜访线下存储且深度学习训练的 IO 压力增大,线下分布式存储很容易成为性能瓶颈。这会对计算工作造成影响,甚至会导致整个计算集群生效。
- 受网络稳定性影响重大:一旦公共云和数据中心之间网络不够稳固,会导致数据同步出错,利用处于不可用的状态。
- 数据安全需要:元数据和数据须要爱护,不容许够长久化到云盘上。
ACK Fluid 提供了基于 JindoRuntime 的 PV 存储卷通用减速能力,能够反对满足 PVC 的第三方存储简略,疾速,平安的取得通过分布式缓存实现数据拜访减速能力,能够带来如下益处:
- 零适配老本:只须要实现 CSI 协定中 PVC 的第三方存储即能够立刻应用,无需额定开发。
- 数据拜访性能大幅晋升,晋升工程效率:
a. 通过基于拜访和策略数据预热等伎俩实现拜访云下数据性能等同于数据位于云上计算集群
b. 弹性数据拜访带宽应答高并发,数据拜访吞吐晋升到数百 Gbps,也能够缩容到 0,实现低成本和高吞吐的动态平衡。
c. 数据缓存亲和感知调度防止跨网络数据拜访升高提早
- 防止热点数据的重复读取,节约网络老本:通过分布式缓存将热点数据长久到云上,缩小数据读取,升高网络流量。
- 以数据为核心的自动化运维实现高效的数据拜访,晋升运维效率:包含自动化和定时的数据缓存预热,防止重复拉取数据数据。还反对数据缓存扩容,缩容和清理,实现数据缓存的自动化治理。
- 通过分布式内存缓存防止元数据和数据落盘,更加平安:对于数据安全敏感用户,ACK-Fluid 提供分布式内存缓存一方面性能好,另一方面也防止用户对于数据落盘的担心。
总结:ACK Fluid 为云上计算拜访第三方存储 PVC 提供了开箱即用,高性能,低成本,自动化和无数据落盘的收益。
演示
1. 前提条件
- 已创立 ACK Pro 版集群,且集群版本为 1.18 及以上。具体操作,请参见创立 ACK Pro 版集群 [1]。
- 已装置云原生 AI 套件并部署 ack-fluid 组件。重要:若您已装置开源 Fluid,请卸载后再部署 ack-fluid 组件。
- 未装置云原生 AI 套件:装置时开启 Fluid 数据减速。具体操作,请参见装置云原生 AI 套件 [2]。
- 已装置云原生 AI 套件:在容器服务治理控制台的云原生 AI 套件页面部署 ack-fluid。
- 已通过 kubectl 连贯 ACK 集群。具体操作,请参见通过 kubectl 工具连贯集群 [3]。
- 已创立须要拜访存储系统对应的 PV 存储卷和 PVC 存储卷申明。在 Kubernetes 环境中,不同的存储系统有不同的存储卷创立形式,为保障存储系统与 Kubernetes 集群的连贯稳固,请依据对应存储系统的官网文档进行筹备。留神:对于混合云场景,为了数据的安全性和性能,建议您将数据拜访模式配置为只读。
2. 查问 PV 存储卷和 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 的存储卷申明上,均可失常应用。
3. 创立 Dataset 和 JindoRuntime
1)创立 dataset.yaml 文件,以下 Yaml 文件中蕴含两个待创立的 Fluid 资源对象,别离是 Dataset 和 JindoRuntime
- Dataset:所需挂载的 PVC 存储卷申明信息。
- JindoRuntime:待启动的 JindoFS 分布式缓存系统配置,包含缓存零碎 Worker 组件正本数,以及每个 Worker 组件最大可用的缓存容量等。
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 中定义的数据。
4. 创立 DataLoad 执行缓存预热
因为首次拜访无奈命中数据缓存,利用 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%。
5. 创立利用容器,拜访 PV 存储卷中的数据
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/…
[2] 装置云原生 AI 套件
https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-gui…
[3] 通过 kubectl 工具连贯集群
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/…
作者:车漾
点击立刻收费试用云产品 开启云上实际之旅!
原文链接
本文为阿里云原创内容,未经容许不得转载。