概述
-
在Kubernetes里最小的管理单元是Pod
-
Pod中产生的数据都是临时的,Pod销毁后默认不保存
-
对于有状态的服务,需要数据持久化
-
所以Kubernetes给定了一些数据持久化的方案
Kubernetes存储应用场景
-
服务的基本配置文件读取、密码密钥管理等
-
服务的存储状态、数据存储等
-
不同服务或应用程序间共享数据
Kubernetes存储系统核心概念
Volumn
-
Pod可以同时使用任意数目的卷类型
-
临时卷类型的生命周期与Pod相同,但持久化卷可以比Pod的存活时间长
-
卷的存在时间会超出Pod中所有容器,且在Pod重启时会重新加载
持久卷(PV)
-
是集群中管理员集中配置的一块存储
-
它是集群中的资源,就和节点是集群资源一样,包含存储的类型、大小和访问模式等
-
PV是卷插件比如Volumes等。但是它的生命周期独立于使用PV的任何Pod个体。比如,Pod销毁时,PV会得以保留。
持久卷声明(PVC)
-
是用户关于存储的请求
-
描述对PV的一个请求,请求信息包含PV大小、访问模式等,PVC会消耗PV资源
Kubernetes存储插件
-
Kubernetes可以直接调用某种存储插件,对接后端存储服务,现阶段存储插件有20多种。
-
Kubernetes的存储插件可以分为:In-tree和Out-of-tree两大类
-
In-tree: 源码放在Kubernetes内部,和Kubernetes一起发布、更迭,缺点是及时迭代速度慢、灵活性差
-
Out-of-tree: Volume Plugins独立于Kubernetes,它是由存储商提供实现的。主要有FlexVolume和CSI两种,ACK主要使用此类插件
-
ACK存储插件
FlexVolume
-
社区较早实现的存储卷扩展机制
-
FlexVolume运行在host空间,不能使用RBAC访问Kubernetes API,导致功能受到很大限制
-
由Shell部署
CSI
-
社区推荐的存储卷扩展机制
-
ACK集群提供的CSI存储插件兼容社区的CSI特性
-
CSI不仅仅支持Kubernetes平台存储插件接口,而是作为云原生生态中容器存储接口的标准
-
CSI是容器部署的
CSI存储插件
概念要点
-
遵循标准CSI规范,支持EBS、NAS、OSS等存储类型的挂载行为
-
自ACK v1.16开始,部署集群会默认安装最新版本的CSI组件,可以通过CSI存储插件使用阿里云存储服务
-
CSI存储插件提供了数据卷的全生命管理周期,包括数据卷的:创建、挂载、卸载、删除、扩容等服务
-
ACK目前只支持一种存储插件,CSI或者FlexVolume
插件特性
-
CSI是Kubernetes社区推荐的存储插件方案,CSI插件包括以下两部分:
-
CSI-Plugin: 实现数据卷的挂载、卸载功能。ACK默认提供云盘、NAS、OSS三种存储卷的挂载能力
-
CSI-Provisioner: 实现数据卷的自动创造能力,目前支持云盘、NAS两种存储卷创造能力。
-
CSI存储插件选择(EBS, NAS, OSS)
选择EBS的情景
EBS(阿里云云盘)是阿里云提供的数据块级别的块存储产品,优势是性能高、时延低,适合于OLTP数据库、NoSQL数据库等IO密集型的高性能、低时延的应用工作负载。
选择NAS的情景
无需修改应用,可直接挂在NAS。文件存储NAS适用于多计算节点、无状态集群的共享数据访问。
选择OSS的情景
OSS采用扁平化的文件组织形式,采用Restful API接口访问,不支持文件随机读写,适用于互联网架构的海量数据的上传下载和分发。
通过控制台使用云盘静态存储卷
前提条件
-
已创建一个ACK集群,并且在该集群中部署CSI集群
-
创建了一个按需付费的云盘
创建PV
创建PVC
创建应用
小结
-
Kubernetes存储核心概念:Volume、PV、PVC
-
Kubernetes插件存储分类:In-tree和Out-of-tree两类
-
ACK支持的存储插件模式:FlexVolume和CSI
-
ACK支持通过Pod绑定的三种存储形态:EBS、NAS、OSS