关于云原生:基于-ACK-Fluid-的混合云优化数据访问五自动化跨区域中心数据分发

48次阅读

共计 6288 个字符,预计需要花费 16 分钟才能阅读完成。

前文回顾:

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

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

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

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

《基于 ACK Fluid 的混合云优化数据拜访(四):将第三方存储目录挂载到 Kubernetes,晋升效率和标准化》

在之前的文章中,咱们探讨了混合云场景下 Kubernetes 与数据相结合的 Day 1:解决数据接入的问题,实现云上计算和线下存储的连贯。在此基础上,ACK Fluid 进一步解决了数据拜访的老本和性能问题。而进入 Day 2,当用户真的在生产环境应用该计划时,最次要的挑战就是运维側如何解决多区域集群的数据同步。

概述

许多企业出于性能、平安、稳定性和资源隔离的目标,会在不同区域建设多个计算集群。而这些计算集群须要近程拜访惟一中心化的数据存储。比方随着大语言模型的逐步成熟,基于其的多区域推理服务也逐步成为各个企业须要反对的能力,就是这个场景的具体实例,它有不小的挑战:

  • 多计算集群跨数据中心手动操作数据同步,十分耗时
  • 以大语言模型为例,参数多文件大,数量多,治理简单:不同业务抉择不同的根底模型和业务数据,因而最终模型存在差别。
  • 模型数据会依据业务输出一直做更新迭代,模型数据更新频繁
  • 模型推理服务启动慢,拉取文件工夫长:大型语言模型的参数规模相当微小,体积通常很大甚至达到几百 GB,导致拉取到 GPU 显存的耗时微小,启动工夫十分慢。
  • 模型更新须要所有区域同步更新,而在过载的存储集群上进行复制作业重大影响现有负载的性能。

ACK Fluid 除了提供通用存储客户端的减速能力,还提供了定时和触发式数据迁徙和预热能力,简化数据散发的复杂度。

  • 节俭网络和计算成本:跨区流量老本大幅升高,计算工夫显著缩短,大量减少计算集群老本;并且能够通过弹性进一步优化。
  • 利用数据更新大幅减速:因为计算的数据拜访在同一个数据中心或者可用区内实现通信,延时升高,且缓存吞吐并发能力可线性扩大。
  • 缩小简单的数据同步操作:通过自定义策略控制数据同步操作,升高数据拜访争抢,同时通过自动化的形式升高运维复杂度。

演示

本演示介绍如何通过 ACK Fluid 的定时预热机制更新用户不同区域的计算集群能够拜访的数据。

前提条件

  • 已创立 ACK Pro 版集群,且集群版本为 1.18 及以上。具体操作,请参见创立 ACK Pro 版集群[1]。
  • 已装置云原生 AI 套件并部署 ack-fluid 组件。重要:若您已装置开源 Fluid,请卸载后再部署 ack-fluid 组件。
  • 未装置云原生 AI 套件:装置时开启 Fluid 数据减速。具体操作,请参见装置云原生 AI 套件[2]。
  • 已装置云原生 AI 套件:在容器服务治理控制台 [3] 的云原生 AI 套件页面部署 ack-fluid。
  • 已通过 kubectl 连贯 Kubernetes 集群。具体操作,请参见通过 kubectl 工具连贯集群[4]。

背景信息

筹备好 K8s 和 OSS 环境的条件,您只须要消耗 10 分钟左右即可实现 JindoRuntime 环境的部署。

步骤一:筹备 OSS Bucket 的数据

  1. 执行以下命令,下载一份测试数据。
$ wget https://archive.apache.org/dist/hbase/2.5.2/RELEASENOTES.md
  1. 将下载的测试数据上传到阿里云 OSS 对应的 Bucket 上,上传办法能够借助 OSS 提供的客户端工具 ossutil。具体操作,请参见装置 ossutil[5]。
$ ossutil cp RELEASENOTES.md oss://<bucket>/<path>/RELEASENOTES.md

步骤二:创立 Dataset 和 JindoRuntime

  1. 在创立 Dataset 之前,您能够创立一个 mySecret.yaml 文件来保留 OSS 的 accessKeyId 和 accessKeySecret。

创立 mySecret.yaml 文件的 YAML 样例如下:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
stringData:
  fs.oss.accessKeyId: xxx
  fs.oss.accessKeySecret: xxx
  1. 执行以下命令,生成 Secret。
$ kubectl create -f mySecret.yaml
  1. 应用以下 YAML 文件样例创立一个名为 dataset.yaml 的文件,且外面蕴含两局部:
  • 创立一个 Dataset,形容远端存储数据集和 UFS 的信息。
  • 创立一个 JindoRuntime,启动一个 JindoFS 的集群来提供缓存服务。
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
  name: demo
spec:
  mounts:
    - mountPoint: oss://<bucket-name>/<path>
      options:
        fs.oss.endpoint: <oss-endpoint>
      name: hbase
      path: "/"
      encryptOptions:
        - name: fs.oss.accessKeyId
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: fs.oss.accessKeyId
        - name: fs.oss.accessKeySecret
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: fs.oss.accessKeySecret
  accessModes:
    - ReadOnlyMany
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
  name: demo
spec:
  replicas: 1
  tieredstore:
    levels:
      - mediumtype: MEM
        path: /dev/shm
        quota: 2Gi
        high: "0.99"
        low: "0.8"
  fuse:
   args:
    - -okernel_cache
    - -oro
    - -oattr_timeout=60
    - -oentry_timeout=60
    - -onegative_timeout=60

相干参数解释如下表所示:

  1. 执行以下命令,创立 JindoRuntime 和 Dataset。
$ kubectl create -f dataset.yaml
  1. 执行以下命令,查看 Dataset 的部署状况。
$ kubectl get dataset

预期输入:

NAME    UFS TOTAL SIZE   CACHED      CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
demo    588.90KiB        0.00B       10.00GiB         0.0%                Bound   2m7s

步骤三:创立反对定时运行的 Dataload

  1. 应用以下 YAML 文件样例创立一个名为 dataload.yaml 的文件。
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
  name: cron-dataload
spec:
  dataset:
    name: demo
    namespace: default
  policy: Cron
  schedule: "*/2 * * * *" # Run every 2 min

相干参数解释如下表所示:

scheule 应用以下 cron 格局:

# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些零碎上,7 也是星期日)# │ │ │ │ │                          或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *

同时,cron 反对下列运算符:

  • 逗号(,)示意列举,例如:1,3,4,7 示意在每小时的 1、3、4、7 分时执行 Dataload。
  • 连词符(-)示意范畴,例如:1-6 示意每小时的 1 到 6 分钟内,每分钟都执行一次。
  • 星号(*)代表任何可能的值。例如:在“小时域”里的星号等于是“每一个小时”。
  • 百分号(%) 示意“每 ”。例如:%10 * 示意每 10 分钟执行一次。
  • 斜杠 (/) 用于形容范畴的增量。例如:/2 * 示意每 2 分钟执行一次。

您也能够在这里查看更多信息。

Dataload 相干高级配置请参考如下配置文件:

apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
  name: cron-dataload
spec:
  dataset:
    name: demo
    namespace: default
  policy: Cron # including Once, Cron
  schedule: * * * * * # only set when policy is cron
  loadMetadata: true
  target:
    - path: <path1>
      replicas: 1
    - path: <path2>
      replicas: 2

相干参数解释如下表所示:

  1. 执行以下命令创立 Dataload。
$ kubectl apply -f dataload.yaml
  1. 执行以下命令查看 Dataload 状态。
$ kubectl get dataload

预期输入:

NAME             DATASET   PHASE      AGE     DURATION
cron-dataload    demo      Complete   3m51s   2m12s
  1. 期待 Dataload 状态为 Complete 后,执行以下命令查看以后 dataset 状态。
$ kubectl get dataset

预期输入:

NAME    UFS TOTAL SIZE   CACHED      CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
demo    588.90KiB        588.90KiB   10.00GiB         100.0%              Bound   5m50s

能够看出 oss 中文件曾经全副加载到缓存。

步骤四:创立利用容器拜访 OSS 中的数据

本文以创立一个利用容器拜访上述文件以查看定时 Dataload 成果。

  1. 应用以下 YAML 文件样例,创立名为 app.yaml 的文件。
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - mountPath: /data
          name: demo-vol
  volumes:
    - name: demo-vol
      persistentVolumeClaim:
        claimName: demo
  1. 执行以下命令创立利用容器。
$ kubectl create -f app.yaml
  1. 期待利用容器就绪,执行以下命令查看 OSS 中的数据:
$ kubectl exec -it nginx -- ls -lh /data

预期输入:

total 589K
-rwxrwxr-x 1 root root 589K Jul 31 04:20 RELEASENOTES.md
  1. 为了验证 dataload 定时更新底层文件成果,咱们在定时 dataload 触发前批改 RELEASENOTES.md 内容并从新上传。
$ echo "hello, crondataload." >> RELEASENOTES.md

从新上传该文件到 oss。

$ ossutil cp RELEASENOTES.md oss://<bucket-name>/<path>/RELEASENOTES.md
  1. 期待 dataload 工作触发。Dataload 工作实现时,执行以下命令查看 Dataload 作业运行状况:
$ kubectl describe dataload cron-dataload

预期输入:

...
Status:
  Conditions:
    Last Probe Time:       2023-07-31T04:30:07Z
    Last Transition Time:  2023-07-31T04:30:07Z
    Status:                True
    Type:                  Complete
  Duration:                5m54s
  Last Schedule Time:      2023-07-31T04:30:00Z
  Last Successful Time:    2023-07-31T04:30:07Z
  Phase:                   Complete
...

其中,Status 中 Last Schedule Time 为上一次 dataload 作业的调度工夫,Last Successful Time 为上一次 dataload 作业的实现工夫。

此时,能够执行以下命令查看以后 Dataset 状态:

$ kubectl get dataset

预期输入:

NAME    UFS TOTAL SIZE   CACHED      CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
demo    588.90KiB        1.15MiB     10.00GiB         100.0%              Bound   10m

能够看出更新后的文件也曾经加载到了缓存。

  1. 执行以下命令在利用容器中查看更新后的文件:
$ kubectl exec -it nginx -- tail /data/RELEASENOTES.md

预期输入:

  \<name\>hbase.config.read.zookeeper.config\</name\>
  \<value\>true\</value\>
  \<description\>
        Set to true to allow HBaseConfiguration to read the
        zoo.cfg file for ZooKeeper properties. Switching this to true
        is not recommended, since the functionality of reading ZK
        properties from a zoo.cfg file has been deprecated.
  \</description\>
\</property\>
hello, crondataload.

从最初一行能够看出,利用容器曾经能够拜访更新后的文件。

环境清理

当您不再应用该数据减速性能时,须要清理环境。

执行以下命令,删除 JindoRuntime 和利用容器。

$ kubectl delete -f app.yaml  $ kubectl delete -f dataset.yaml

总结

对于基于 ACK Fluid 的混合云优化数据拜访的探讨先到这里告一段落,阿里云容器服务团队会和用户在这个场景下继续的迭代和优化,随着实际不断深入,这个系列也会继续更新。

相干链接:

[1] 创立 ACK Pro 版集群

https://help.aliyun.com/document_detail/176833.html#task-skz-…

[2] 装置云原生 AI 套件

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-gui…

[3] 容器服务治理控制台

https://account.aliyun.com/login/login.htm?oauth_callback=htt…

[4] 通过 kubectl 工具连贯集群

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/…

[5] 装置 ossutil

https://help.aliyun.com/zh/oss/developer-reference/install-os…

作者:车漾

点击立刻收费试用云产品 开启云上实际之旅!

原文链接

本文为阿里云原创内容,未经容许不得转载。

正文完
 0