Fluid支持在Serverless场景下,通过JindoRuntime优化对象存储的数据访问。本文介绍如何在Serverless场景下使用Fluid的进阶配置,包括设置应用Pod退出延迟和应用容器数据访问挂载点检查。
前提条件
- 已提交公测申请表单,开通公测。
- 已创建ACK Pro版集群,且集群的Kubernetes版本≥1.18。具体操作,请参见创建ACK Pro版集群。
- 已安装云原生AI套件并部署ack-fluid组件,云原生AI套件版本≥0.8.0。
- 已部署ACK虚拟节点(Virtual Node)。具体操作,请参见通过部署ACK虚拟节点组件创建ECI Pod。
- 已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl工具连接集群。
- 已开通阿里云对象存储(OSS)服务和存储空间(Bucket)。具体操作,请参见开通OSS服务和创建存储空间。
设置应用Pod退出延迟
Fluid采用Sidecar容器注入的方式,为Pod中的应用容器提供Serverless场景下的对象存储的数据访问支持。在默认配置下,从应用容器退出到Pod优雅退出存在约30秒的延迟时间。为减少成本,您可以通过terminationGracePeriodSeconds
字段控制Pod优雅退出时长,从而缩短上述延迟时间。
terminationGracePeriodSeconds
字段的配置会影响到应用容器的优雅退出时长,请您根据实际场景设置相对合理的时长。
示例一:Job类型应用
设置最小terminationGracePeriodSeconds
的Job类型应用的YAML示例如下:
apiVersion: batch/v1
kind: Job
metadata:
name: demo-app
spec:
terminationGracePeriodSeconds: 0
template:
metadata:
labels:
alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true"
spec:
containers:
- name: demo
image: debian:buster
args:
- -c
- time cp -r /data/ /tmp
command:
- /bin/bash
volumeMounts:
- mountPath: /data
name: demo
restartPolicy: Never
volumes:
- name: demo
persistentVolumeClaim:
claimName: serverless-data
backoffLimit: 4
上述YAML中,spec.terminationGracePeriodSeconds: 0
表示Job Pod的退出延时为0秒。
示例二:Argo类型应用
terminationGracePeriodSeconds
的Argo类型应用的YAML示例如下:apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: serverless-workflow-
spec:
podSpecPatch: '{"terminationGracePeriodSeconds": 0}'
entrypoint: serverless-workflow-example
volumes:
# Pass serverless-data as an argument to the serverless-workflow-example template
# Same syntax as k8s Pod spec
- name: datadir
persistentVolumeClaim:
claimName: serverless-data
templates:
- name: serverless-workflow-example
steps:
- - name: copy
template: copy-files
- - name: check
template: check-files
- name: copy-files
metadata:
labels:
alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-use-specs: ecs.s6-c1m2.xlarge
container:
image: debian:buster
command: [bash, -c]
args: ["time cp -r /data/ /tmp"]
volumeMounts:
- name: datadir
mountPath: /data
- name: check-files
metadata:
labels:
alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-use-specs: ecs.s6-c1m2.xlarge
container:
image: debian:buster
command: [bash, -c]
args: ["du -sh /data; md5sum /data/*"]
volumeMounts:
- name: datadir
mountPath: /data
上述YAML中,spec.podSpecPatch: '{"terminationGracePeriodSeconds": 0}'
表示Argo Pod的退出延时为0秒。
设置应用容器数据访问挂载点检查
Fluid以Sidecar容器注入的方式,为Pod中的应用容器提供Serverless场景下的对象存储的数据访问支持。
如果您希望在Sidecar容器创建的数据访问挂载点就绪后,进行符合预期的数据访问。Fluid为这种场景提供了数据访问挂载点检查脚本,并将该脚本自动注入到您的应用Pod中,挂载于应用容器的/check-dataset-ready.sh文件路径下。您可以手动修改或通过Fluid自动配置容器的lifecycle.postStart
的方式,确保应用容器数据访问的正确性。
方式一:手动配置
设置应用容器数据访问挂载点检查的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"
spec:
containers:
- name: demo
image: debian:buster
lifecycle:
postStart:
exec:
command:
- /check-dataset-ready.sh
- "jindo"
- "/data"
args:
- -c
- time cp -r /data/ /tmp
command:
- /bin/bash
volumeMounts:
- mountPath: /data
name: demo
restartPolicy: Never
volumes:
- name: demo
persistentVolumeClaim:
claimName: serverless-data
backoffLimit: 4
lifecycle.postStart.exec.command
中增加了/check-dataset-ready.sh jindo /data
的挂载点检查脚本,其中:
- 第一个参数(本示例为
jindo
)与Fluid Dataset所绑定的Runtime类型相关,Runtime类型及挂载点如下表所示:Runtime类型 挂载点检查参数 JindoRuntime jindo AlluxioRuntime alluxio JuiceFSRuntime juicefs - 第二个参数(本示例为
/data
)需指定Fluid Dataset对应PVC在容器内的挂载路径(volumeMounts
字段)。
方式二:自动配置
本文以Job类型应用和Argo类型应用的自动配置为例进行说明。
示例一:Job类型应用
apiVersion: batch/v1
kind: Job
metadata:
name: demo-app
spec:
template:
metadata:
labels:
alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true"
app.poststart.fluid.io/inject: "true"
spec:
containers:
- name: demo
image: debian:buster
args:
- -c
- time cp -r /data/ /tmp
command:
- /bin/bash
volumeMounts:
- mountPath: /data
name: demo
restartPolicy: Never
volumes:
- name: demo
persistentVolumeClaim:
claimName: serverless-data
backoffLimit: 4
在labels
中配置app.poststart.fluid.io/inject: "true"
,即可启用Fluid自动配置挂载点检查脚本的功能。
lifecycle.postStart
,Fluid的自动配置将不会生效,您必须使用手动配置进行数据访问挂载点检查。
示例二:Argo类型应用
Fluid支持自动配置上述挂载点检查脚本。通过Fluid自动配置挂载点脚本的Argo类型应用的YAML示例如下:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: serverless-workflow-
spec:
entrypoint: serverless-workflow-example
volumes:
# Pass serverless-data as an argument to the serverless-workflow-example template
# Same syntax as k8s Pod spec
- name: datadir
persistentVolumeClaim:
claimName: serverless-data
templates:
- name: serverless-workflow-example
steps:
- - name: copy
template: copy-files
- - name: check
template: check-files
- name: copy-files
metadata:
labels:
alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true"
app.poststart.fluid.io/inject: "true"
annotations:
k8s.aliyun.com/eci-use-specs: ecs.s6-c1m2.xlarge
container:
image: debian:buster
command: [bash, -c]
args: ["time cp -r /data/ /tmp"]
volumeMounts:
- name: datadir
mountPath: /data
- name: check-files
metadata:
labels:
alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true"
app.poststart.fluid.io/inject: "true"
annotations:
k8s.aliyun.com/eci-use-specs: ecs.s6-c1m2.xlarge
container:
image: debian:buster
command: [bash, -c]
args: ["du -sh /data; md5sum /data/*"]
volumeMounts:
- name: datadir
mountPath: /data
分别在Argo多个容器定义的labels
中配置app.poststart.fluid.io/inject: "true"
,即可启用Fluid自动配置挂载点检查脚本的功能。
lifecycle.postStart
,Fluid的自动配置将不会生效,您必须使用手动配置进行数据访问挂载点检查。