全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:存储CSI插件的存储方案概览

更新时间:Jan 19, 2024

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

支持的存储卷概览

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

overview

容器服务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。

存储服务

静态数据卷

动态数据卷

默认部署

主要特点

应用场景

计费说明

阿里云云盘

支持

支持

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

  • 高IO、低延时场景。

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

  • 非共享场景

    云盘卷是独享模式,同时只能给一个Pod使用,在非共享数据业务场景可以考虑使用云盘卷。

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

关于云盘计费项信息,请参见块存储计费。关于云盘的价格信息,请参见云服务器ECS产品详情页

阿里云NAS

支持

支持

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

  • 共享数据场景

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

  • 大数据分析场景

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

  • Web应用场景

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

  • 保存日志场景

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

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

NAS计费说明

阿里云OSS

支持

支持

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

  • 媒体、图片等媒体文件只读场景

    您可以通过OSS数据卷读取上述文件类型。

  • 网页、应用配置文件只读场景

    OSSFS网络性能欠佳,可以支撑一些小文件的读场景。

说明

OSS数据卷通过OSSFS挂载,是一种通过FUSE方式模拟实现的用户态文件系统。对于写场景稳定性欠佳,因此在写场景中推荐使用其他存储卷类型。

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

OSS计费概述

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

使用限制

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

集群版本限制

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

CSI插件使用限制

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

存储卷使用限制

存储卷类型

使用限制

云盘存储卷

  • 云盘类型:包年包月的云盘不能进行挂载、卸载操作。

  • 共享存储:云盘为阿里云存储团队提供的非共享存储,只能同时被一个Pod挂载。

  • 挂载数量及容量:每个节点最多可挂载16块云盘,单块云盘容量最小为1 GiB,最大32 TiB(32768 GiB)。

  • 与ECS实例的关系:云盘类型和ECS类型需要匹配才可以挂载,否则会挂载失败。关于云盘类型和ECS类型的匹配关系,请参考实例规格族。此外,云盘只能挂载到相同可用区的ECS实例,不支持跨可用区挂载。

  • 挂载应用类型:推荐使用有状态应用(StatefulSet)挂载使用云盘。无状态应用(Deployment)挂载云盘时Replica需要配置为1,无法为每个Pod配置独立的存储卷,且不能保证挂载、卸载的优先顺序。此外,由于Deployment的升级策略,重启Pod时新的Pod可能一直无法挂载,故不推荐使用。

  • 应用参数配置:使用云盘存储卷时,如果在应用模板中配置了securityContext.fsgroup参数,kubelet在存储卷挂载完成后会执行chmodchown操作,导致挂载时间延长。若需要减少挂载时间,具体操作,请参见NAS存储卷挂载时间延长OSS存储卷挂载时间延长

NAS存储卷

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

  • CSI插件不支持SMB挂载。

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

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

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

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

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

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

OSS存储卷

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

  • 目前支持CentOS、Alibaba Cloud Linux、ContainerOS和龙蜥操作系统。

  • 使用数据卷时,每个应用使用独立的PV名称,同时请勿使用subpath的配置。

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

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

    • 不适用于写文件的应用场景。如需写入文件,建议您使用SDK实现写操作或者使用NAS存储卷服务。关于使用SDK实现写操作的具体操作,请参见OSS存储读写分离最佳实践

  • ossfs可以通过调整配置参数的方式,优化其在缓存、权限等方面的表现,请参见常见问题ossfs异常问题排查OSS存储卷FAQossfs/README-CN.mdFAQ

容器存储功能概览

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、DBFS

支持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

回收站 (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组件

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角色。