存储CSI插件的存储方案概览

当您在ACK集群中运行工作负载时,您可能会有应用数据持久化存储、敏感和配置数据存储、存储资源动态供应等存储需求。ACK集群基于CSI插件实现了容器存储功能,借助阿里云存储服务提供并管理静态或动态存储卷资源。

支持的存储卷概览

容器存储接口(CSI)插件是当前Kubernetes社区推荐的插件实现方案。容器服务ACK的容器存储功能基于CSI插件实现,深度融合块存储EBS、文件存储NAS、CPFS、对象存储OSS、本地盘等,完全兼容Kubernetes原生的存储卷类型,例如EmptyDir、HostPath、Secret、ConfigMap等。CSI插件支持的存储卷如下。

image

容器服务ACK支持Pod自动绑定阿里云云盘、NAS、OSS、CPFS、本地卷等存储服务。每种存储卷的主要特点、应用场景及相关计费如下。

说明

CSI插件支持静态存储卷挂载和动态存储卷挂载两种方式。在静态存储卷挂载的方式中,通常需要手动编辑和创建一个PV和PVC进行挂载。当需要大量的PV和PVC时,您可以创建动态存储卷进行挂载。PV和PVC的概念如下:

  • PersistentVolume(PV)

    集群内的存储资源。PV独立于Pod的生命周期,可根据不同的StorageClass类型创建不同类型的PV。

  • PersistentVolumeClaim(PVC)

    集群内的存储请求。例如,PV是Pod使用的节点资源,PVC则声明使用PV资源。当PV资源不足时,PVC可动态创建PV。

存储服务

静态存储卷

动态存储卷

默认部署

主要特点

应用场景

计费说明

阿里云云盘

支持

支持

共享存储,每个云盘只能在单个节点挂载。

  • 高IO、低延时场景。

    云盘块存储设备适用于对IO、延迟要求较高的应用场景,例如数据库、中间件等服务。

  • 非共享场景

    云盘存储卷是独享模式,同时只能给一个Pod使用,推荐在非共享数据业务场景使用。

更多信息,请参见云盘存储卷概述

关于云盘计费项信息,请参见块存储计费。关于云盘的价格信息,请参见详细定价

阿里云NAS

支持

支持

共享存储,可提供高性能、高吞吐存储服务。

  • 共享数据场景

    NAS支持多个Pod同时访问一份数据,如果您有共享数据需求,推荐使用NAS。

  • 大数据分析场景

    NAS提供了较高的数据吞吐能力,能满足大批量作业对共享存储访问的需求。

  • Web应用场景

    为Web应用、内容管理系统提供存储支撑。

  • 保存日志场景

    如果您希望将日志保存到存储卷,推荐使用NAS数据卷。

更多信息,请参见NAS存储卷

NAS计费说明

阿里云OSS

支持

支持(通过CNFS实现)

共享存储,用户态文件系统。

  • 应用数据存储:

    • 适用于读文件场景,例如读配置文件、视频、图片文件等场景。

    • 读多写少场景下实现OSS数据的读写分离。

  • 加密存储在OSS存储卷上的数据。

说明

OSS数据卷通过ossfs挂载,可以支撑一些小文件的读场景,对于写场景稳定性欠佳。在写场景下,推荐使用其他存储卷类型。

更多信息,请参见OSS存储卷

OSS计费概述

阿里云CPFS

支持

支持

高性能、高带宽、共享存储。

  • 基因计算、大数据分析场景

    CPFS提供的高吞吐能力,满足大规模集群对存储超高性能的需求。

  • 数据缓存访问场景

    您可以将低速存储数据先下载到CPFS卷,然后供应用高速访问。

更多信息,请参见CPFS2.0静态卷使用CNFS管理CPFS隔离存储卷

CPFS计费概述

阿里云ENS云盘

支持

支持

低延时,靠近终端用户,非高可用,只能在单节点挂载。

更多信息,请参见什么是边缘节点服务ENS、在ACK Edge集群使用ENS云盘

支持按量付费方式,详情请参见计费概述

本地卷

支持

支持

低延迟、高IO,非高可用。

  • 本地临时文件存储

    如果您期望将非高可用数据保存在本地,可以通过LVM卷进行存储管理。

  • IO要求高、自带高可用场景

    有些业务对IO要求很高,且应用自带高可用方案,例如:MySQL;可以使用LVM卷。

  • 大数据分析场景

    Spark等类型的大数据分析场景,可以使用LVM卷替代共享本地盘的方案。

更多信息,请参见本地存储卷

本地盘的费用包括在本地盘挂载的实例的费用里。更多信息,请参见包年包月按量付费

不同阿里云存储服务提供存储卷的使用限制不同,请阅读下文。

使用限制

您在使用ACK存储CSI插件时需要注意CSI插件本身的使用限制,也需要注意使用CSI插件时涉及的阿里云存储产品的使用限制。

集群版本限制

使用CSI插件时,需确保ACK集群版本为v1.14及以上,且kubelet运行参数--enable-controller-attach-detach需要设置为true。如需升级集群,请参见手动升级集群

CSI插件使用限制

阿里云CSI插件已在社区开源,主要支持ACK集群。对于非ACK集群(非阿里环境集群、阿里云自建集群),由于集群配置、权限管理、网络差异等原因,插件无法无缝支持。如果您处于这样的集群环境,可以通过阅读源码、修改配置等方式进行适配。更多信息,请参见alibaba-cloud-csi-driver

存储卷使用限制

存储卷类型

使用限制

云盘存储卷

请参见使用限制

NAS存储卷

  • NAS为共享存储,可以同时为多个Pod提供共享存储服务,即一个PVC可以同时被多个Pod使用。

  • CSI插件不支持SMB挂载。

  • 数据卷挂载协议推荐使用NFSv3。

  • NAS卷只能挂载到相同VPC的ECS实例,不支持不同VPC网络的挂载。

  • 通用NAS与极速NAS在挂载连通性、文件系统数量及协议类型等方面存在相应约束条件。更多信息,请参见使用限制

  • 使用NAS数据卷前,建议将CSI存储插件升级到最新版本。

  • NAS挂载点创建后,等待一定时间,待挂载点状态可用后方可使用。

  • 在没有卸载NAS文件系统前,务必不要删除NAS挂载点,否则会造成操作系统无响应。

OSS存储卷

  • OSS为共享存储,可以同时为多个Pod提供共享存储服务。

  • 使用数据卷时,每个应用使用独立的PV名称。

  • 如需挂载OSS Bucket中的子目录,建议直接使用PV中的path字段,而非subpath方式。若您的业务需要使用subpath或subpathExpr配置,为避免因权限配置错误等原因导致挂载异常,请先阅读常见问题中的使用subpath或subpathExpr方式挂载OSS存储卷异常

  • OSS存储卷是使用ossfs文件进行挂载的FUSE文件系统。

    • 适合于读文件场景。例如,读配置文件、视频、图片文件等场景。 更多使用限制,请参见ossfs使用限制

    • 不适用于写文件的应用场景。如需写入文件,建议您使用SDK实现写操作。关于使用SDK实现写操作的具体操作,请参见OSS存储读写分离最佳实践。若您需要直接通过OSS存储卷实现写操作,建议使用ossfs 1.91及以上版本。更多信息,请参见ossfs 1.91及以上版本新功能介绍及性能压测

    • CSI版本小于1.28时,ossfs以进程形式直接运行在节点上,支持的节点操作系统为CentOS、Alibaba Cloud Linux、ContainerOS和龙蜥操作系统。如果节点操作系统不支持,您可以通过升级CSI版本的方式运行ossfs。

  • OSS存储卷挂载根路径不支持chmod、chown操作,您可以通过配置项mp_umask实现。更多信息,请参见OSS存储挂载权限问题

CPFS存储卷

  • 不支持操作系统为ContainerOS的节点。

  • 仅支持在x86架构节点挂载。

  • 仅支持通过CPFS协议服务进行挂载。

本地存储卷

  • 目前支持通过HostPath、LocalVolume、LVM、内存等挂载方式挂载本地存储。

  • 本地存储并非高可用存储卷,只适用于一些临时数据的保存及应用自带高可用的场景。

  • LVM本地存储卷,不支持数据的跨节点迁移,不适合在高可用场景中使用。

容器存储功能概览

ACK不同集群形态与各存储服务能力的对应关系如下表。

存储分类

存储能力

ACK托管和专有集群

ACK Serverless集群

ACK安全沙箱

块存储

云盘挂载和卸载

image.png

image.png

image.png

在线扩容(Resize)

image.png

image.png

image.png

快照(Snapshot)

image.png

image.png

image.png

容器IO监控

image.png

image.png

image.png

文件系统

支持XFS、 Ext4

支持XFS、 Ext4

支持XFS、 Ext4

块、裸设备

image.png

image.png

image.png

快照恢复

image.png

image.png

image.png

云盘队列设置

image.png

image.png

image.png

数据加密CMK和BYOK

image.png

image.png

image.png

多可用区感知

image.png

image.png

image.png

用户自定义标签

image.png

image.png

image.png

跨主机迁移

image.png

image.png

image.png

文件存储NAS

NAS创建,挂载,卸载

image.png

image.png

image.png

Samba挂载卸载

image.png

image.png

image.png

高吞吐并行文件系统(CPFS)

image.png

image.png

image.png

回收站 (CNFS)

image.png

image.png

image.png

动态数据卷-子目录/共享目录(CNFS)

image.png

image.png

image.png

数据加密CMK(CNFS,极速NAS)

image.png

image.png

image.png

容量控制Quota(CNFS)

image.png仅支持托管版

image.png

image.png

容量/IO监控 (CNFS)

image.png

image.png

image.png

在线扩容(CNFS)

image.png

image.png

image.png

对象存储OSS

OSS挂载和卸载

image.png

image.png

image.png

数据加密BYOK

image.png

image.png

image.png

本地存储

块存储LVM管理

image.png

image.png

image.png

VolumeGroup自动化配置

image.png

image.png

image.png

节点LVM容量感知调度

image.png

image.png

image.png

PMEM Direct Mem

image.png

image.png

image.png

PMEM LVM卷

image.png

image.png

image.png

容器网络文件系统CNFS

管理容器存储资源时,您可以在ACK集群Pro版中使用容器网络文件系统CNFS(Container Network File System)。CNFS可以提升NAS、OSS存储卷的性能和QoS控制,将阿里云的文件存储抽象为一个K8s对象(CRD)进行独立管理,包括创建、删除、描述、挂载、监控及扩容等运维操作,提供回收站、资源配额、存储卷IO性能监控等功能。关于CNFS的更多信息,请参见容器网络文件系统CNFS管理NAS生命周期管理OSS生命周期

CSI组件

CSI插件包括CSI-Plugin和CSI-Provisioner两个组件,用于实现数据卷的自动创建、挂载和卸载。CSI组件已在ACK托管集群ACK专有集群中默认部署。关于CSI组件的更多信息和升级步骤,请参见管理CSI组件

快速入门

关于ACK使用存储卷的快速入门,请参见以下视频:

FAQ

如何判断集群使用的存储插件模式?

您可以在控制台查看节点注释,或使用kubectl查看kubelet参数。

通过控制台查看节点注释

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点

  3. 在目标节点操作列选择更多 > 详情

    基本信息页签下查看节点注释。如果存在volumes.kubernetes.io/controller-managed-attach-detach: true,表示集群存储插件为CSI;如果没有,表示集群存储插件为Flexvolume。

通过命令查看kubelet参数

执行以下命令查看kubelet参数。

ps -ef | grep kubelet

预期输出:

--enable-controller-attach-detach=true
  • --enable-controller-attach-detach的值为true,则表示集群存储插件为CSI。

  • --enable-controller-attach-detach的值为false,则表示集群存储插件为Flexvolume。

如何手动为CSI插件授权?

CSI插件在数据卷的挂载、卸载、创建、删除等操作上都需要您授予访问其他产品资源的权限。通常集群已默认安装CSI组件且已有相关权限。如果您需要在集群中手动完成授权,CSI插件支持直接使用AccessKey授权,也支持使用RAM角色授权的方式(默认)进行授权。

  • 使用AccessKey信息授权

    • 直接在CSI部署模板中写入AccessKey信息。

    • 也可以通过Secret方式将AccessKey信息传入环境变量。

  • 使用RAM角色授权:CSI插件使用AliyunCSManagedCsiRole角色来访问您在其他云产品中的资源。更多信息,请参见容器服务ACK服务角色。关于如何为RAM角色授权,请参见为RAM角色授权

    • ACK托管集群:CSI使用的RAM角色权限的Token被保存在名为addon.csi.token的Secret中,CSI插件挂载该Secret即可实现RAM角色授权,并访问OpenAPI。

    • ACK专有集群:CSI使用其Pod所在的ECS节点的RAM角色。