当前位置: 首页 > news >正文

在K8S中,PV 和 PVC有何作用?

在 Kubernetes 中,PV (Persistent Volume)PVC (Persistent Volume Claim) 是管理集群持久化存储的核心机制。它们的作用是将存储的提供(基础设施层)存储的消费(应用层) 分离开来,提供更大的灵活性和抽象性。

核心作用:

  1. 解耦存储管理与应用部署: 开发者无需关心底层存储细节(如 NFS 服务器地址、云存储桶名、存储类型),只需声明应用需要什么样的存储(容量、访问模式等)。运维人员则可以集中管理各种存储资源。
  2. 提供持久化存储: 确保 Pod 重启、迁移或重建后,其数据仍然存在并可访问。这是运行有状态应用(如数据库、消息队列)的基础。
  3. 抽象存储细节: PVC 作为应用请求存储的抽象接口,应用只与 PVC 交互。底层使用的具体存储技术(NFS, iSCSI, AWS EBS, GCP PD, Azure Disk, Ceph 等)对应用是透明的。

详细解释:

  1. PV (Persistent Volume):

    • 是什么: PV 是 Kubernetes 集群中的一块网络存储资源。它是由集群管理员预先配置好的,或者由 StorageClass 动态配置出来的。
    • 作用:
      • 代表实际的存储: 它指向一个具体的、可用的存储后端(如 NFS 共享目录、云硬盘、Ceph 卷等)。
      • 定义存储特性: PV 描述了这块存储的具体属性:
        • 容量: 例如 10Gi, 100Gi。
        • 访问模式: 定义了 Pod 如何挂载和使用这个卷。常见模式:
          • ReadWriteOnce:可被单个节点读写挂载。
          • ReadOnlyMany:可被多个节点只读挂载。
          • ReadWriteMany:可被多个节点读写挂载 (支持此模式的存储较少,如 NFS, CephFS)。
        • 持久卷回收策略: 当与之绑定的 PVC 被删除后,PV 如何处理:
          • Retain:保留 PV 和数据(手动清理)。
          • Delete:自动删除 PV 和底层存储(需要存储插件支持)。
          • Recycle:废弃策略(基本不用)。
        • 存储类: 指向一个 StorageClass 名称(如果是动态配置的 PV)。
        • 挂载选项: 特定存储系统支持的额外挂载参数。
        • 卷模式: Filesystem (文件系统,最常见) 或 Block (原始块设备)。
    • 生命周期: 独立于 Pod。即使使用它的 Pod 被删除,PV 及其数据通常仍然存在(除非回收策略是 Delete 且 PVC 被删)。
    • 创建者: 通常由集群管理员或自动化工具(如 StorageClass)创建。
  2. PVC (Persistent Volume Claim):

    • 是什么: PVC 是用户(通常是应用开发者)对存储资源的需求声明。它表达了 Pod 需要什么样的存储。
    • 作用:
      • 申请存储资源: 用户/应用通过创建 PVC 来请求特定大小和特定访问模式的存储。
      • 绑定到 PV: Kubernetes 系统会尝试找到一个满足 PVC 需求的、状态为 Available 的 PV,并将其与 PVC 绑定。一旦绑定成功,该 PV 状态变为 Bound,不能再被其他 PVC 使用。
      • 作为卷提供给 Pod: 在 Pod 的 volumes 配置中,可以引用 PVC 名称。当 Pod 调度到某个节点时,kubelet 会:
        1. 找到该 Pod 引用的 PVC。
        2. 找到与该 PVC 绑定的 PV。
        3. 根据 PV 的描述,挂载底层的实际存储到 Pod 指定的容器路径。
    • 生命周期: 通常与应用(或更准确地说是需要该存储的工作负载)紧密相关。当不再需要存储时,删除 PVC 可能会触发 PV 的回收(取决于 PV 的回收策略)。
    • 创建者: 应用开发者或 Helm Chart 等部署工具创建,作为应用部署清单的一部分。

它们如何协同工作 (工作流程):

  1. 管理员配置存储: 管理员预先创建一批 PV(静态配置),或者配置好 StorageClass 对象(定义如何动态创建 PV 的模板)。
  2. 用户部署应用:
    • 用户在部署应用的 YAML 文件中定义一个 PVC,指定所需存储的大小、访问模式(可选地指定 StorageClass)。
    • 用户在 Pod 模板的 volumes 部分引用这个 PVC 的名称。
  3. Kubernetes 绑定:
    • 当用户创建 PVC 时,Kubernetes 控制平面(主要是 PersistentVolume Controller)开始工作。
    • 静态绑定: 查找集群中是否存在满足 PVC 要求(容量、访问模式等)且状态为 Available 的 PV。如果找到,则将其与 PVC 绑定。
    • 动态配置: 如果 PVC 指定了 StorageClass 或者集群有默认 StorageClass,并且没有找到合适的静态 PV,则 StorageClass 中配置的 Provisioner(存储插件)会根据 PVC 的请求自动创建一个新的 PV,并立即将其绑定到该 PVC。
  4. Pod 调度与挂载:
    • 调度器将 Pod 调度到一个合适的节点上。
    • 该节点上的 kubelet 准备挂载 Pod 声明的所有卷。
    • 对于 PVC 类型的卷,kubelet:
      • 查找 Pod 引用的 PVC。
      • 确认 PVC 已绑定到某个 PV。
      • 根据 PV 的描述(类型、访问模式、挂载选项等),调用对应的存储插件(Volume Plugin)。
      • 存储插件连接到实际的存储后端(如 NFS 服务器、云存储 API),将存储挂载到节点上的指定路径。
      • 最后,kubelet 将这个路径挂载到 Pod 内的容器中指定的目录。
  5. 使用与回收:
    • Pod 中的容器读写挂载目录,数据实际保存在底层的持久化存储中。
    • 当 Pod 被删除时,挂载点被卸载,但 PV 和 PVC 以及底层数据通常仍然存在
    • 当用户删除 PVC 时:
      • 如果 PV 的回收策略是 Retain:PV 状态变为 Released,但 PV 对象和数据保留,需要管理员手动清理。
      • 如果 PV 的回收策略是 Delete:Kubernetes 会自动删除 PV 对象,并调用存储插件删除底层存储资源。

总结比喻:

  • PV 就像一块物理硬盘或云硬盘。 它是实实在在的存储资源。
  • PVC 就像一张硬盘申请单。 应用说:“我需要一块至少 100GB 大小、能让我单个机器读写的硬盘”。
  • Kubernetes 就像 IT 管理员。 它负责:
    • 查看仓库(集群)里有没有现成的符合要求的硬盘(PV)可以给你(静态绑定)。
    • 或者根据申请单的要求,自动去买一块新硬盘(动态配置 PV),然后交给你。
    • 最后把这块硬盘安装(挂载)到你申请的服务器(Pod 运行的节点)上供你的程序使用。
  • StorageClass 就像硬盘型号目录/自动采购流程。 它定义了管理员提供了哪些类型的硬盘(高性能 SSD、普通 HDD)以及如何自动采购(创建)它们。

关键价值:

  • 应用可移植性: 应用清单(YAML)只需声明 PVC,无需硬编码存储细节,使得应用更容易在不同集群(使用不同底层存储)间迁移。
  • 简化开发: 开发者只需关注“我需要多大、怎么用的存储”,无需学习底层存储配置。
  • 运维灵活性: 管理员可以灵活管理、更换、扩缩容底层存储基础设施,只要它能通过 PV 提供给 PVC 使用。
  • 资源管理: 可以精确控制分配给不同应用/命名空间的存储资源。
  • 支持有状态应用: 是运行数据库(MySQL, PostgreSQL)、消息队列(Kafka, RabbitMQ)、监控系统(Prometheus)等有状态服务的基础设施。
http://www.sczhlp.com/news/12408/

相关文章:

  • 如何在最新版Chrome网页内嵌本地原生金山WPS Office?
  • 梦与现实 (关于如何处理梦-现实链接,现实-梦链接,梦-梦链接)
  • 伪排练:解决NLP灾难性遗忘的简易方案
  • 《战地6》公测遭遇33万次作弊!官方应对得非常好!
  • 通过Docker部署FRP实现内网穿透功能
  • 【IEEE出版】2025年数字化社会、信息科学与风险管理国际学术会议(ICDIR 2025)
  • 从封闭到开放:开源TTS应用引领文本转语音技术民主化浪潮
  • 基于PKDV508E高压差分探头的开关电源测试方案
  • 【IEEE出版】第四届可再生能源与电气科技国际学术会议(ICREET 2025)
  • 在K8S中,PV 生命周期内的有哪些阶段?
  • 在K8S中,CSI模型有哪些?
  • 第二天数据结构
  • 在K8S中,所支持的存储供应模式有哪些?
  • 在K8S中,Requests 和 Limits 如何影响 Pod 的调度?
  • 4.分支语句
  • 在K8S中,如何使用EFK实现日志的统一管理?
  • 在K8S中,Metric Service有什么作用?
  • Gitee PPM:引领软件工厂智能化转型,打造协同操作系统新标杆
  • 看门狗机制深度解析:嵌入式系统死机防护的硬件秘钥
  • 在K8S中,Helm及其优势有哪些?
  • 分析慢查询
  • js常量枚举
  • Cursor限制国内使用claude gpt 等大模型解决方案
  • 百轮优化过的Cursor提示词
  • 给水和排水管道系统的设计和施工确实必须依据流体动力学模型来进行。这是因为流体动力学模型可以有效地预测和分析流体在管道中的行为,确保系统的运行稳定性、效率和安全性。
  • js带参数get提交到php
  • tomcat三种工作模式介绍
  • tomcat设置错误页面
  • Java面向对象——9.包
  • MySQL 定期备份与还原指南