加速Job应用数据访问

Fluid支持在Serverless场景下,通过JindoRuntime优化对象存储的访问,该访问支持缓存模式和无缓存模式。本文介绍如何使用无缓存模式加速Job类型数据访问。

前提条件

使用限制

本功能与ACK弹性调度功能冲突,暂不支持同时使用。关于弹性调度功能的更多信息,请参见自定义弹性资源优先级调度

步骤一:上传测试数据到OSS Bucket

  1. 创建一个2 GB的测试文件,本文以test为例。

  2. 将测试文件上传到阿里云OSS对应的Bucket。

    您可以通过OSS提供的客户端工具ossutil上传数据。具体操作,请参见安装ossutil

步骤二:创建Dataset和JindoRuntime

K8s和OSS环境配置完成后,您只需要耗费几分钟即可完成Dataset和JindoRuntime环境的部署。

  1. 使用以下内容,创建secret.yaml文件。

    创建Dataset之前,您可以创建如下YAML文件,保存OSS的fs.oss.accessKeyIdfs.oss.accessKeySecret

    apiVersion: v1
    kind: Secret
    metadata:
      name: access-key
    stringData:
      fs.oss.accessKeyId: ****
      fs.oss.accessKeySecret: ****
  2. 执行以下命令,部署Secret。

    kubectl create -f secret.yaml
  3. 使用以下内容,创建resource.yaml文件。

    YAML文件中包含以下两部分信息:

    • Dataset:定义远端存储数据集和UFS的信息。

    • JindoRuntime:启动一个JindoFS的集群,提供缓存服务。

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: serverless-data
    spec:
      mounts:
      - mountPoint: oss://large-model-sh/
        name: demo
        path: /
        options:
          fs.oss.endpoint: oss-cn-shanghai.aliyuncs.com
        encryptOptions:
          - name: fs.oss.accessKeyId
            valueFrom:
              secretKeyRef:
                name: access-key
                key: fs.oss.accessKeyId
          - name: fs.oss.accessKeySecret
            valueFrom:
              secretKeyRef:
                name: access-key
                key: fs.oss.accessKeySecret
      accessModes:
        - ReadWriteMany
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: serverless-data
    spec:
      master:
        disabled: true
      worker:
        disabled: true

    部分参数说明如下:

    参数

    说明

    mountPoint

    表示挂载UFS的路径,路径格式为oss://<oss_bucket>/<bucket_dir>

    路径中不需要包含Endpoint信息。如果您直接访问Bucket,可以不配置<bucket_dir>

    fs.oss.endpoint

    表示OSS Bucket的Endpoint信息,配置您的公网或私网地址。

    配置私网地址可以提高数据访问性能,但是需要您的K8s集群所在区域和OSS区域相同。例如您的Bucket在杭州Region,则公网地址为oss-cn-hangzhou.aliyuncs.com,私网地址为oss-cn-hangzhou-internal.aliyuncs.com

    fs.oss.accessKeyId

    表示OSS Bucket的AK ID信息,有权限访问Bucket。

    fs.oss.accessKeySecret

    表示OSS Bucket的AK ID密钥信息,有权限访问Bucket。

    accessModes

    表示支持的读写模式。读写模式包括ReadWriteOnceReadOnlyManyReadWriteManyReadWriteOncePod,默认为ReadOnlyMany

    disabled

    Master和Worker都配置为true,表示开启无缓存模式。

  4. 执行以下命令,部署JindoRuntime和Dataset。

    kubectl create -f resource.yaml
  5. 执行以下命令,查看Dataset的部署情况。

    kubectl get dataset serverless-data

    预期输出:

    NAME              UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    serverless-data                                                                  Bound   1d

    由预期输出得到,PHASEBound,表示Dataset部署成功。

  6. 执行以下命令,查看JindoRuntime的部署情况。

    kubectl get jindo serverless-data

    预期输出:

    NAME              MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    serverless-data                                 Ready        3m41s

    由预期输出得到,FUSEReady,表示JindoRuntime部署成功。

步骤三:创建Job类型应用容器访问OSS

您可以通过创建应用容器来使用JindoFS加速服务,或者提交机器学习作业来体验相关功能。本文以创建Job类型应用容器访问OSS为例进行说明。

  1. 使用以下内容,创建job.yaml文件。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: demo-app
    spec:
      template:
        metadata:
          labels:
            alibabacloud.com/fluid-sidecar-target: eci
            alibabacloud.com/eci: "true"
          annotations:
            k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge
        spec:
          containers:
            - name: demo
              image: debian:buster
              args:
                - -c
                - du -sh /data && time cp -r /data/ /tmp
              command:
                - /bin/bash
              volumeMounts:
                - mountPath: /data
                  name: demo
          restartPolicy: Never
          volumes:
            - name: demo
              persistentVolumeClaim:
                claimName: serverless-data
      backoffLimit: 4
  2. 执行以下命令,创建应用容器。

    kubectl create -f job.yaml
  3. 执行以下命令,查看启动日志。

    kubectl logs demo-app--1-5fr74 -c demo

    预期输出:

    real    0m23.644s
    user    0m0.004s
    sys     0m1.036s

    由预期输出得到,文件的拷贝时间real0m23.644s。拷贝时间取决于网络延时和带宽,如果您希望加速数据访问,请参见使用缓存模式加速Job应用数据访问

步骤四:清理环境

当您不再使用数据访问功能时,请及时清理环境。

  1. 执行以下命令,删除应用容器。

    kubectl delete job demo-app
  2. 执行以下命令,删除Dataset。

    kubectl delete dataset serverless-data