对象存储OSS是阿里云提供的低成本的海量共享存储空间,适合存储写入后较少修改的数据,例如图片、音视频等非结构化数据。ACK支持使用OSS Bucket作为存储卷挂载到Pod上,满足持久化存储需求。
OSS介绍
对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,具备高数据持久性、高数据可用性等特点。OSS提供标准、低频访问、归档、冷归档等多种存储类型,可以覆盖从热到冷的各种数据存储场景。您可以结合OSS计费、数据访问频率等选择合适的存储类型。更多信息,请参见选型指导和存储类型。
关于OSS的计量计费方式,请参见计费概述。
适用场景
OSS是低成本的海量共享存储空间,适合存储写入后较少修改的数据。常见场景如下:
共享数据场景:OSS为共享存储,可用于多个Pod间共享数据。
只读场景:适用于读文件场景,例如读配置文件、图片、音视频等。
读写分离场景:支持OSS数据的读写分离,例如断点保存、日志持久保存等。
若您需要通过OSS存储卷实现写操作,建议使用ossfs 1.0存储卷,并升级到1.91及以上版本。更多信息,请参见ossfs 1.0新版本功能介绍及性能压测。
对于读写分离场景,可以参考OSS存储读写分离最佳实践提升数据访问性能。
选择客户端
OSS存储卷可通过客户端文件系统(Filesystem in Userspace,简称FUSE)或虚拟块设备实现对象存储的本地挂载。相较于传统的本地存储和块存储,其在POSIX操作兼容性方面存在一定限制。
目前OSS存储卷支持的客户端如下。更多信息,请参见客户端选型参考。
使用ossfs 2.0需要将CSI组件升级到v1.33.1及以上版本。目前该版本CSI组件仅对白名单用户开放,如需使用,请提交工单申请。
客户端 | 类型 | 说明 | 依赖的存储组件版本 |
FUSE | 始终支持。具体请参见ossfs 1.0版本说明。 | ||
FUSE | 支持完整读和顺序追加写操作。适用多读场景,大幅提升数据读取性能。更多信息,请参见ossfs 2.0概述。 | CSI组件版本为v1.33.1及以上。 | |
虚拟块设备 | 目前版本仅支持只读场景。使用虚拟块设备解决FUSE在海量小文件只读场景的性能瓶颈。 | 除CSI组件外,还需部署strmvol-csi-driver组件。 |
使用说明
如需挂载OSS Bucket中的子目录,建议直接使用PV中的path字段,而非subpath方式。若您的业务需要使用subpath或subpathExpr配置,为避免因权限配置错误等原因导致挂载异常,请先查阅使用subpath或subpathExpr方式挂载OSS存储卷异常。
OSS存储卷挂载根路径不支持chmod、chown操作,您可以通过配置项mp_umask实现。更多信息,请参见OSS存储挂载权限问题。
注意事项
以下注意事项主要针对通用读写场景(ossfs 1.0),ossfs 2.0和strmvol客户端由于仅支持部分POSIX操作(主要为读操作),基本不涉及。
随机或者追加写文件实际为在本地生成新文件重新上传至OSS服务端,由于OSS存储特性,请注意以下事项:
文件、文件夹的rename操作非原子。
请尽量避免并发多写,或直接在挂载路径下进行压缩、解压缩等操作。
重要多写场景依赖用户自行协调各个客户端的行为。对于写操作导致的元数据和数据的不一致性问题,ACK不承诺保障。
此外,还需注意以下限制:
不支持硬链接(Hard Link)。
不支持挂载归档存储、冷归档存储或者深度冷归档存储类型的Bucket。
readdir操作默认会发送大量headObject请求以获取路径下的所有对象的扩展信息。当目标路径下的文件较多时,可能会影响ossfs的整体性能。若在读写场景中对文件的权限等属性不敏感,可开启
-o readdir_optimze
参数进行优化。具体请参见新增readdir优化功能。CSI plugin为v1.20.7以下版本时,仅检测本地修改,而不能检测其他客户端或工具的外部修改。
CSI版本小于1.28时,ossfs以进程形式直接运行在节点上。支持的节点操作系统为CentOS、Alibaba Cloud Linux、ContainerOS和龙蜥操作系统。如果节点操作系统不支持,请升级csi-plugin和csi-provisioner。