对象存储OSS是阿里云提供的低成本的海量共享存储空间,适合存储写入后较少修改的数据,例如图片、音视频等非结构化数据。ACK支持将OSS Bucket作为存储卷挂载到Pod上,满足持久化存储需求。
OSS介绍
对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,具备高数据持久性、高数据可用性等特点。OSS提供标准、低频访问、归档、冷归档等多种存储类型,可以覆盖从热到冷的各种数据存储场景。您可以结合OSS计费、数据访问频率等选择合适的存储类型。更多信息,请参见选型指导和存储类型。
关于OSS的计量计费方式,请参见计费概述。
适用场景
低成本的海量共享存储空间,适合存储写入后较少修改的数据。
常见适用场景如下:
共享数据场景
OSS为共享存储,支持多个Pod同时访问一份数据。OSS中的数据不会随Pod删除而清空,可用于Pod之间共享数据。
配置文件、图片、各类视频等媒体文件等多读少写场景
OSS适合存储非结构化数据,如配置文件、图片、音视频等。如业务需要变更文件内容,请选择ossfs1.0存储卷,对POSIX操作的兼容性更佳。
AI推理、数据分析等大并发批处理场景
OSS的高服务端带宽适合大并发批处理,比如AI训练、数据分析、自动驾驶等新型计算密集型负载及工作流。这类工作负载主要涉及顺序和随机读取、顺序(仅支持追加)写入操作,请选择ossfs2.0存储卷获得更高吞吐。
具有较高鉴权、容灾需求的数据安全场景
OSS支持3AZ同城冗余容灾及KMS等服务端加密能力,并支持MD5校验,保证数据上传下载的完整性,同时支持RAM及OSS Bucket Policy两种对象级别的鉴权方式。
若您需要通过OSS存储卷实现写操作,建议使用ossfs 1.0存储卷,并升级到1.91及以上版本。更多信息,请参见ossfs 1.0新版本功能介绍及性能压测。
对于读写分离场景,可以参考OSS存储读写分离最佳实践提升数据访问性能。
选择客户端
OSS存储卷可通过客户端文件系统(Filesystem in Userspace,简称FUSE)或虚拟块设备实现对象存储的本地挂载。相较于传统的本地存储和块存储,其在POSIX操作兼容性方面存在一定限制。
目前OSS存储卷支持的客户端如下。更多信息,请参见客户端选型参考。
客户端 | 类型 | 说明 | 依赖的存储组件版本 |
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_optimize参数进行优化。具体请参见新增readdir优化功能。CSI plugin为v1.20.7以下版本时,仅检测本地修改,而不能检测其他客户端或工具的外部修改。
CSI版本小于1.28时,ossfs以进程形式直接运行在节点上。支持的节点操作系统为CentOS、Alibaba Cloud Linux、ContainerOS和龙蜥操作系统。如果节点操作系统不支持,请升级csi-plugin和csi-provisioner。