存储管理概述
# 基本概念
- 存储卷:存储卷提供多种存储后端的统一描述和生命周期管理,当Pod需要使用存储时可以从存储卷查询到储存的类型并选择相应挂载方式,当Pod不再需要存储卷时,可以根据配置自动释放。
- 存储类别:存储类别支持根据预先定义,动态创建存储卷。
- 存储声明:存储卷和存储类别都属于集群资源,不能被Pod直接使用。而是通过存储声明的方式,间接与Pod相关联。
# 存储卷
存储卷支持多种,详细说明如下。
类型 | 说明 | 备注 |
---|---|---|
云盘 | 用已有云硬盘创建存储卷,当Pod被调度后,云盘会挂载到该主机,因此云盘无法同时挂载到多个Pod中,适合用作应用专属的存储 | 需云服务商支持 |
OSS | 使用云服务商提供的对象存储创建存储卷,文件访问将通过HTTP协议进行,可以同时挂载到多个Pod,适合需要多Pod共享的数据的场景 | - |
NAS | 使用云服务商提供的文件存储创建存储卷,将远程目录挂载到本地,可以同时被多个Pod使用,适合需要多Pod共享的数据的场景 | 需云服务商支持 |
LOCAL-NAS | 与NAS相似,但支持自建NAS和非云环境集群的使用 | - |
# 存储卷和储存声明的生命周期
存储卷是集群资源,而存储申明表示存储卷的使用申明和资源检查动作,两者间的生命周期如下。
# 供应(Provisioning)
存储卷包括两个供应方式静态供应和动态供应。
静态供应:由集群管理员预先创建的存储卷。
动态供应:当没有静态供应的存储卷满足要求时,存储类别可以动态创建并供应存储卷。
# 绑定(Binding)
当存储声明被创建后,Kubernetes集群会自动寻找合适的存储卷与之绑定(无论是静态供应还是动态供应),绑定关系是一对一的。如果找不到匹配的存储卷,存储申明会无限期的处于未绑定状态直到满足要求的储存卷被创建出来。
# 使用(Using)
一旦Pod使用了存储声明,并且存储声明已经绑定存储卷,那么该存储卷将一直属于该Pod。
当存储申明仍被Pod使用时,集群会阻止存储声明和存储卷被删除,如果尝试删除使用中的存储声明,实际删除动作将延迟到该存储声明不再被使用时。存储卷也仅会在存储声明处于终止中(Terminating)状态时才被删除。
# 回收(Reclaiming)
当不再使用存储声明时,您可以删除该存储声明,存储卷会根据相应回收策略进行处理,这些回收策略包括:
- 保留:存储声明删除时,保留存储卷,后端存储的数据依然存储。
- 删除:存储声明删除时,删除存储卷,后端存储的数据可能会删除(使用云盘时)。
# 存储卷访问模式
- ReadWriteOnce:存储卷以可读可写的方式挂载到一个主机节点。
- ReadOnlyMany:存储卷以只读方式挂载到多个主机节点。
- ReadWriteMany:存储卷以可读可写的方式挂载到多个主机节点。
注意:部分存储卷后端类型的访问模式无法修改。
# 工作负载使用存储卷的一般方式
存储卷作为后端存储的抽象表示,是一种集群级别的资源,而工作负载作为命名空间隔离的资源,无法直接使用存储卷,两者间需要一种“介质”才能相互关联。而这种“介质”,就是存储声明。
根据存储卷的来源不同,使用方式上也略有差别,下面将分别就静态供应和动态供应进行说明。一般而言,建议使用存储类别来进行存储卷动态供应,以便获得更多灵活性。
# 静态供应存储卷
针对静态供应的存储卷,通常的使用流程为:
管理员创建若干存储卷(PersistentVolume)。
运维人员创建存储声明(PersistentVolumeClaim)并直接指定存储卷与之关联。
运维人员在工作负载的资源文件中指定使用的存储声明。
# 动态供应存储卷
针对动态供应的存储卷,通常的使用流程为:
管理员根据对各类存储卷的不同需要(例如类型,大小),创建若干存储类别(StorageClass)。
运维人员创建存储声明(PersistentVolumeClaim)并指定使用的存储类型与之关联。
运维人员在工作负载的资源文件中指定使用的存储声明。
上一篇: 容器组 存储卷