1、定义
容器内的目录和宿主机的目录进行挂载
容器在系统上的生命周期是短暂的,一旦容器被删除,数据会丢失。k8s基于控制器创建的pod,delete相当于重启,容器的状态会恢复到原始状态。一旦回到原始状态,后天编辑的文件都会消失,所以容器和节点之间要创建一个持久化保存容器内文件的存储卷,即使容器被销毁、删除、重启,节点上的存储卷依然存在,后续可以继续将容器内的目录和宿主机挂载,保存的数据可以继续使用
2、 存储方式
(1) ****emptyDir:容器内部共享存储卷,****在k8s系统中是一个pod中的多个容器共享一个存储卷目录。emptyDir可以使pod中的容器在这个存储卷上读取和写入,但不能挂载到节点上,随着pod的生命周期结束,emptyDir也会被销毁,导致数据丢失
一个pod里两个容器。加上****-c 容器名**** 进入一个pod里的不同容器
(2) hostPath: 将容器内的目录和节点上的目录进行挂载,hostPath可以实现数据持久化。若node节点被销毁,数据也会丢失****(常用)****
注意:这种挂载方式非常直接,但有一个重要的限制:hostPath 是特定于节点的,而不是集群范围的
污点设置为NoExecute会把节点上的pod驱逐,文件数据在不在? 【面试题】
emptyDir的共享数据会丢失
hostPath的共享数据不会丢失。pod被驱逐,不是node节点被销毁,之前的数据还保留在原来的节点上;基于控制器创建的pod被驱逐会在其他节点重新部署,所以会在其他节点生成一个新的存储卷,数据依然可以持久化
nfs的共享数据不会丢失

|-------------|-----------------------|---------------|
| 容器 | 容器内的目录 | 挂载点 |
| 容器1 | /usr/share/nginx/html | 节点上的/opt/test |
| 容器2 | /data | 节点上的/opt/test |
| 因为两个容器内的目录均和节点上的/opt/test进行挂载,所以这个两个容器之间的目录也能数据同步,形成容器1的/usr/share/nginx/html、容器2的/data、节点上的/opt/test三者数据同步 |||


注意:这种挂载方式非常直接,但有一个重要的限制:hostPath 是特定于节点的,而不是集群范围的





hostPath 是特定于节点的,而不是集群范围的


查看一个pod里多个容器的日志。-c 容器名

(3)NFS共享存储:数据集中在同一个节点上管理 (常用。推荐)
所有pod内的目录都和节点上的NFS共享目录形成数据卷,所有数据文件都保存在共享目录中,集中、方便管理


指定共享目录/data/volumes

发布共享目录

在其他节点查看共享目录



方式1:指定IP地址





测试
查看容器中是否同步数据

结论:每个pod中数据同步

结论:每个pod中的所有容器数据同步
方式2:指定主机名




所有主机做主机名映射





测试
在共享目录中创建文件

查看pod是否同步数据

结论:容器和节点上的挂载目录数据同步
|------------|-------------|----------------------------------------|
| k8s持久化存储数据方式的特点 |||
| 方式 | 挂载点 | 特点 |
| emptyDir | 容器与容器进行挂载 | 一旦pod被销毁,数据丢失 |
| hostPath | 容器与节点进行挂载 | 持久化存储数据,pod销毁数据仍存在,但数据分散存储在各个节点上,不方便管理 |
| nfs | 容器与节点进行挂载 | pod销毁数据仍然存在,并且数据集中在一个节点上,方便管理 |
3、 PV和PVC 【面试必问】
(1) pvc定义
全称Persistent Volume Claim 持久化存储的请求,描述或声明希望使用什么样的pv来进行存储。pvc是虚拟化的请求存储资源或检索存储资源,选择一个最合适的pv来存储资源
(2) pv定义
全称Persistent Volume 持久化存储卷,描述和定义一个存储卷,pv由运维人员来定的。pv是集群中虚拟化的存储资源
pv和pvc是一一映射的关系(描述、存储大小)
pvc向pv请求,存储在NFS服务器上
pv和pvc都是虚拟化的概念,是k8s的抽象的虚拟的存储资源
pv3和pv4都满足要求,但优先选择pv3,若pv3被占用,则选择pv4
(3)pv和pvc之间有生命周期管理
配置provisioning→pvc请求request→检索(找一个合适的pv)→pvc和pv绑定bending→使用use→pod被删除,pv的资源被释放releasing→回收recycling
配置分为静态请求和动态请求
绑定:把pv分配给pvc
使用:pod通过pvc使用存储资源
释放:pod解除和挂载卷之间的关系,删除pvc
回收:保留pv以供下一个pvc使用
( 4 ) pv和pvc的映射方式
①静态请求
②动态请求
( 5 ) pv的状态
|-------------------|---------------------------|
| Available | 可用,且没有被任何pvc绑定 |
| Bound | 绑定,pv已经绑定pvc,绑定即使用 |
| released | 释放,pvc已被删除,但集群尚未回收pv的存储资源 |
| Failed | pv资源回收失败,且pv处于不可用状态 |
( 6 ) pv支持的读写方式
|-----------------------|-------------------------------------------|
| ReadWriteOnce | RWO,存储pv可读可写,但只能被单个pod挂载 pv可读可写,只能挂载单个pod |
| ReadOnlyMany | ROX,存储pv可以以只读的方式被多个pod挂载 pv只读,能挂载多个pod |
| ReadWriteMany | RWX,存储pv可以以读写的方式被多个pod挂载 pv可读可写,能挂载多个pod |
| NFS支持以上三种读写和挂载方式,hostPath只支持ReadWriteOnce方式(在配置文件中都是全称) ||
| ISCSI设备不支持ReadWriteMany方式 (注意环境检查) iscsiadm -m session -P 3 #查看服务器是否有iscsi设备 -m session指定操作的会话模块,管理iscsi的会话 -P 3显示详细信息的级别(3表示显示详细信息) ||
(7) 集群回收pv资源的方式
|-----------------|--------------------------------------------------------------------|
| Retain | 保留。pod和挂载点的数据不会被删除(默认策略。常用) 回收资源后,pv处于released状态,需人工调整成Available状态 |
| Recycle | 回收。pv上的数据会被删除,挂载点的数据也被删除 回收资源后,pv自动调整成Available状态 |
| Delete | 删除。解绑时自动删除pv上的数据(本地硬盘不能使用,只有云平台支持动态卷的可以使用),pv不再可用,云平台自己处理 |
当pod运行之后通过pvc请求到了pv,除非pod被销毁,否则无法删除pvc(先删除pod才能删除pvc)
运维负责pv,创建好持久化存储卷,声明好读写和挂载类型,以及可以提供的存储空间。开发负责pvc,与开发对接好条件:期望的读写和挂载类型以及存储空间
创建静态pv实验(默认策略是Retain)
1、发布共享目录

在其他节点上查看共享目录



(一)保留策略 Retain(pod销毁,存储卷上的数据不会被删除)
2、创建多个pv
定义pv能支持的读写方式和能接收pvc请求的存储大小
此时各个pv支持的读写方式、存储大小以及与节点的挂载目录:
|------------|------------------------------------------|--------------|------------------|
| PV | 支持的读写方式 | 存储大小 | 节点上的挂载目录 |
| PV001 | ReadWriteMany ReadWriteOnce | 1G | /data/v1 |
| PV002 | ReadWriteOnce | 2G | /data/v2 |
| PV003 | ReadWriteMany ReadWriteOnce | 2G | /data/v3 |
| PV004 | ReadWriteMany ReadWriteOnce | 4G | /data/v4 |
| PV005 | ReadWriteMany ReadWriteOnce ReadOnlyMany | 5G | /data/v5 |
| 客户端发送PVC请求到PV上请求存储资源,PV通过nfs方式挂载到节点上的目录,实际上数据还是存储在节点上 ||||


3、定义pvc
向pv发起请求





4、测试
pvc请求具体用哪个pv的存储,pv和物理存储做挂载,最终由物理设备提供持久化存储
5、删除pvc(运行中的pod无法删除pvc)
• 先删除pod

• 再删除pvc



6、pv恢复可用状态





( 二 ) 回收策略Recycle
2、定义pv








3、定义pvc
向pv发起请求





4、测试
在共享目录中创建文件

查看容器是否同步数据


结论:数据同步
5、删除pvc


稍等一会自动变成可用状态


( 三 ) 删除 策略delete
2、定义pv






3、定义pvc
向pv发起请求





4、测试
在共享目录中创建文件

查看容器中是否数据同步


结论:数据同步成功
5、删除pvc


Failed表示资源回收失败,并且pv处于不可用状态
注:delete只支持动态卷删除
6、恢复pv




