存储CSI概述
阿里云容器服务ACK的容器存储功能基于Kubernetes容器存储接口(CSI),深度融合阿里云存储服务云盘EBS,文件存储NAS和CPFS,以及对象存储OSS、本地盘等,并完全兼容Kubernetes原生的存储服务,例如EmptyDir、HostPath、Secret、ConfigMap等存储。本文介绍ACK存储CSI的概览、ACK存储CSI支持的功能、CSI使用授权、CSI使用限制等。
关于ACK使用存储卷的快速入门,请参见以下视频:
ACK存储CSI现已支持OSS动态存储卷。关于动态OSS存储卷使用方式,请参见对OSS生命周期管理。
ACK容器存储概览

容器服务ACK支持Pod自动绑定阿里云云盘、NAS、 OSS、CPFS、本地卷等存储服务,每种存储卷的主要特点及应用场景如下表。
阿里云存储 | 静态数据卷 | 动态数据卷 | 默认部署 | 主要特点 | 应用场景 |
阿里云云盘 | 支持 | 支持 存储类alicloud-disk-available, alicloud-disk-efficiency,alicloud-disk-essd, alicloud-disk-ssd, alicloud-disk-topology | 是 | 非共享存储,每个云盘只能在单个节点挂载。 |
更多信息,请参见云盘存储卷概述。 |
阿里云NAS | 支持 | 支持 存储类 alibabacloud-cnfs-nas | 是 | 共享存储,可提供高性能、高吞吐存储服务。 |
更多信息,请参见NAS存储卷概述。 |
阿里云OSS | 支持 | 支持 | 是 | 共享存储,用户态文件系统。 |
说明 OSS数据卷通过OSSFS挂载,是一种通过FUSE方式模拟实现的用户态文件系统。对于写场景稳定性欠佳,因此在写场景中推荐使用其他存储卷类型。 更多信息,请参见OSS存储卷概述。 |
阿里云CPFS | 支持 | 支持 | 否 | 高性能、高带宽、共享存储。 |
更多信息,请参见CPFS2.0静态卷和使用CNFS管理CPFS隔离存储卷。 |
阿里云ENS云盘 | 支持 | 支持 | 否 | 低延时,靠近终端用户,非高可用,只能在单节点挂载。 | 更多信息,请参见什么是边缘节点服务ENS。 |
本地卷 | 支持 | 支持 | 否 | 低延迟、高IO,非高可用。 |
更多信息,请参见本地存储卷概述。 |
ACK部署的CSI插件支持静态存储卷挂载和动态存储卷挂载两种方式,在静态存储卷挂载的方式中,通常需要手动编辑和创建一个PV和PVC进行挂载。当需要大量的PV和PVC时,您可以创建动态存储卷进行挂载。PV和PVC的概念如下:
PersistentVolume(PV)
集群内的存储资源。PV独立于Pod的生命周期,可根据不同的StorageClass类型创建不同类型的PV。
PersistentVolumeClaim(PVC)
集群内的存储请求。例如,PV是Pod使用的节点资源,PVC则声明使用PV资源。当PV资源不足时,PVC可动态创建PV。
ACK容器存储功能
ACK不同集群形态与各存储服务能力的对应关系如下表。
存储分类 | 存储能力 | ACK集群(Linux) | ACK Serverless集群 | 注册集群(混合云/多云) | ACK Edge | ACK(Windows) | ACK专有云 | ACK安全容器(Sandbox) |
块存储 | 云盘挂载和卸载 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
在线扩容(Resize) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
快照(Snapshot) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
容器IO监控 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
文件系统 | 支持XFS、 Ext4、dBFS | 支持XFS、 Ext4 | ![]() | ![]() | 支持NTFS | 支持XFS、 Ext4 | 支持XFS、 Ext4 | |
块、裸设备 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
快照恢复 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
云盘队列设置 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
数据加密CMK和BYOK | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
多可用区感知 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
用户自定义标签 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
跨主机迁移 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
文件存储 | NAS创建,挂载,卸载 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Samba挂载卸载 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
高吞吐并行文件系统(CPFS) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
回收站 (CNFS) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
动态数据卷-子目录/共享目录(CNFS) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
数据加密CMK(CNFS,极速NAS) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
容量控制Quota(CNFS) |
| ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
容量/IO监控 (CNFS) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
在线扩容(CNFS) | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
对象存储 | OSS挂载和卸载 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
数据加密BYOK | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
本地存储 | 块存储LVM管理 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VolumeGroup自动化配置 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
节点LVM容量感知调度 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
PMEM Direct Mem | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | |
PMEM LVM卷 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
CSI部署架构
CSI插件包括CSI-Plugin和CSI-Provisioner两部分。ACK托管版集群和ACK专有版集群中CSI的部署架构图如下表。
ACK托管版和专有版集群默认部署CSI插件。针对ACK Serverless集群和ACK Edge集群,您需自行部署CSI插件。
ACK托管版集群 | ACK专有版集群 |
![]() ACK托管版集群中CSI插件CSI-Provisioner和CSI-Plugin都运行在Worker节点中。 | ![]() ACK专有版集群中CSI-Provisioner部署在Master节点上。CSI-Plugin以DaemonSet负载方式自动部署在Master、Worker节点中。 |
CSI使用授权
CSI插件在数据卷的挂载、卸载、创建、删除等操作上都需要您授予访问其他产品资源的权限。CSI插件支持直接使用AccessKey授权,也支持使用RAM角色授权的方式(默认)进行授权。两种授权方式的具体内容如下表。
使用账户AccessKey信息授权 | 使用RAM角色授权 |
| ACK集群存储插件CSI使用AliyunCSManagedCsiRole角色来访问您在其他云产品中的资源。更多信息,请参见容器服务默认角色。关于如何为RAM角色授权,请参见为RAM角色授权。
|
CSI插件使用限制
您在使用ACK存储CSI插件时需要注意CSI插件本身的使用限制,也需要注意使用CSI插件时涉及的阿里云存储产品的使用限制。
阿里云存储产品使用限制
阿里云存储产品
使用限制
云盘数据卷
每个云盘数据卷只能被一个Pod使用,不能共享。
不是每种云盘类型都能挂载所有ECS实例。更多信息,请参见实例规格族。
包年包月的云盘不能进行挂载、卸载操作,不能用于容器数据卷场景。
云盘只能挂载到相同可用区的ECS实例,不支持跨可用区挂载。
建议使用StatefulSet方式使用云盘卷,不建议使用Deployment。
说明Deployment是无状态服务,当Pod在重启时,无法保证新Pod启动时间和旧Pod结束时间之间的时间叠加,且Deployment多副本模式不能为每个Pod配置独立的存储卷。
每个卷的最小容量是20 GiB。
NAS数据卷
NAS卷只能挂载到相同VPC的ECS实例,不支持不同VPC网络的挂载。
CSI插件暂不支持SMB挂载。
每个用户的NAS卷有数量限制,如果您要申请较多数量NAS盘,请加入钉钉用户群(钉钉群号:35532895)咨询。
OSS数据卷
不推荐您使用OSS数据卷进行数据写操作,写数据场景请选择其他存储。
说明OSS数据卷通过OSSFS挂载,是一种通过FUSE方式模拟实现的用户态文件系统。对于写场景稳定性欠佳,因此在写场景中推荐使用其他存储卷类型。
CPFS数据卷
CPFS驱动对操作系统内核有较强的版本匹配需求,部署完CPFS环境后,请不要升级内核。
当前只支持为没有CPFS驱动的节点安装CPFS驱动,而不支持升级CPFS驱动。
说明CSI-CPFS插件属于Kubernetes CSI组件,负责挂载CPFS盘到Kubernetes Pod,供应用使用。
CPFS驱动:是CPFS存储产品对应的客户端驱动,负责内核层面的CPFS存储协议的存储实现。
CPFS CSI 插件和CPFS驱动之间的关联:
当节点没有安装CPFS驱动时,如果部署CSI-CPFS插件,会默认安装CPFS驱动。
当节点已经安装CPFS驱动时,如果部署CSI-CPFS插件,不会安装和升级CPFS驱动。
ACK存储CSI插件使用限制
阿里云CSI插件已在社区开源,主要的支持ACK集群。对于非ACK集群(非阿里环境集群、阿里云自建集群),由于集群配置、权限管理、网络差异等原因,插件无法无缝支持。如果您处于这样的集群环境,可以通过阅读源码、修改配置等方式进行适配。更多信息,请参见alibaba-cloud-csi-driver。
版本说明
使用CSI插件要求Kubernetes版本为1.14及以上,且kubelet运行参数--enable-controller-attach-detach
需要设置为true
。
CSI插件安装与升级
关于CSI存储插件的安装与升级,请参见安装与升级CSI组件。
CSI和Flexvolume存储插件的区别
插件名称 | 插件特性 | 参考文档 |
Flexvolume | Flexvolume插件是Kubernetes社区较早实现的存储卷扩展机制。ACK从上线起,即支持Flexvolume类型数据卷服务。Flexvolume插件包括以下三部分。
| 有关Flexvolume的详细概述,请参见Flexvolume概述。 有关如何升级Flexvolume存储插件,请参见管理组件。 |
CSI | CSI插件是当前Kubernetes社区推荐的插件实现方案。ACK集群提供的CSI存储插件兼容社区的CSI特性。CSI插件包括以下两部分:
| 有关CSI的详细概述,请参见CSI概述和alibaba-cloud-csi-driver。 有关如何升级CSI存储插件,请参见CSI存储插件升级指南。 |
在创建集群的时候确定插件类型。
不支持CSI和Flexvolume插件在同一个集群中使用。
不支持Flexvolume转变到CSI插件。
使用推荐
针对新建集群,推荐您使用CSI插件。ACK会跟随社区持续更新CSI插件的各种能力。
针对已经创建的集群,仍然使用已经安装的存储插件类型。ACK会持续支持Flexvolume插件。
如何判断集群的存储插件模式
您可以通过在控制台查看节点注释或命令行查看kubelet参数两种方式判断集群的存储插件模式。
通过控制台查看节点注释
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在目标节点操作列选择
。在基本信息页签下查看节点注释。
如果有
volumes.kubernetes.io/controller-managed-attach-detach: true
,表示集群存储插件为CSI。若没有
volumes.kubernetes.io/controller-managed-attach-detach: true
,表示集群存储插件为Flexvolume。
通过命令查看kubelet参数
执行以下命令查看kubelet参数。
ps -ef | grep kubelet
预期输出:
--enable-controller-attach-detach=true
若
--enable-controller-attach-detach
的值为true
,则表示集群存储插件为CSI。若
--enable-controller-attach-detach
的值为false
,则表示集群存储插件为Flexvolume。