基于 ACK Fluid 的混合云优化数据访问(三):加速第三方存储的读访问,降本增效并行

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 基于 ACK Fluid 的混合云优化数据访问(三):加速第三方存储的读访问,降本增效并行

作者:车漾


前文回顾:

本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景,相关文章请参考:

基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

基于 ACK Fluid 的混合云优化数据访问(二):搭建弹性计算实例与第三方存储的桥梁


在前一篇文章《搭建弹性计算实例与第三方存储的桥梁》中,介绍如何通过 ACK Fluid 接入第三方分布式存储,可以实现弹性计算实例 ECI 和 ECS 与云下存储系统之间的访问和数据传输,这实际上解决上云的第一阶段问题:连通性。


而对于生产环境来说,如果云上计算访问云下存储系统变成一种常态,就需要考虑性能、成本和稳定性。比如每年的云上访问线下数据的专线成本是多少?云上计算任务耗时和原有 IDC 计算任务相比是否有明显的落差?以及一旦专线出了问题,如何降低云上计算任务的损失?


在本文中将重点介绍如何加速第三方存储访问,实现更好的性能,更低的成本以及降低对专线稳定性的依赖。



概述


即便云上计算能够以 Kubernetes 的标准化协议 PV 存储卷访问企业的线下存储,也无法避免在性能,成本上的挑战和需求:


  • 数据访问带宽有限和高延时:云上计算访问云下存储带来的数据访问延时和带宽有限,导致高性能计算耗时长,计算资源利用率低
  • 数据冗余读取,网络费用昂贵:深度学习模型的超参调优、自动调参深度学习任务等运行期间会不断重复访问同一数据。但是由于 Kubernetes 原生调度器无法感知数据缓存状态,导致应用调度的结果不佳,缓存无法重用,导致数据重复拉取引入更多外网和专线费用。
  • 线下分布式存储是数据并发访问的瓶颈,而且面临着性能和稳定性方面的挑战:当大规模算力并发访问线下存储且深度学习训练的 IO 压力增大,线下分布式存储很容易成为性能瓶颈。这会对计算任务造成影响,甚至会导致整个计算集群失效。
  • 受网络稳定性影响严重:一旦公共云和数据中心之间网络不够稳定,会导致数据同步出错,应用处于不可用的状态。
  • 数据安全需求:元数据和数据需要保护,不允许够持久化到云盘上。


ACK Fluid 提供了基于 JindoRuntime 的 PV 存储卷通用加速能力,可以支持满足 PVC 的第三方存储简单,快速,安全的获得通过分布式缓存实现数据访问加速能力,可以带来如下好处:


1. 零适配成本:只需要实现 CSI 协议中 PVC 的第三方存储即可以立即使用,无需额外开发。

2. 数据访问性能大幅提升,提升工程效率:

a. 通过基于访问和策略数据预热等手段实现访问云下数据性能等同于数据位于云上计算集群

b. 弹性数据访问带宽应对高并发,数据访问吞吐提升到数百 Gbps,也可以缩容到 0,实现低成本和高吞吐的动态平衡。

c. 数据缓存亲和感知调度避免跨网络数据访问降低延迟

3. 避免热点数据的反复读取,节约网络成本:通过分布式缓存将热点数据持久到云上,减少数据读取,降低网络流量。

4. 以数据为中心的自动化运维实现高效的数据访问,提升运维效率:包括自动化和定时的数据缓存预热,避免反复拉取数据数据。还支持数据缓存扩容,缩容和清理,实现数据缓存的自动化管理。

5. 通过分布式内存缓存避免元数据和数据落盘,更加安全:对于数据安全敏感用户,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/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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
630 274
|
7月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
9月前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
8月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
251 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
9月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
191 1
|
8月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
10月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
10月前
|
存储 Kubernetes 安全
k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
Kubernetes提供了多种存储类型,满足不同的应用需求。`emptyDir`和 `hostPath`适用于临时和宿主机存储需求,`nfs`适用于共享存储,`PersistentVolumeClaim`和 `StorageClass`实现了持久存储的灵活管理。通过理解和配置这些存储类型,可以有效提升Kubernetes集群的存储管理能力。
503 13
|
11月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
379 2
|
11月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多