概念


卷的实现原理,因为外部卷挂载在POD的Pause容器中,然后POD中的容器C1,C2使用Pause中挂载的共享卷,所以即使C1,C2容器重启也不会丢失使用卷的内容.

卷的类型

emptyDir



emptyDir demo
创建Pod中2个容器test-pd1

kubectl exec test-pd1 -c test-container -it -- /bin/sh进入pod对应的容器中

在test-container容器中进入挂载目录/cache下将当前时间创建写入index.html中
kubectl exec test-pd1 -c liveness-exec-container -it -- /bin/sh进入pod的liveness容器中查看/test目录,可以查看到test-container容器中/cache目录下的日期内容

hostPath



hostPath Demo

kubectl exec -it test-pd -it -- /bin/sh进入容器的test-pd目录创建index.html文件

在宿主机目录上查看存储卷,更新成功

PVC





PV




PV和PVC的演示
安装nfs过程

1.nfs服务器安装nfs相关的插件

2.创建/nfs目录更改权限.更改所属用户,并且修改/etc/exports文件,将权限写入nfs配置文件中,然后开启rpcbind 和nfs服务



2.所有k8s节点安装nfs客户端,创建目录.使用命令showmount -e ip 查看nfs共享存储主机上面的存储策略,mount -t nfs ip:/nfs /test将本机的目录挂载到提供共享nfs服务主机的目录下面


3.部署PV
4.kubectl get pv 查看可用的pv信息

5.创建多个nfs,观察pv和pvc的关系
vi /etc/exports修改文件


6.mkdir nfs{1..3}创建nfs目录

7.systemctl restart rpcbind systemctl restart nfs 重启nfs服务

8.挂载测试新增nfs是否可以挂载

9.nfs服务没问题,创建pv,nfspv-nfspv3 使用不同的pv,nfspv3 使用storageClassName为slow

10.kubectl get pv 查看所有创建的pv

11.创建svc为headless的svc,

12.创建statefulset控制器

13.修改镜像参数,并且加上挂载卷以及挂载模板

14.kubectl describe pod1查看未起来的pod的描述内容,未成功绑定pvc


分析未启动成功原因:因为符合nfs条件并且访问模式的只有一个pv,所以只有pod1创建成功了到pod2就没有符合条件的pv了


15.删除不符合条件的pv,nfspv3,nfspv4

16.新增2个符合策略的pv nfspv3,和nfspv4

17.查看新增的pv情况,并且查看statefulset创建的pod情况


pod起来后再次查看pv情况,已经看到pv已经被pvc绑定,并且CLAIM为namespace/pvc名称-pod名称

所以得出结论pvc和pv一一对应,并且pvc会格局符合模板条件的pv自动绑定
18.kubectl describe pv nfspv1 查看pv1


19.修改nfs 主机所设置目录的pv里面内容

20.curl podip 可以看到nginx镜像里面的 index.html文件在nfs服务器上面修改的内容展示了
StatefulSet总结
21.随便进入一个pod中ping pod名称.headlesssvc名

22.删除pod web-0 发现重新拉起了个新的pod, 虚拟ip变为10.244.2.88

23.再次通过ping 域名访问 也可以ping通

24.通过dig svc 来访问后端映射的statefulset创建的pod


pod,pvc,pv,nfsstatefulset之间的关联图


本文介绍Kubernetes中的卷管理,包括卷的实现原理、不同类型的卷(如emptyDir、hostPath和PersistentVolume)及其使用方法,并通过示例演示如何在StatefulSet中配置PV和PVC以实现数据持久化。
1万+

被折叠的 条评论
为什么被折叠?



