文档

加速在线应用数据访问

更新时间:

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

前提条件

使用限制

本功能与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部署成功。

步骤三:创建Serverless应用容器访问OSS

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

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

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: model-serving
    spec:
      selector:
        matchLabels:
          app: model-serving
      template:
        metadata:
          labels:
            app: model-serving
            alibabacloud.com/fluid-sidecar-target: eci
            alibabacloud.com/eci: "true"
          annotations:
             k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge
        spec:
          containers:
            - image: fluidcloudnative/serving
              name: serving
              ports:
                - name: http1
                  containerPort: 8080
              env:
                - name: TARGET
                  value: "World"
              volumeMounts:
                - mountPath: /data
                  name: data
          volumes:
            - name: data
              persistentVolumeClaim:
                claimName: serverless-data
  2. 执行以下命令,创建应用容器。

    kubectl create -f serving.yaml
  3. 查看Serving文件大小。

    1. 执行以下命令,登录Pod的应用容器。

      kubectl exec -it model-serving-85b645b5d5-2trnf -c serving -- bash
    2. 在Pod中执行以下命令,查看Serving文件大小。

      bash-4.4# du -sh /data/wwm_uncased_L-24_H-1024_A-16.zip

      预期输出:

      1.2G    /data/wwm_uncased_L-24_H-1024_A-16.zip   
  4. 执行以下命令,查看启动日志。

    kubectl  logs model-serving-85b9587c5b-w5528  -c serving

    预期输出:

    Begin loading models at 18:23:59
    
    real    0m27.107s
    user    0m0.000s
    sys    0m0.742s
    Finish loading models at 18:24:26

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

步骤四:清理环境

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

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

    kubectl delete deployment model-serving
  2. 执行以下命令,删除Dataset。

    kubectl delete dataset serverless-data

相关文档