Kubernetes存储概述
Kubernetes存储的作用
- 在Kubernetes中最小的管理单元是一个Pod
- Pod中产生的数据都是临时的,当Pod重启时里边的数据会丢失。
- 理想情况下服务应该是无状态的,但实际应用中我们很难做到服务完全无状态化,有些服务一定是有状态的,要想让这些服务能运行在集群中就不得不先解决数据持久化的问题。
- 所以,在Kubernetes集群下我们需要一种机制来解决这个问题,这就是Kubernetes存储的作用。
Kubernetes存储应用场景
Kubernetes中对于存储的使用主要集中在以下几个方面:
-
服务的基本配置文件读取、密码密钥管理等;
-
服务的存储状态、数据存储等;
-
不同服务或应用程序间共享数据。
Volume:Kubernetes 支持很多类型的卷。
- Pod可以同时使用任意数目的卷类型。
- 临时卷类型的生命周期与 Pod 相同,但持久卷可以比 Pod 的存活期长。
- 因此,卷的存在时间会超出 Pod 中运行的所有容器,并且在容器重新启动时数据也会得到保留。
持久卷(简称PV):它是集群中由管理员配置的一块存储。
- 它是集群中的资源,就和节点是集群资源一样,包含存储的类型,存储的大小和访问模式等。
- PV是卷插件比如Volumes。但是,它的生命周期独立于使用PV的任何 Pod个体。例如,当前使用它的Pod销毁时,对PV没有影响。
持久卷声明(简称PVC):是用户关于存储的请求
- 描述对PV的一个请求,请求信息包含存储大小、访问模式等,而PVC消耗PV资源。
Kubernetes 存储插件
- Kubernetes 可以直接调用某类存储插件,对接后端存储服务,现阶段Kubernetes存储插件约有 20多类。 Kubernetes 里的存储插件可以分为:In-tree 和 Out-of-tree 这两大类
- In-Tree类:表示源码是放在 Kubernetes 内部的,和 Kubernetes 一起发布、管理与迭代,缺点及时迭代速度慢,灵活性差
- Out-of-Tree类::Volume Plugins 的代码独立于 Kubernetes,它是由存储商提供实现的,目前主要有 (Flexvolume 和CSI 两种实现机制,可以根据存储类型实现不同的存储插件,所以我们比较推崇 Out-of Tree 这种实现逻辑。
阿里云容器服务ACK存储插件
目前阿里云容器服务ACK,支持两种存储插件Flexvolume和CSI
- Flexvolume插件是Kubernetes社区较早实现的存储卷扩展机制。
- Flexvolume运行在host 空间,不能使用RBAC授权机访问Kubernetes API.,导致其功能极大的受限。
- CSI插件是当前Kubernetes社区推荐的插件实现方案。
- ACK集群提供的CSI存储插件兼容社区的CSI特性。
- CSI不仅仅支持Kubernetes平台存储插件接口,而是作为云原生生态中容器存储接口的标准。
- 针对新建集群推荐您使用CSI插件,ACK会跟随社区持续更新CSI插件的各种能力。
- 针对已经创建的集群,仍然使用已经安装的存储插件类型。ACK会持续支持Flexvolume插件。
阿里云CSI存储插件
阿里云CSI存储插件
-
遵循标准CSI规范,提供了EBS、NAS、OSS等类型阿里云云存储服务的挂载能力。自ACK 1.16集群开始,部署集群事会默认安装最新版本的CSI组件,可以直接通过CSI存储插件使用阿里云存储服务。 CSI存储插件提供了数据卷的全生命周期管理,包括数据卷的创建、挂载、卸载、删除、扩容等服务。
- CSI不仅仅支持Kubernetes平台存储插件接口,而是作为云原生生态中容器存储接口的标准。
- CSI逐步替换Flexvolume是KBS社区发展的趋势,新建集群中我们更推荐使用CSI类型插件。
- 由于flexvolume、CSI依赖的Kubelet配置不同,目前ACK环境只能在创建集群时选择使用其中一种插件,暂不支持插件类型混用或者转换。
阿里云CSI存储插件特性
CSI插件是当前Kubernetes社区推荐的插件实现方案。ACK集群提供的CSI存储插件兼容社区的CSI 特性。CSI插件包括以下两部分:
- CSI-Plugin:实现数据卷的挂载、卸载功能,ACK默认提供云盘、NAS、OSS三种存储卷的挂载能力。
- CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS两种存储卷创建能力。
容器服务Kubernetes版支持在Kubernetes 集群通过Pod自动绑定阿里云云盘、NAS、 OSS存储服务。目前CSI驱动支持静态存储卷和动态存储卷。

阿里云CSI存储插件-如何选用NAS、OSS和EBS
-
容器服务 Kubernetes版,支持在Kubernetes集群通过Pod自动绑定三种存储形态:阿里云云盘、NAS、OSS存储服务。
-
阿里云云盘:是为云服务器ECS提供的数据块级别的存储产品,块存储的优势是性能高,时延低,适合于OLTP 数据库、NoSQL数据库、等IO密集型的高性能、低时延应用工作负载。
-
文件存储NAS:您无需修改应用,即可直接像访问本地文件系统一样访问文件存储NAS。因此文件存储NAS多用于多计算节点,无状态集群的共享数据访问。
-
对象存储OSS:是比较新的存储类型,相对于文件存储目录树的组织形式,对象存储OSS采用扁平的文件组织形式,采用RESTFul API接口访问,不支持文件随机读写,主要适用于互联网架构的海量数据的上传下载和分发。
阿里云CSI存储插件-通过控制台使用云盘静态存储卷
前提条件
- 您已经创建好一个Kubernetes集群,并且在该集群中部署CSI插件。
- 您已经创建好一个按量付费的云盘。请参见创建云盘。
创建PV
-
登录容器服务管理控制台。
-
在控制台左侧导航栏中,单击集群。
-
在集群列表页面中,单击目标集群名称或者目标集群右侧操 作列下的详情。
- 在集群管理页左侧导航栏中,单击存储卷。
- 在存储卷页面,单击右上角的创建。
-
在创建存储卷对话框中配置参数。

- 参数配置完成后,单击创建。
创建PVC
- 在集群管理页左侧导航栏中,选择存储 > 存储声明。
- 在存储声明页面,单击右上角的创建。
- 在创建存储声明对话框中,配置参数。

- 单击创建。创建成功后可以在列表中看到存储声明,并且已绑定相应的存储卷。
创建应用
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
- 在无状态页签中,单击使用镜像创建。
-
在应用基本信息页签中,设置应用的基本信息

- 单击下一步。进入容器配置页面。设置容器配置。数据卷支持配置本地存储和云存储。
- 本地存储:支持主机目录(HostPath)、配置项(ConfigMap)、保密字典(Secret)和临时目录,将对应的挂载源挂载到容器路径中。
- 云存储:支持云存储类型。
- 本例中配置了一个云盘类型的数据卷,将该云盘挂载到容器中/tmp路径下,在该路径下生成的容器数据会存储到云盘中。 所有的信息都配置完成后,单击创建。创建成功后,您就可以正常使用数据卷。
