概念
卷的实现原理,因为外部卷挂载在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之间的关联图