阿里云容器服务ACK的容器存储功能基于Kubernetes容器存储接口(CSI),深度融合阿里云存储服务云盘EBS,文件存储NAS和CPFS,以及对象存储OSS,本地盘等,并完全兼容Kubernetes原生的存储服务,例如EmptyDir、HostPath、Secret、ConfigMap等存储。本文介绍ACK存储CSI的概览、ACK存储CSI支持的功能、CSI使用授权、CSI使用限制等。
ACK容器存储概览

阿里云存储 | 静态数据卷 | 动态数据卷 | 默认部署 | 主要特点 | 应用场景 |
---|---|---|---|---|---|
阿里云云盘 | 支持 | 支持 | 是 | 非共享存储,每个云盘只能在单个节点挂载。 |
更多信息,请参见云盘存储卷概述。 |
阿里云NAS | 支持 | 支持 | 是 | 共享存储,可提供高性能、高吞吐存储服务。 |
更多信息,请参见NAS存储卷概述。 |
阿里云OSS | 支持 | 支持 | 是 | 共享存储,用户态文件系统。 |
说明 OSS数据卷通过OSSFS挂载,是一种通过FUSE方式模拟实现的用户态文件系统。对于写场景稳定性欠佳,因此在写场景中推荐使用其他存储卷类型。
更多信息,请参见OSS存储卷概述。 |
阿里云CPFS | 支持 | 支持 | 否 | 高性能、高带宽、共享存储。 |
更多信息,请参见CPFS1.0静态卷和CPFS1.0动态卷。 |
- PersistentVolume(PV)
- 集群内的存储资源。PV独立于Pod的生命周期,可根据不同的StorageClass类型创建不同类型的PV。
- PersistentVolumeClaim(PVC)
- 集群内的存储请求。例如,PV是Pod使用的节点资源,PVC则声明使用PV资源。当PV资源不足时,PVC可动态创建PV。
ACK容器存储功能
ACK不同集群形态与各存储服务能力的对应关系如下表。
存储分类 | 存储能力 | ACK集群(Linux) | ASK集群 | 注册集群(混合云/多云) | 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部署架构
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角色来访问您在其他云产品中的资源。更多信息,请参见AliyunCSManagedCsiRole。关于如何为RAM角色授权,请参见为RAM角色授权。
|
CSI插件使用限制
您在使用ACK存储CSI插件时需要注意CSI插件本身的使用限制,也需要注意使用CSI插件时涉及的阿里云存储产品的使用限制。
- 阿里云存储产品使用限制
阿里云存储产品 使用限制 云盘数据卷 - 每个节点最多挂载15个云盘数据卷。
- 每个云盘数据卷只能给一个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和Flexvolume插件在同一个集群中使用。
- 不支持Flexvolume转变到CSI插件。
- 针对新建集群,推荐您使用CSI插件。ACK会跟随社区持续更新CSI插件的各种能力。
- 针对已经创建的集群,仍然使用已经安装的存储插件类型。ACK会持续支持Flexvolume插件。
如何判断集群的存储插件模式
- 方式一:通过控制台查看节点注释
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择 。
- 在目标节点操作列选择 。
- 在基本信息中查看节点注释。
如果有
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。