容器内的目录和宿主机的目录进行挂载
容器在系统上的生命周期是短暂的。delete,K8S用控制器创建的pod,delete相当于重启,容器的状态也会恢复到初始状态。一旦回到初始状态,所有的后天编辑的文件都会消失
容器和节点之间创建一个可以持久化保存容器内文件的存储卷。即使容器被销毁、删除、重启,节点上的存储卷的数据依然存在,后续也可以继续使用。可以继续将容器内目录和宿主机挂载,保存的数据继续使用
1、emptyDir
容器内部共享存储卷,K8S系统中,是一个pod当中的多个容器共享一个存储卷目录
emptyDir卷可以使pod当中的容器在这个存储卷上读取和写入
emptyDir不能挂载到节点。随着pod生命周期的结束,emptyDir卷也会结束,数据也不会保留
容器内部共享。lnmp
2、hostPath
将容器内的挂载点和节点上的目录进行挂载,hostPath可以实现数据的持久。node节点被销毁,那么数据也会丢失
Q:污点设置为NoExcute时,节点上的pod会被驱逐,那么文件数据是否还在?
A:在。①只是pod被驱逐,并不是node节点被销毁。所以数据还是保留在节点上; ②pod被驱逐之后,基于控制器创建的,会在其他重新部署,又会在其他节点生成一个新的存储卷,数据依然可以持久化。emptyDir的共享数据会丢失,hostPath不会
3、NFS共享存储
所有pod内的目录都和节点上的NFS共享目录形成数据卷,所有的数据文件都保存在共享目录中.集中方便管理
PV和PVC(面试必问:组件、功能、网络、资源调度、扩缩容、pvc/pv)
pv(Presistent Volume):持久化存储卷。描述和定义一个存储卷,pv由运维人员来定
pvc(Presistent Volume Claim):持久化存储的请求。pvc实际上是用来描述或者申明我希望使用什么样的pv来进行存储
pvc和pv是一一对应的关系(描述(期望类型)、存储(大小))
pvc ---> pv ---> NFS
pv和pvc都是虚拟化的概念,是K8S的抽象的虚拟的存储资源
pvc和pv之间的静态请求。(一旦形成百个pvc怎么办?所以还有动态pvc)
pv是集群当中的存储资源,pvc请求存储资源,也是对存储资源的一个检索(检查索引),选择一个最合适的pv来存储资源
pv和pvc之间有生命周期管理:
1、Provisioning(配置) ---> pvc请求request ---> 检索(找一个合适的pvc) ---> pvc和pv(binding绑定) ---> 使用 ---> pod被删除 ---> pv的releasing(释放) ---> recycling(回收)
配置:静态、动态
绑定:就是把pv分配给pvc
使用:就是pod通过pvc使用存储资源
释放:pod解除和volume之间的关系,删除pvc
回收:可以保留pv,以供下一个pvc使用
pv状态:
Availble:可用,而且没有被任何pvc绑定(等待绑定)
Bound:绑定。pv已经绑定了pvc,绑定即使用
released:释放。pvc已经被删除了,但是pv的存储资源尚未被集群回收
Failed:pv资源回收失败,而且pv为不可用状态
ReadWriteOnce(RWO):在配置文件里是全称,存储pv可读可写,但是只能被单个pod挂载
ReadOnlyMany(ROX):存储的pv可以以只读的方式被多个pod挂载
ReadWriteMany(RWX):存储可以支持读写的方式被多个pod共享
NFS:可以支持RWO、ROX、RWX三种读写和挂载方式
SCSI:
ISCSI:不支持RWX
hostPath:只支持RWO
lsscsi 查看全部的挂载设备
[root@master01 opt]# lsscsi
[1:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0
[2:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda
[root@master01 opt]#iscsiadm -m session -P 3
iscsiadm: No active sessions.
iscsiadm -m session -P 3
iscsiadm:查看服务器是否有iscsi设备
-m session:指定操作的模块,管理iSCSI的会话
-P 3:显示详细信息的级别。级别就是3,显示详细信息
集群回收pv资源的方式:
1、Retain(默认策略):保留。pod和挂载点的数据不会被删除
2、Recycle:回收。pv上的数据被删除,挂载点的数据也被删除
3、Delete:删除。解绑时自动删除pv上的数据,(本地硬盘不能使用,AWS, EBS GCE)支持动态卷的可以使用,pv不再可用(云平台自己处理)
补充:当pod运行之后,通过pvc请求到pv,除非pod被销毁,否则无法删除pvc
K8S当中存储卷的模式:
emptyDir:容器内存储卷,随着pod被销毁,也会被销毁,数据不保留
hostPath:节点目录的存储卷,可以实现持久化存储。数据在每个几点上都有,不方便集中管理
NFS:共享目录存储卷,可以实现持久化,数据集中在一个目录,方便管理
pv和pvc
pvc是一种请求,请求pv的存储资源--------硬盘空间(NFS方式)
NFS支持pvc的所有挂载方式和读写模式
hostPath仅支持RWO
pvc是以检索的方式找到匹配的pv资源
检索挂载方式和读写方式
检索pv能提供的存储资源的大小
谁合适选谁
保留:默认可以不屑
回收:自动回收。节点上的数据会被删除
删除:pv会变成failed模式,不可用,数据也会被删除