当您在ACK集群中运行工作负载时,您可能会有应用数据持久化存储、敏感和配置数据存储、存储资源动态供应等存储需求。ACK集群基于CSI插件实现了容器存储功能,借助阿里云存储服务提供并管理静态或动态存储卷资源。
支持的存储卷概览
容器存储接口(CSI)插件是当前Kubernetes社区推荐的插件实现方案。容器服务ACK的容器存储功能基于CSI插件实现,深度融合块存储EBS、文件存储NAS、对象存储OSS、本地盘等,完全兼容Kubernetes原生的存储卷类型,例如EmptyDir、HostPath、Secret、ConfigMap等。CSI插件支持的存储卷如下。
容器服务ACK支持Pod自动绑定阿里云云盘、NAS、OSS、本地卷等存储服务。每种存储卷的主要特点、应用场景及相关计费如下。
CSI插件支持静态存储卷挂载和动态存储卷挂载两种方式。在静态存储卷挂载的方式中,通常需要手动编辑和创建一个PV和PVC进行挂载。当需要大量的PV和PVC时,您可以创建动态存储卷进行挂载。PV和PVC的概念如下:
PersistentVolume(PV)
集群内的存储资源。PV独立于Pod的生命周期,可根据不同的StorageClass类型创建不同类型的PV。
PersistentVolumeClaim(PVC)
集群内的存储请求。例如,PV是Pod使用的节点资源,PVC则声明使用PV资源。当PV资源不足时,PVC可动态创建PV。
存储服务 | 静态数据卷 | 动态数据卷 | 默认部署 | 主要特点 | 应用场景 | 计费说明 |
阿里云云盘 | 支持 | 支持 | 是 | 非共享存储,每个云盘只能在单个节点挂载。 |
更多信息,请参见云盘存储卷。 | 关于云盘计费项信息,请参见块存储计费。关于云盘的价格信息,请参见云服务器ECS产品详情页。 |
阿里云NAS | 支持 | 支持 | 是 | 共享存储,可提供高性能、高吞吐量存储服务。 |
更多信息,请参见NAS存储卷概述。 | |
阿里云OSS | 支持 | 支持 | 是 | 共享存储,用户态文件系统。 |
说明 OSS数据卷通过OSSFS挂载,是一种通过FUSE方式模拟实现的用户态文件系统。对于写场景稳定性欠佳,因此在写场景中推荐使用其他存储卷类型。 更多信息,请参见OSS存储卷。 |
不同阿里云存储服务提供存储卷的使用限制不同,请阅读下文。
使用限制
您在使用ACK存储CSI插件时需要注意CSI插件本身的使用限制,也需要注意使用CSI插件时涉及的阿里云存储产品的使用限制。
集群版本限制
使用CSI插件时,需确保ACK集群版本为v1.14及以上,且kubelet运行参数--enable-controller-attach-detach
需要设置为true
。如需升级集群,请参见手动升级集群。
CSI插件使用限制
阿里云CSI插件已在社区开源,主要支持ACK集群。对于非ACK集群(非阿里环境集群、阿里云自建集群),由于集群配置、权限管理、网络差异等原因,插件无法无缝支持。如果您处于这样的集群环境,可以通过阅读源码、修改配置等方式进行适配。更多信息,请参见alibaba-cloud-csi-driver。
存储卷使用限制
存储卷类型 | 使用限制 |
云盘存储卷 | 请参见使用限制。 |
NAS存储卷 |
|
OSS存储卷 |
|
容器存储功能概览
ACK不同集群形态与各存储服务能力的对应关系如下表。
存储分类 | 存储能力 | ACK托管和专有集群 | ACK Serverless集群 | ACK安全沙箱 |
块存储 | 云盘挂载和卸载 | |||
在线扩容(Resize) | ||||
快照(Snapshot) | ||||
容器IO监控 | ||||
文件系统 | 支持XFS、 Ext4 | 支持XFS、 Ext4 | 支持XFS、 Ext4 | |
块、裸设备 | ||||
快照恢复 | ||||
云盘队列设置 | ||||
数据加密CMK和BYOK | ||||
多可用区感知 | ||||
用户自定义标签 | ||||
跨主机迁移 | ||||
文件存储NAS | NAS创建,挂载,卸载 | |||
Samba挂载卸载 | ||||
回收站 (CNFS) | ||||
动态数据卷-子目录/共享目录(CNFS) | ||||
数据加密CMK(CNFS,极速NAS) | ||||
容量控制Quota(CNFS) | 仅支持托管版 | |||
容量/IO监控 (CNFS) | ||||
在线扩容(CNFS) | ||||
对象存储OSS | OSS挂载和卸载 | |||
数据加密BYOK | ||||
本地存储 | 块存储LVM管理 | |||
VolumeGroup自动化配置 | ||||
节点LVM容量感知调度 | ||||
PMEM Direct Mem | ||||
PMEM LVM卷 |
容器网络文件系统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-plugin和csi-provisioner组件。
FAQ
如何判断集群使用的存储插件模式?
您可以在控制台查看节点注释,或使用kubectl查看kubelet参数。
通过控制台查看节点注释
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在目标节点操作列选择
。在基本信息页签下查看节点注释。如果存在
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角色。