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

K8S中PV和PVC之间的关系

Persistent Volume (PV)Persistent Volume Claim (PVC) 是 Kubernetes 中管理存储的核心抽象概念,二者的关系可以类比为 存储资源提供方存储资源消费方。以下是详细解释:

核心关系

对象角色生命周期使用者
Persistent Volume (PV)存储资源的实体(如 NFS、云磁盘、本地磁盘等)独立于 Pod 和 PVC,需手动或动态创建由集群管理员配置
Persistent Volume Claim (PVC)用户对存储资源的请求(声明需要的存储特性)与 Pod 绑定,由用户创建和销毁开发者或应用运维人员

交互流程

  1. 管理员创建 PV

    • 定义存储资源的容量、访问模式(如 ReadWriteOnce)、存储类型等。

    • 示例 PV 配置(静态供应):

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: my-pv
      spec:
        capacity:
          storage: 10Gi
        accessModes:
          - ReadWriteOnce
        persistentVolumeReclaimPolicy: Retain  # 回收策略(Retain/Delete/Recycle)
        storageClassName: manual              # 关联的 StorageClass
        hostPath:
          path: /data                         # 使用本地存储(仅示例)
  2. 用户创建 PVC

    • 声明需要的存储容量、访问模式、存储类(StorageClass)。

    • 示例 PVC 配置:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: my-pvc
      spec:
        storageClassName: manual
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi
  3. Kubernetes 绑定 PV 和 PVC

    • 系统根据 PVC 的请求(容量、访问模式、StorageClass)匹配可用 PV

    • 若匹配成功,PVC 进入 Bound 状态,与 PV 建立一对一绑定。

    • 若没有可用 PV,且启用了动态供应(通过 StorageClass),则会自动创建新 PV

  4. Pod 挂载 PVC

    • 在 Pod 中通过 volumes 字段引用 PVC:

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
          - name: app
            image: nginx
            volumeMounts:
              - name: data
                mountPath: /var/www/html
        volumes:
          - name: data
            persistentVolumeClaim:
              claimName: my-pvc  # 使用已绑定的 PVC

关键特性对比

特性PVPVC
定义者集群管理员应用开发者
创建方式手动创建或动态供应(通过 StorageClass)用户手动创建
绑定关系一个 PV 只能绑定到一个 PVC一个 PVC 只能绑定到一个 PV
回收策略支持 RetainDeleteRecycle无,随 PV 的回收策略处理
动态供应依赖 StorageClass 和 Provisioner通过指定 StorageClass 触发动态创建 PV

生命周期与回收策略

  1. PV 的回收策略persistentVolumeReclaimPolicy

    • Retain(默认):删除 PVC 后,PV 保留数据,需手动清理。

    • Delete:删除 PVC 后,自动删除 PV 及底层存储(如云磁盘)。

    • Recycle(已废弃):删除数据并标记 PV 为可用(仅适用于部分存储类型)。

  2. PVC 删除后的行为

    • 若 PV 的回收策略为 Retain,则 PV 进入 Released 状态,需管理员手动清理后重新绑定。

    • 若为 Delete,则 PV 和底层存储资源会被自动删除。


动态供应(Dynamic Provisioning)

当使用 StorageClass 时,PVC 可以直接触发 PV 的自动创建,无需管理员预先配置 PV。

  • 示例 StorageClass(AWS EBS):

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: aws-gp2
    provisioner: kubernetes.io/aws-ebs  # 指定存储驱动
    parameters:
      type: gp2
    reclaimPolicy: Delete              # 动态创建的 PV 默认回收策略
  • 用户创建 PVC 时指定 StorageClass:

    spec:
      storageClassName: aws-gp2  # 动态创建符合要求的 PV
      accessModes: [ReadWriteOnce]
      resources:
        requests:
          storage: 20Gi

总结

  • PV 是实际的存储资源,PVC 是用户对存储需求的抽象。

  • PVC 通过匹配 PV 的规格(容量、访问模式、StorageClass)来绑定存储资源。

  • 动态供应 通过 StorageClass 实现按需自动创建 PV,大幅简化存储管理。

  • 二者的分离使得存储资源的提供方(管理员)和使用方(开发者)职责清晰,提升灵活性和可维护性。

相关文章:

  • 大语言模型-1.2-大模型技术基础
  • css -学习
  • MySQL 数据归档自动化:Python + pt-archiver 打造高效运维利器
  • 【WebRTC---源码篇】(二十三_一)JitterBuffer运行流程
  • Python学习第十三天
  • Stable Diffusion F.1模型全面解析
  • Selenium 自动化测试学习总结
  • Web 品质样式表:提升网页视觉效果与用户体验的秘诀
  • hadoop集群配置-ssh无密登陆
  • 3.11记录
  • 美团AI面试面经
  • Microsoft Dragon Copilot:医疗AI革命开启,用语音终结手写病历时代
  • jQuery干货
  • 网络接口松动为什么会导致高延迟
  • Linux:多线程(单例模式,其他常见的锁,读者写者问题)
  • openai-agents 安装与测试
  • 信息学奥赛c++语言:整数去重
  • 3-001:MySQL 中的回表是什么?
  • 中国软件供应链安全技术指南|DevSecOps敏捷安全技术金字塔V3.0正式发布
  • MQ消息发送不在MySQL事务中,该如何保证一致性?
  • 少数人的奢侈品还是所有人的必需品:我们如何解构创造力?
  • AI世界的年轻人|他用影像大模型解决看病难题,“要做的研究还有很多”
  • 武汉大学新闻与传播学院已由“80后”副院长吴世文主持工作
  • 经济日报社论:书写新征程上奋斗华章
  • 神十九都带回了哪些实验样品?果蝇等生命类样品已交付科学家
  • 迎接八方来客:全国多地“五一”假期党政机关大院停车场免费开放