容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的Volume抽象就很好的解决了这些问题。Pod中的容器通过Pause容器共享Volume。
emptyDir存储卷
当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,emptyDir中的数据将被永久删除。
总结:可实现Pod中的容器之间共享目录数据,但没有持久化数据的能力,存储卷会随着Pod生命周期结束而一并删除
hostPath存储卷
hostPath卷将 node 节点的文件系统中的文件或目录挂载到集群中。
hostPath可以实现持久存储,但是在node节点故障时,也会导致数据的丢失。
总结:将node节点上的目录或文件挂载到Pod容器中,有持久化数据的能力,但是只能在单个node节点上持久化数据,不能实现跨node节点的Pod共享数据。
nfs存储卷:
总结:将nfs服务的共享目录挂载到Pod容器中,有持久化数据的能力,且也能实现跨node节点的Pod共享数据
1.配置共享节点 节点上安装nfs,并配置nfs服务
mkdir /opt/nfs -p
chmod 777 /opt/nfs
vim /etc/export
/opt/nfs 192.168.80.0/24(rw,sync,no_root_squash)
exportfs -avr
2.所有node节点开启rpcbind和nfs
systemctl start rpcbind
systemctl start nfs
showmount -e
3.master节点操作 配置yaml文件形成容器