k8s 持久化存储方案-PVC

参考官网:https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclai

ms

一、K8s PV 是什么?

PersistentVolume(PV):PV 是集群中的存储资源,可以是物理存储设备、网络存储或云存储等。PV 独立于 Pod 存在,它们是集群级别的资源,由集群管理员进行配置和管理。PV 具有持久性,即使 Pod被删除,PV 中的数据也会保留。PV 定义了存储的容量、访问模式和其他属性。

K8s PVC 是什么

PersistentVolumeClaim(PVC):PVC 是 Pod 对 PV 的申请,它表示 Pod 需要一定的存储资源来满足其持久化存储需求。PVC 在 Pod 和 PV 之间建立了一个抽象层,使得 Pod 无需关心底层存储的具体细节。PVC 定义了 Pod 对存储的需求,包括存储容量、访问模式等。

K8s PVC 和 PV 工作原理:当创建一个 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)时,它们之间的相互作用和工作原理如下:

通过 PV 和 PVC 的结合使用,Kubernetes 提供了一种灵活的持久化存储管理机制,使得使得 k8s

使用者可以轻松地申请、使用和管理存储资源,同时提供了不同的回收策略以满足不同的需求。

二、创建 pod,使用 pvc 作为持久化存储卷

1、创建 nfs 共享目录

#在宿主机创建 NFS 需要的共享目录

root@xuegod63 \~\]# mkdir /data/volume_test/v{1,2} -p #配置 nfs 共享宿主机上的/data/volume_test/v1..v2 目录 \[root@xuegod63 \~\]# vim /etc/exports /data/volume_test/v1 \*(rw,no_root_squash) /data/volume_test/v2 \*(rw,no_root_squash) #重新加载配置,使配置成效 \[root@xuegod63 \~\]# exportfs -arv 2、如何编写 pv 的资源清单文件 #查看定义 pv 需要的字段 kubectl explain pv **pv.yaml 配置文件** apiVersion: v1 kind: PersistentVolume metadata: name: v1 labels: app: v1 spec: capacity: storage: 1Gi accessModes: ["ReadWriteOnce"] nfs: path: /data/volume_test/v1 server: 192.168.1.63 --- apiVersion: v1 kind: PersistentVolume metadata: name: v2 labels: app: v2 spec: capacity: storage: 2Gi accessModes: ["ReadWriteMany"] nfs: path: /data/volume_test/v2 server: 192.168.1.63 3、创建 pv #更新资源清单文件 kubectl apply -f pv.yaml #查看 pv 资源 kubectl get pv --show-labels 4、创建 pvc,和符合条件的 pv 绑定 pvc.yaml 配置文件 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: selector: matchLabels: app: v2 accessModes: ["ReadWriteMany"] resources: requests: storage: 2Gi #更新资源清单文件 kubectl apply -f pvc.yaml #查看 pv 和 pvc kubectl get pv kubectl get pvc ![](https://i-blog.csdnimg.cn/direct/d2ec9aa042434f67ae3d37e1b935a968.png) 5、创建 pod,挂载 pvc vim pod_pvc.yaml apiVersion: v1 kind: Pod metadata: name: pod-pvc spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent volumeMounts: - name: nginx-html mountPath: /usr/share/nginx/html volumes: - name: nginx-html persistentVolumeClaim: claimName: my-pvc #更新资源清单文件 \[root@xuegod63 \~\]# kubectl apply -f pod_pvc.yaml #查看 pod 状态 # kubectl get pods -owide | grep pod-pvc ![](https://i-blog.csdnimg.cn/direct/368dc38d54614a11a9ba887c80d6c36e.png) 测试 pod 挂载 PVC 是否正常: 在绑定的 v2 目录下创建文件,写入测试内容"my-pvc" \[root@xuegod63 \~\]# echo "my-pvc" \>\> /data/volume_test/v2/index.html \[root@xuegod63 \~\]# curl 10.244.104.12 my-pvc 测试删除 pod,再重新创建 pod ,挂载原先的 pvc,看数据是否会丢失: \[root@xuegod63 \~\]#kubectl delete -f pod_pvc.yaml \[root@xuegod63 \~\]#kubectl apply -f pod_pvc.yaml \[root@xuegod63 \~\]# kubectl get pods -owide \| grep pod-pvc pod-pvc 1/1 Running 0 27s 10.244.104.13 \[root@xuegod63 \~\]# curl 10.244.104.13 my-pvc pod 重新挂载到原 pvc,数据还在

相关推荐
sg_knight15 小时前
Docker 实战:如何限制容器的内存使用大小
java·spring boot·spring·spring cloud·docker·容器·eureka
电棍23315 小时前
在docker a100云服务器运行vulkan->sapien->robotwin的经验(报错segmentation fault)
运维·docker·容器
MichaelCoCoQ19 小时前
Zabbix监控K8S的PV卷
容器·kubernetes·负载均衡·zabbix·运维开发
微学AI19 小时前
深入评测openEuler 24.03 LTS SP2:在云原生时代构筑高性能的应用与实战操作
云原生·openeuler
似水流年 光阴已逝19 小时前
k8s中的StatefulSet 控制器
云原生·容器·kubernetes
chen_note20 小时前
K8s的标签应用和调度
云原生·容器·kubernetes·标签·污点与容忍度
墨倾许20 小时前
《Windows 11 + Docker:极简DVWA靶场搭建全记录》—— 附详细排错指南与最终解决方案
windows·笔记·网络安全·docker·容器·靶场
岚天start20 小时前
解决方案—K8S集群的日志按天并按照命名空间分类定时同步到日志服务器
服务器·docker·kubernetes·shell·日志备份
梁萌21 小时前
linux中使用docker安装MySQL
linux·运维·docker·容器·mysql安装
晨晖221 小时前
docker打包,启动java程序
java·docker·容器