挂载ossfs 2.0存储卷后,业务容器能向访问本地文件一样通过POSIX操作访问OSS数据。ossfs 2.0在顺序读写能力上实现了性能提升(相较于ossfs 1.0),可充分发挥OSS的高带宽优势。本文将介绍如何在ACK集群挂载ossfs 2.0存储卷。
前提条件
集群的存储组件为CSI,且CSI组件版本为v1.33.1及以上。如需升级,请参见升级csi-plugin和csi-provisioner。|
已创建OSS Bucket,且Bucket与集群属于同一阿里云账号。
重要不建议跨账号使用OSS。
注意事项
ossfs 2.0适用于只读及顺序追加写场景。若有更多数据写需求,请使用ossfs 1.0。
重要在并发写场景中,ossfs无法保证数据写入的一致性。
挂载状态下,登录应用Pod或宿主机,在挂载路径下删除或变更文件,都会直接删除或变更OSS Bucket中对应的源文件。您可以开启OSS Bucket的版本控制,避免误删除重要数据,请参见版本控制。
建议为挂载OSS存储卷的Pod配置健康检查,当容器内OSS目录不可用时,可自动重启Pod重新挂载OSS。
说明ACK集群升级时会重启kubelet,导致ossfs驱动随之重启,继而造成OSS目录不可用。v1.18.8.45及以上版本的csi-plugin和csi-provisioner组件已修复此问题。请及时升级csi-plugin和csi-provisioner。
当传输的文件大于10 MB时,可以将文件切成碎片,分片上传。分片上传过程中断后,如您不再需要这些碎片,可以手动删除碎片或通过生命周期规则删除碎片。
准备工作
创建RAM用户并授权。
创建RAM用户,如已创建可跳过。具体操作,请参见创建RAM用户。
创建如下OSS访问的自定义权限策略。具体操作,请参见创建自定义权限策略。
以下只读和读写权限策略请根据使用需求选择,并替换
mybucket
为您实际创建的Bucket名称。OSS只读权限策略
OSS读写权限
(可选)若您使用KMS托管的指定CMK ID加密OSS Object,还需要为该RAM用户配置KMS权限。具体操作,请参见加密操作。
为RAM用户添加OSS权限。具体操作,请参见为RAM用户授权。
为RAM用户创建AccessKey。具体操作,请参见获取AccessKey。
创建存放鉴权信息的Secret,用于访问OSS数据。
命令示例如下,请替换
akId
和akSecret
为实际使用的AccessKey。kubectl create -n default secret generic oss-secret --from-literal='akId=xxxxxx' --from-literal='akSecret=xxxxxx'
步骤一:创建ossfs 2.0存储卷
使用ossfs 2.0静态存储卷
创建PV。
修改以下YAML,保存为ossfs2-pv.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 spec: capacity: storage: 20Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # 需要和PV名字一致。 # 使用准备工作中创建的Secret。 nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: fuseType: ossfs2 bucket: cnfs-oss-test path: /subpath url: oss-cn-hangzhou-internal.aliyuncs.com otherOpts: "-o close_to_open=false"
nodePublishSecretRef
参数说明参数
是否必选
说明
name
必选
存储AccessKey信息的Secret名称。
namespace
必选
存储AccessKey信息的Secret所在的命名空间。
volumeAttributes
参数说明参数
是否必选
说明
fuseType
必选
使用ossfs 2.0客户端时,固定为
ossfs2
。bucket
必选
需要挂载的OSS Bucket。
path
可选
OSS Bucket挂载路径,表示挂载时相对Bucket根文件的目录结构。
url
必选
挂载OSS的Endpoint,Endpoint以OSS控制台Bucket概览页为准。
挂载节点和Bucket相同地域,或已打通VPC网络时,请使用内网地址。
挂载节点和Bucket不同地域时,请使用外网地址。
不同访问端口的常见填写格式如下:
内网格式:
http://oss-{{regionName}}-internal.aliyuncs.com
或https://oss-{{regionName}}-internal.aliyuncs.com
。外网格式:
http://oss-{{regionName}}.aliyuncs.com
或https://oss-{{regionName}}.aliyuncs.com
。
重要vpc100-oss-{{regionName}}.aliyuncs.com
的内网访问端口格式已废弃,请及时切换。otherOpts
可选
您可以为OSS存储卷输入定制化参数,格式为
-o *** -o ***
,例如-o close_to_open=false
。说明close-to-open:默认为关闭。开启后,每次打开文件时,系统会主动向OSS发送GetObjectMeta请求,以获取文件在OSS中的最新元数据信息,从而确保元数据的实时性。但在需要大量读取小文件的场景下,频繁的元数据查询会显著增加访问延迟。
更多可选参数,请参见ossfs 2.0挂载选项说明。
创建PV。
kubectl create -f ossfs2-pv.yaml
确认PV状态。
kubectl get pv pv-ossfs2
预期返回如下,确认PV的状态为
Available
。NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-ossfs2 20Gi ROX Retain Available <unset> 15s
创建PVC。
修改以下YAML,保存为ossfs2-pvc-static.yaml。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 namespace: default spec: # 以下配置需要与PV一致 accessModes: - ReadOnlyMany resources: requests: storage: 20Gi volumeName: pv-ossfs2
创建PVC。
kubectl create -f ossfs2-pvc-static.yaml
确认PVC状态。
kubectl get pvc pvc-ossfs2
预期返回如下,可以看到PVC已绑定PV。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
使用ossfs 2.0动态存储卷
创建StorageClass。
修改以下YAML,保存为ossfs2-sc.yaml。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ossfs2-test parameters: # 使用准备工作中创建的Secret。 csi.storage.k8s.io/node-publish-secret-name: oss-secret csi.storage.k8s.io/node-publish-secret-namespace: default fuseType: ossfs2 bucket: cnfs-oss-test path: /subpath url: oss-cn-hangzhou-internal.aliyuncs.com otherOpts: "-o close_to_open=false" provisioner: ossplugin.csi.alibabacloud.com reclaimPolicy: Retain volumeBindingMode: Immediate
parameters
中的相关参数说明如下:配置Secret
参数
是否必选
说明
csi.storage.k8s.io/node-publish-secret-name
必选
存储AccessKey信息的Secret名称。
csi.storage.k8s.io/node-publish-secret-namespace
必选
存储AccessKey信息的Secret所在的命名空间。
配置存储卷
参数
是否必选
说明
fuseType
必选
使用ossfs 2.0客户端时,固定为
ossfs2
。bucket
必选
需要挂载的OSS Bucket。
path
可选
OSS Bucket挂载路径,表示挂载时相对Bucket根文件的目录结构。
url
必选
挂载OSS的Endpoint,Endpoint以OSS控制台Bucket概览页为准。
挂载节点和Bucket相同地域,或已打通VPC网络时,请使用内网地址。
挂载节点和Bucket不同地域时,请使用外网地址。
不同访问端口的常见填写格式如下:
内网格式:
http://oss-{{regionName}}-internal.aliyuncs.com
或https://oss-{{regionName}}-internal.aliyuncs.com
。外网格式:
http://oss-{{regionName}}.aliyuncs.com
或https://oss-{{regionName}}.aliyuncs.com
。
重要vpc100-oss-{{regionName}}.aliyuncs.com
的内网访问端口格式已废弃,请及时切换。otherOpts
可选
您可以为OSS存储卷输入定制化参数,格式为
-o *** -o ***
,例如-o close_to_open=false
。说明close-to-open:默认为关闭。开启后,每次打开文件时,系统会主动向OSS发送GetObjectMeta请求,以获取文件在OSS中的最新元数据信息,从而确保元数据的实时性。但在需要大量读取小文件的场景下,频繁的元数据查询会显著增加访问延迟。
更多可选参数,请参见ossfs 2.0挂载选项说明。
创建StorageClass。
kubectl create -f ossfs2-sc.yaml
创建PVC。
修改以下YAML,保存为ossfs2-pvc-dynamic.yaml。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 namespace: default spec: # 仅支持ReadOnlyMany访问模式 accessModes: - ReadOnlyMany # 指定StorageClass storageClassName: ossfs2-test resources: requests: storage: 20Gi
创建PVC。
kubectl create -f ossfs2-pvc-dynamic.yaml
确认PVC状态。
kubectl get pvc pvc-ossfs2
预期返回如下,可以看到PVC已绑定CSI自动创建的PV。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound oss-169da564-d720-4819-b765-4653d45a01dc 20Gi ROX ossfs2-test <unset> 3s
步骤二:创建应用并挂载ossfs2.0 存储卷
使用以下YAML,创建ossfs2-test.yaml。
以下YAML示例可以创建包含1个Pod的StatefulSet,Pod通过名为
pvc-ossfs2
的PVC申请存储资源,挂载路径为/data
。apiVersion: apps/v1 kind: StatefulSet metadata: name: ossfs2-test namespace: default spec: replicas: 1 selector: matchLabels: app: ossfs2-test template: metadata: labels: app: ossfs2-test spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-ossfs2 mountPath: /data volumes: - name: pvc-ossfs2 persistentVolumeClaim: claimName: pvc-ossfs2
创建StatefulSet并挂载ossfs2.0存储卷。
kubectl create -f ossfs2-test.yaml
查看StatefulSet中Pod的部署情况。
kubectl get pod -l app=strmvol-test
预期返回:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 12m
验证应用能正常访问OSS数据。
kubectl exec -it ossfs2-test-0 -- ls /data
预期可以看到OSS挂载路径下的数据。
相关文档
如需了解更多关于ossfs 2.0的信息,请参见ossfs 2.0(预览版)。
如需了解ossfs 2.0的性能,请参见ossfs 2.0客户端压测性能。
如果在使用ossfs 2.0存储卷的过程中碰到问题,请参见ossfs 2.0存储卷FAQ进行排查。