将磁盘挂载到容器
1 | 1. 容器重新启动时,卷的内容将保持不变,新容器可以识别前一个容器写入卷的所有文件 |
emptyDir 卷
1 | 1. 创建一个空卷,挂载到Pod中的容器。 |
1 | 1. emptyDir 临时将数据写入磁盘 |
1 | 1. pod 包含两个容器和1个挂载到两个容器的共用卷,在不同的路径上 |
hostPath 卷
1 | # 1. hostPath卷指向节点文件系统上的目录 |
1 | [root@k8s-master1 ~]# kubectl get pods -n kube-system |
持久化存储
持久化存储的作用
1 | 1. 当运行在一个Pod中的应用程序需要将数据保存到磁盘上,并且该Pod重新调度到另外一个节点时,也要求具有相同的数据可用。 |
使用NFS作为底层存储
1 | 1. 集群并未运行在云服务器上 而是自建环境,需要有自己的存储集群 |
1 | # 选择 master2 作为服务端 |
1 | # 配置服务端的访问路径 启动服务端守护进程 |
创建 mongodb 数据库 pod 测试持久化存储
1 | # 配置启动 |
向 MongoDB pod 里面插入数据
1 | [root@k8s-master1 demo]# kubectl get pods -o wide |
测试持久化存储
1 | # 删除 Pod |
其他存储技术
1 | 1. 参考: 官方文档 |
从底层存储技术 解耦 Pod
持久卷和持久卷声明
1 | 1. 开发人员需要一定数量的持久化存储 向K8S请求 类似创建Pod时请求CPU和内存 |
持久卷
1 | 1. PersistenVolume(PV) |
1 | 持久卷由集群管理员创建,并被Pod通过持久卷生命消费 |
创建 PV 持久卷
1 | 1. PersistenVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理。(专业的存储人员来做) |
1 | # 在Kubernetes集群中,PV 作为存储资源存在。PVC 是对PV资源的请求和使用,也是对PV存储资源的”提取证”,而Pod通过PVC来使用PV。 |
1 | # 存储卷的存在下面的4种状态: |
1 | [root@k8s-master1 demo]# kubectl explain PersistentVolume |
1 | [root@k8s-master1 demo]# kubectl create -f nfs-pv.yaml |
创建 PVC 持久卷声明
1 | [root@k8s-master1 demo]# kubectl explain PersistentVolumeClaim |
1 | 1. resources 资源; 财力 |
1 | [root@k8s-master1 demo]# kubectl get pvc |
Pod 使用 PVC 持久卷声明
1 | [root@k8s-master1 demo]# vim mongodb-pod-pvc.yaml |
1 | [root@k8s-master1 demo]# kubectl get pods -o wide |
使用 PV 和 PVC 的好处
1 | 1. 研发人员不用担心 底层的存储技术 只需要申请容量和访问模式 |
回收持久卷
1 | # 删除 Pod |
手动回收持久卷
1 | 1. persistentVolumeReclaimPolicy: Retain ,该设置告诉k8s,PVC和PV解绑后,保留卷和数据 |
1 | # 测试不删除底层数据,然后手动删除持久卷,重建资源 |
测试删除 PV和底层数据
1 | [root@k8s-master1 demo]# kubectl delete pod mongodb |
自动回收持久卷
1 | # 当前的回收策略可选值包括: |
1 | # 测试 nfs 的 Recycle 回收策略 是否删除了底层数据 和 被新的PVC复用 |
PV 动态供给
1 | 1. 主要是针对容量问题,手动划分非常麻烦,如果pvc的容量匹配不上pv就无法绑定 |
k8s 支持持久卷的存储插件
1 | https://kubernetes.io/docs/concepts/storage/persistent-volumes/ |
NFS PV 动态供给
1 | # 创建RBAC授权 |
1 | # 创建nfs的nfs-client-provisioner |
1 | # StorageClass 定义 |
1 | # 创建 |
nfs 自动供给 机制
1 | 1. 动态存储卷供应使用StorageClass进行实现,其允许存储卷按需被创建。 |
创建 PVC
1 | 1. 在存储类被正确创建后,就可以创建PersistenetVolumeClaim来请求StorageClass, |
1 | [root@k8s-master1 nfs]# vim mongodb-pod-pvc.yaml |
1 | # 删除 pod 和 pvc |
查看存储类
1 | [root@k8s-master1 nfs]# kubectl get sc |