如何在 Kubernetes 中使用 YRCloudFile 的 DataLoad 功能?

Kubernetes 是用于自动部署、扩展和管理容器化应用程序的一个开源的容器编排解决方案。尽管 Kubernetes 最初是为无状态应用程序设计的,但随着有状态工作负载的日益流行,Kubernetes 也可用于管理有状态应用程序。

今天我们想要分享的是如何在 Kubernetes 中使用 YRCloudFile 的 DataLoad 功能。当前业内擅长非结构化数据的存储方式主要是文件存储和对象存储,对象存储的优势在于无限扩容和成本低廉,但在数据访问性能上的确较差。基于这一痛点,高性能分布式文件存储 YRCloudFile 结合用户需求开发了 DataLoad 功能,让用户既能体验文件存储的性能,又能享受对象存储的成本和容量优势;另一方面,容器改变了软件开发、交付和 IT 运营的方式。而 Kubernetes 作为一种可自动实施 Linux 容器操作的开源平台,在其之上能运行所有重要的业务应用,所以逐渐成为了容器编排的业界标准。

通过部署 Fluid + YRCloudFile Runtime,Kubernetes 容器能方便的通过 YRCloudFile 来高效使用对象存储。

Fluid 简介

Fluid 是一款开源的云原生基础架构。在计算和存储分离的大背景驱动下,Fluid 的目标是为 AI 与大数据云原生应用提供一层高效便捷的数据抽象,将数据从存储抽象出来,以便实现:

  1. 通过数据亲和性调度和分布式缓存引擎加速,实现数据和计算之间的融合,从而加速计算对数据的访问。
  2. 将数据独立于存储进行管理,并且通过 Kubernetes 的命名空间进行资源隔离,实现数据的安全隔离。
  3. 将来自不同存储的数据联合起来进行运算,从而有机会打破不同存储的差异性带来的数据孤岛效应。

通过 Kubernetes 服务提供的该数据层抽象,就可以让数据像流体一样在诸如 HDFS、OSS、Ceph 这样的存储源和 Kubernetes 上层的云原生应用计算之间灵活高效地移动、复制、驱逐、转换和管理。而具体的数据操作对用户透明,用户不必再担心访问远端数据的效率,或是管理数据源的便捷性,以及如何帮助 Kubernetes 做出恰当的调度决策等运维问题。用户只需以 Kubernetes 原生数据卷的方式直接访问抽象出来的数据,剩余任务交给 Fluid 完成。

重要概念:

Dataset:数据集是逻辑上相关的一组数据的集合,会被运算引擎使用,比如大数据的 Spark,AI 场景的 TensorFlow。这些数据智能的应用会创造工业界的核心价值。

Runtime:实现数据集安全性,版本管理和数据加速等能力的执行引擎。Fluid 的 Runtime 定义了标准化的接口,通过实现这些接口,开发者能够针对不同的场景与需求,扩展不同的 Runtime。

Fluid + YRCloudFile Runtime,加速数据高效访问

云原生容器应用的数据访问面临众多的挑战,YRCloudFile 为解决这些问题,重构新一代面向容器环境的存储解决方案,开发了标准 CSI 插件无缝对接 Kubernetes。用户只需在 Kubernetes 集群 Master 节点及计算节点上,以容器形式运行 YRCloudFile 提供的 CSI 插件,即可对 YRCloudFile 的存储能力进行调度和访问。此外,YRCloudFile 充分调研客户对于对象存储的使用需求设计了 DataLoad 功能,让用户既能体验文件存储的性能,又享受对象存储的成本和容量优势。对于容器用户来说,只通过 YRCloudFile-CSI 也能够使用 YRCloudFile 的 DataLoad 功能,但是操作上较为冗余,生命周期管理上不够完善。

Fluid 通过在 Kubernetes 中部署 Dataset 和 Runtime 两个自定义资源对象,为数据密集型应用(例如大数据应用、AI 应用等)提供了数据加速的服务,并具备很强的数据集安全性和版本管理能力。用户在 Dataset 中指定远存储的信息,Runtime 将远程数据加载到离计算节点更近的地方,从而达到数据访问加速的效果。

将 Fluid 的管理能力和 YRCloudFile 的高效访问能力结合。YRCloudFile 基于自身特性开发了符合 Runtime 接口的 YRCloudFile Runtime,使用 Fluid 的接口来实现 YRCloudFile 的 DataLoad 功能,让容器用户以 YRCloudFile 为存储卷,只使用 Kubernetes 的 API 接口就可以高效的使用对象存储 。

Fluid + YRCloudFile Runtime 当前具备的 DataLoad 功能如下:

  1. 支持元数据导入和数据预热
  1. 支持指定前缀的导入
  1. 支持数据使用结束后的增量导出

后期我们也会将 YRCloudFile 的 DataLoad 功能持续集成到 YRCloudFile Runtime 中。

整体架构图如下图所示,YRCloudFile Runtime 会启动一个 Master 组件。Master 组件主要用来调用 YRCloudFile 的 gRPC 服务。

使用流程:

  1. 用户创建 Dataset 定义 S3 的访问信息和 DataLoad 的配置参数。
  2. 用户创建 Runtime,YRCloudFile Runtime Controller 监听到 YRCloudFile Runtime 资源,会将 YRCloudFile Runtime 与同名的 Dataset 进行绑定。
  3. 根据 Dataset 的配置,自动导入 S3 数据到 YRCloudFile 中。
  4. 通过 YRCloudFile-CSI 插件,将对接了 S3 的 YRCloudFile 以 PVC 形式暴露给容器使用,支持容器以 POSIX 接口访问数据。
  5. 用户使用返回的 PVC 来访问数据。
  6. 数据使用结束,将增量数据从 YRCloudFile 热层导出到对象存储中。

YRCloudFile Runtime 使用演示

下面来看看如何使用 YRCloudFile Runtime 来访问 S3 数据。

环境要求

  • Kubernetes version > 1.14, 支持 CSI
  • Fluid 0.7.0
  • YRCloudFile 集群 v6.8.x
  • YRCloudFile-CSI,YRCloudFile Runtime v6.8.x

创建 Dataset

创建 Dataset 的 YAML 文件

apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
  name: sample
spec:
  mounts:
    - mountPoint: s3_ip
      name: sample
      options:
        fs.s3.accessKeyId: s3_access_key
        fs.s3.accessKeySecret: s3_access_key_secret
        fs.s3.bucketName: s3_bucket_name
        loadType: onlyMeta/mate+data
        importPrefix: prefix
        needExport: true/false

参数解释:

mountPoint,accessKeyId,bucketName 是访问 S3 的必备信息。

loadType:导入模式,只导入元数据或者预加载(导入数据+元数据)。

importPrefix:通过配置 importPrefix 导入指定前缀的文件。

needExport:数据使用结束后是否将增量数据导出到 S3。

创建 YRCloudFile Runtime

创建 YRCloudFile Runtime 的 YAML 文件:

apiVersion: data.fluid.io/v1alpha1
kind: YrFSRuntime
metadata:
  name: test1

YRCloudFile Runtime 只有一个 Master 组件,创建 YRCloudFile Runtime 后会启动 Master 的 Pod 。

创建 YRCloudFile Runtime 并查看 Master 组件 Pod 的状态。

$kubectl apply -f yrfsruntime.yaml
yrfsruntime.data.fluid.io/sample created
$kubectl get pods
NAME              READY   STATUS    RESTARTS   AGE
sample-master-0   1/1     Running   0          4m23s

Pod 创建成功后,YRCloudFile Runtime controller 就会进入 Pod 调用 gRPC 来执行 S3 数据的导入。

查看导入状态:

$kubectl get yrfsruntime
NAME     MASTER PHASE   AGE
sample   Imported       2m12s

当状态为表示 Imported 已经导入完成,会创建出与 Dataset 同名的 PVC 将 YRCloudFile 暴露给容器使用。

$ kubectl get pvc
NAME     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
sample   Bound    pvc-8e344d70-d346-47de-9645-2468c6669877   100Pi      RWX            yrcloudfile-sc   5m42s

创建容器使用 S3 数据

创建 Pod 的 YAML:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - mountPath: /data
          name: vol
  volumes:
    - name: vol
      persistentVolumeClaim:
        claimName: sample

通过配置与 YRCloudFile Runtime 同名的 PVC,容器可以立刻像使用文件存储一样使用对象存储中的数据。进入 Pod 执行查看目录下是否已包含对象存储中的数据:

$  kubectl exec -it nginx  bash -- ls /data

通过上述的设计,我们将 YRCloudFile 的 DataLoad 功能融入到 Fluid 中,用户只需简单的创建 Dataset 和 Runtime,就可以让容器高效的使用对象存储,既能享受到文件存储的性能,还可以做到降本增效。未来我们的 DataLoad 功能会不断演进,也会更好融入到 Kubernetes 中,敬请期待哦。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章