Kubernetes 存储持久化:PV 和 PVC 的核心概念与实践
Kubernetes 中的 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC):实现存储持久化
在 Kubernetes (K8s) 中,PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 是实现存储持久化的关键组件。它们通过绑定机制将集群中的存储资源与用户对存储的需求进行匹配,从而实现动态或静态的存储分配。这对于需要持久存储的有状态应用至关重要。
今天,我们将深入探讨 PV 和 PVC 如何在 Kubernetes 中协同工作,确保容器中的应用能够持久化存储。
什么是 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)?
在 Kubernetes 中,PV 和 PVC 是两个紧密配合的对象。PV 代表着集群中的存储资源,而 PVC 是用户或应用程序对存储资源的需求声明。
PersistentVolume (PV)
PV 是由集群管理员创建和配置的具体存储资源。它代表了集群中的某一部分可供使用的存储空间。PV 具有以下特点:
- 容量:每个 PV 都有一个固定的存储容量。
- 访问模式:PV 可以设置不同的访问模式,具体包括:
- ReadWriteOnce:只允许单一节点以读写方式挂载该 PV。
- ReadOnlyMany:多个节点可以以只读方式挂载该 PV。
- ReadWriteMany:多个节点可以以读写方式挂载该 PV。
- 回收策略:当 PV 不再被 PVC 绑定时,可以根据回收策略进行处理(如保留、删除或回收)。
动态供应:PV 可以根据预先定义的 StorageClass 动态创建,也可以由管理员手动创建并配置。
示例:PersistentVolume 配置
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /mnt/data
PersistentVolumeClaim (PVC)
PVC 是用户或应用程序创建的声明,它用来申请一定量的存储资源。PVC 会指定所需的存储容量、访问模式等特征,但不直接指定使用哪个 PV。Kubernetes 会根据 PVC 的要求,自动选择一个合适的 PV 来绑定。
- 存储请求:PVC 描述了对存储的需求,如存储容量、访问模式、存储类等。
- 自动绑定:当 PVC 被创建时,Kubernetes 的调度系统会自动查找与 PVC 需求匹配的 PV。如果找到了合适的 PV,它们将会被自动绑定。
示例:PersistentVolumeClaim 配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
PV 和 PVC 的关联过程
Kubernetes 提供了两种方式来实现 PV 和 PVC 的关联:动态绑定 和 静态绑定。
1. 动态绑定
当 PVC 被创建并且指定了 StorageClass 时,Kubernetes 会根据 PVC 的要求和存储类,自动查找集群中可用的 PV。如果存在符合条件的 PV,Kubernetes 会自动将 PVC 与该 PV 绑定。如果没有可用的 PV,Kubernetes 会根据 StorageClass 配置自动创建一个新的 PV。
- StorageClass:它定义了存储资源的属性,如性能级别、备份策略等,可以通过它来动态供应存储资源。
2. 静态绑定
在静态绑定的情况下,集群管理员手动创建并配置 PV。在管理员创建 PV 时,PV 可以设置特定的标签或注解。当用户创建 PVC 时,Kubernetes 会根据 PVC 中指定的标签选择符合条件的 PV 进行绑定。
- 标签匹配:用户可以通过设置 PVC 的标签要求来指定与哪些 PV 匹配。
PV 和 PVC 如何协同工作
- 创建 PV:集群管理员根据集群的存储需求创建 PV。
- 创建 PVC:用户或应用程序根据存储需求创建 PVC,指定容量、访问模式和存储类。
- 自动或静态绑定:Kubernetes 会自动或通过静态绑定将 PVC 与合适的 PV 配对。
通过 PV 和 PVC 的配合,Kubernetes 确保了 Pod 中的容器能够获得持久化存储。即使在 Pod 重启、迁移或升级时,数据仍然得以保留和一致性。
总结
- PersistentVolume (PV) 是集群中由管理员创建和管理的存储资源,具有固定容量和特定的访问模式。
- PersistentVolumeClaim (PVC) 是用户或应用程序创建的存储请求,Kubernetes 会根据 PVC 的需求自动或手动将其与合适的 PV 进行绑定。
- 动态绑定 和 静态绑定 机制使得存储资源能够灵活地提供给用户,同时确保数据的持久性。
Kubernetes 中的 PV 和 PVC 通过精细的绑定机制使得存储资源与应用需求完美匹配,为有状态应用提供了强大的存储支持。这对于数据库、消息队列和缓存等有状态服务的运行至关重要。
希望这篇博客文章能帮助你深入理解 Kubernetes 中 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 的工作原理及其在存储持久化中的关键作用。如果你有更多问题,欢迎在评论区交流!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!