Fluid支持ACK Serverless集群的数据访问加速,您可以将Fluid的全部组件,包括Fluid控制器、缓存系统组件和您的应用程序全部运行于ACK Serverless环境。本文介绍如何在ACK Serverless集群上加速Job应用数据访问。
前提条件
已创建ACK Serverless集群,集群的Kubernetes版本≥1.18且已安装了CoreDNS组件。具体操作,请参见创建集群。
已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl连接Kubernetes集群。
使用限制
本功能与ACK Serverless集群的虚拟节点调度功能冲突,暂不支持同时使用。关于虚拟节点调度功能的更多信息,请参见开启集群虚拟节点调度策略。
部署Fluid控制面组件
若您已安装开源Fluid,请卸载后再部署ack-fluid组件。
部署Fluid控制面组件。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Helm页面,单击创建。
在基本信息配置向导,配置相关参数,然后单击下一步。
部分参数说明如下:
参数
说明
来源
选择应用市场。
Chart
搜索并选中ack-fluid。
说明Chart默认的发布名称为ack-fluid、命名空间为fluid-system。单击下一步时,若发布名称或命名空间与Chart默认值不同,则会弹出请确认的提示框,提示您采用Chart默认的发布名称或命名空间,建议您在提示框中单击是。
在参数配置配置向导,单击确定。
执行以下命令,查看Fluid是否部署成功。
kubectl get pod -n fluid-system
预期输出:
NAME READY STATUS RESTARTS AGE dataset-controller-d99998f79-dgkmh 1/1 Running 0 2m48s fluid-webhook-55c6d9d497-dmrzb 1/1 Running 0 2m49s
显示类似输出结果,说明Fluid部署成功。组件说明如下:
Dataset Controller:负责维护Fluid所引入的各个Dataset CRs(自定义资源)的完整生命周期。
Fluid Webhook:负责对用户需要访问数据的应用Pod进行Sidecar容器注入,无感知地帮助用户实现Serverless场景的数据访问功能。
说明除了上述描述的两个组件外,Fluid的控制面仍然包含了一些与管理缓存系统(例如JindoFS、JuiceFS、Alluxio等)生命周期的控制器组件,这些组件在初始部署状态下不会创建,仅当用户指定需要使用某种缓存系统时,与其相关的缓存系统控制器组件Pod才会按需扩容。
ACK Serverless集群数据访问加速示例
步骤一:上传测试数据到OSS Bucket
步骤二:创建Fluid Dataset和Runtime资源
数据准备和上传后,即可在Fluid中声明上述待访问的数据。您需要提交一个Dataset CR和一个Runtime CR。
Dataset CR:描述数据在外部存储系统中的URL位置。
Runtime CR:描述缓存系统及其具体配置。
执行以下命令,创建Secret资源,将访问OSS Bucket所需的身份凭证信息存储于Secret中。
kubectl create secret generic oss-access-key \ --from-literal=fs.oss.accessKeyId=<access_key_id> \ --from-literal=fs.oss.accessKeySecret=<access_key_secret>
使用以下内容,创建dataset.yaml文件,定义如下Dataset CR和Runtime CR。
本文选择JindoFS作为缓存系统后端(即对应JindoRuntime)。
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: demo-dataset spec: mounts: - mountPoint: oss://<bucket_name>/<bucket_path> name: demo path: / options: fs.oss.endpoint: oss-<region>.aliyuncs.com # OSS Bucket访问端点。 encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: oss-access-key key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: oss-access-key key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: demo-dataset spec: # 缓存Worker节点数量。 replicas: 2 worker: podMetadata: annotations: # 禁用虚拟节点调度功能。 alibabacloud.com/burst-resource: eci_only # 选择JindoFS Pod使用的实例规格。 k8s.aliyun.com/eci-use-specs: <eci_instance_spec> # 启用实例镜像缓存,加速Pod启动过程。 k8s.aliyun.com/eci-image-cache: "true" tieredstore: levels: # 以10 GiB的内存作为每个缓存Worker节点的缓存介质。 - mediumtype: MEM volumeType: emptyDir path: /dev/shm quota: 10Gi high: "0.99" low: "0.99"
部分参数说明如下:
参数
说明
mountPoint
表示挂载UFS的路径,路径格式为
oss://<oss_bucket>/<bucket_dir>
。路径中不需要包含Endpoint信息。如果您使用单挂载点,可以将
path
设置为/
。options
设置了OSS Bucket的访问端点,可以配置为经典VPC内网访问端点或外网访问端点。
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。
replicas
表示创建JindoRuntime缓存Worker Pod的数量,该数量将会影响分布式缓存系统的最大缓存可用容量。
worker.podMetadata.annotations
tieredstore.levels
可以通过
quota
字段指定每个缓存Worker Pod可提供的最大缓存容量。tieredstore.levels.mediumtype
表示缓存类型。
创建JindoRuntime模板样例时,JindoFS目前只支持
HDD
、SSD
或MEM
三者中的某一种缓存类型。tieredstore.levels.path
表示缓存路径,目前只支持单个路径。
tieredstore.levels.quota
表示缓存的最大容量。例如100 Gi表示最大可用100 GiB。
tieredstore.levels.high
表示存储容量上限。
tieredstore.levels.low
表示存储容量下限。
执行以下命令,创建Dataset和JindoRuntime资源。
kubectl create -f dataset.yaml
执行以下命令,查看Dataset部署状态。
Dataset CR和JindoRuntime CR创建约1~2分钟后,缓存系统将部署完毕,之后您可以查看到与缓存系统以及后端存储系统中数据的相关信息。
kubectl get dataset demo-dataset
预期输出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo-dataset 1.16GiB 0.00B 20.00GiB 0.0% Bound 2m58s
输出结果中显示了Fluid Dataset的相关信息,部分输出项说明如下:
输出项
说明
UFS TOTAL SIZE
OSS中数据集总大小。
CACHED
当前缓存量。
CACHE CAPACITY
缓存系统容量。
CACHED PERCENTAGE
数据集缓存百分比。
PHASE
Dataset状态。参数值为Bound,表示已成功部署。
(可选)步骤三:数据缓存预热
预先加热数据可以提升首次数据的访问性能。如果您希望在首次访问数据时得到更好的性能体验,建议您使用该功能。
使用以下内容,创建dataload.yaml文件。
apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: data-warmup spec: dataset: name: demo-dataset namespace: default loadMetadata: true
执行以下命令,部署Dataload。
kubectl create -f dataload.yaml
预期输出:
NAME DATASET PHASE AGE DURATION data-warmup demo-dataset Complete 99s 58s
由预期输出得到,数据预热耗时约为
58s
。
步骤四:创建Job应用访问数据
您可以通过创建应用容器来使用JindoFS数据访问加速服务,或者提交机器学习作业来体验相关功能。本文以创建Job类型应用容器访问OSS为例进行说明。
使用以下内容,创建job.yaml,定义如下Job资源。
apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci annotations: # 禁用虚拟节点调度功能。 alibabacloud.com/burst-resource: eci_only # 选择应用Pod使用的实例规格。 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: demo-dataset backoffLimit: 4
执行以下命令,创建Job。
kubectl create -f job.yaml
执行以下命令,查看Job Pod启动日志。
kubectl logs demo-app-jwktf -c demo
预期输出:
1.2G /data real 0m0.992s user 0m0.004s sys 0m0.674s
由预期输出得到,文件拷贝时间
real
仅为0m0.992s
。
步骤五:环境清理
当您不再使用数据访问功能时,请及时清理环境。
执行以下命令,删除应用容器。
kubectl delete job demo-app
执行以下命令,删除Dataset以及绑定的缓存系统组件。
kubectl delete dataset demo-dataset
重要缓存系统组件的清理可能会需要约1分钟时间,请检查缓存系统各组件Pod被完整删除后,再执行后续清理操作。
执行以下命令,回收Fluid控制面组件。
kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0
当您再次使用数据访问功能时,在创建Fluid Dataset和Runtime资源前,您需要先执行以下命令,创建Fluid控制面组件。
kubectl scale -n fluid-system deployment dataset-controller --replicas=1 kubectl scale -n fluid-system deployment fluid-webhook --replicas=1
- 本页导读 (1)