Kubernetes通过Kuboard基于NFS的PersistentVolume
**
概述
**
与管理计算资源相比,管理存储资源是一个完全不同的问题。为了更好的管理存储,Kubernetes 引入了 PersistentVolume 和 PersistentVolumeClaim 两个概念,将存储管理抽象成如何提供存储以及如何使用存储两个关注点。
PersistentVolume(PV 存储卷)是集群中的一块存储空间,由集群管理员管理、或者由 Storage Class(存储类)自动管理。PV(存储卷)和 node(节点)一样,是集群中的资源(kubernetes 集群由存储资源和计算资源组成)。PersistentVolumeClaim(存储卷声明)是一种类型的 Volume(数据卷),PersistentVolumeClaim(存储卷声明)引用的 PersistentVolume(存储卷)有自己的生命周期,该生命周期独立于任何使用它的容器组。PersistentVolume(存储卷)描述了如何提供存储的细节信息(NFS、cephfs等存储的具体参数)。
PersistentVolumeClaim(PVC 存储卷声明)代表用户使用存储的请求。Pod 容器组消耗 node 计算资源,PVC 存储卷声明消耗 PersistentVolume 存储资源。Pod 容器组可以请求特定数量的计算资源(CPU / 内存);PersistentVolumeClaim 可以请求特定大小/特定访问模式(只能被单节点读写/可被多节点只读/可被多节点读写)的存储资源。
根据应用程序的特点不同,其所需要的存储资源也存在不同的要求,例如读写性能等。集群管理员必须能够提供关于 PersistentVolume(存储卷)的更多选择,无需用户关心存储卷背后的实现细节。为了解决这个问题,Kubernetes 引入了 StorageClass(存储类)的概念
**
存储卷和存储卷声明的关系
**
存储卷和存储卷声明的关系如下图所示:
PersistentVolume 是集群中的存储资源,通常由集群管理员创建和管理
StorageClass 用于对 PersistentVolume 进行分类,如果正确配置,StorageClass 也可以根据 PersistentVolumeClaim 的请求动态创建 Persistent Volume
PersistentVolumeClaim 是使用该资源的请求,通常由应用程序提出请求,并指定对应的 StorageClass 和需求的空间大小
PersistentVolumeClaim 可以做为数据卷的一种,被挂载到容器组/容器中使用
存储卷声明的管理过程
PersistantVolume 和 PersistantVolumeClaim 的管理过程描述如下:
下图主要描述的是 PV 和 PVC 的管理过程,因为绘制空间的问题,将挂载点与Pod关联了,实际结构应该如上图所示:
Pod 中添加数据卷,数据卷关联PVC
Pod 中包含容器,容器挂载数据卷
**
实际操作如下
**
1.部署NFS服务器
在NFS主机上部署NFS
yum install -y nfs-utils #安装NFS vim /etc/exports #创建 exports 文件,文件内容如下 /nfs/data/ *(insecure,rw,sync,no_root_squash) #以下命令为启动NFS服务过程 mkdir -p /nfs/data/ systemctl enable rpcbind systemctl enable nfs-server systemctl start rpcbind systemctl start nfs-server exportfs -r
2.在集群机器内验证NFS服务器是否成功搭建
showmount -e 192.168.2.42 # ip替换为你的NFS机器ip
3.登陆到Kuboard管理界面创建命名空间
2.创建存储类StorageClass
返回到Kuboard首页
这里解释两点
1.回收策略 Reclaim Policy
由 StorageClass 动态创建的 PersistentVolume 将使用 StorageClass 中定义的回收策略。可选项有:
回收后删除 Delete
回收后保留 Retain
同一 StorageClass 中,手动创建的 PersistentVolume,将使用创建时手动指定的回收策略。
2.存储卷绑定模式 Volume Binding Mode
StorageClass 根据存储卷绑定模式的选项,确定何时执行 存储卷与存储卷声明的绑定、何时执行动态存储卷提供(动态创建存储卷)。可选项有:
即刻绑定 Immediate
存储卷声明创建后,立刻动态创建存储卷并将其绑定到存储卷声明。
首次使用时绑定 WaitForFirstConsumer
直到存储卷声明第一次被容器组使用时,才创建存储卷,并将其绑定到存储卷声明。
3.创建PV/PVC
进入到刚刚创建的命名空间test内
其读写模式对应于yaml文件下accessModes
ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。
可以看到
pv/pvc均已创建,对应nfs目录下也已经创建文件夹
4.创建项目并挂载PV
基本信息随便填了一个,反正只是做一下示例
添加数据卷 Volume
添加挂载点
以上保存创建即可
**
5.测试
**
可以发现刚刚创建的目录已经生成,因为容器未对PV进行操作,里面为空
进入容器内bash
可以看到,挂载的PV已经显示
我们进入文件夹创建个文件
对应的NFS目录下也已经生成
删除容器在观察PV是否正常挂载
删除后会自动重启容器,重新进入容器bash查看
以上概念类的内容转自kuboard官网,官网中对整个PV的讲解不是很详细,故做补充,若有错误,请指正
https://kuboard.cn/learning/k8s-intermediate/persistent/volume.html#%E6%95%B0%E6%8D%AE%E5%8D%B7%E6%A6%82%E8%BF%B0
- 点赞
- 收藏
- 分享
- 文章举报
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)
- 基于CentOS 7系统的两部LAMP服务器,通过NFS共享同一个php网页的实现
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(一搭建开发环境——安装交叉工具连)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(一搭建开发环境——建立NFS服务器)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(一搭建开发环境——建立NFS服务器)
- Tiny6410基于linux2.6.36内核通过NFS启动根文件系统总结(成功挂载nfs根文件系统)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(二uboot移植)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(五 内核测试 一 unrecognized/unsupported machine ID (r1=0x000009d8)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(五 内核测试 三 通过bootargs设置根文件系统的启动位置)
- 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(三编译linux内核)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(五内核测试 二 VFS: Cannot open root device "ubi0:FriendlyARM-root" )
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(一搭建开发环境——建立tftp服务器)
- tiny6410基于SDBOOT通过NFS启动根文件系统
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(五 内核测试 四 通过NFS成功启动根文件系统)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(一搭建开发环境——建立NFS服务器)
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)
- 基于NFS-LAMP架构、共用1个Discuz,MySQL的双WEB Server 推荐
- Kubernetes 和 Swarm 两种docker集群,基于ansible的自动化安装部署(已测)