• 搜索
  • 夜间模式
    ©2026  依刻学习 Theme by OneBlog

    依刻学习博客

    搜索
    标签
  • 首页>
  • 学习的一天>
  • 正文
  • PVC与PV

    2025年10月28日 63 阅读 0 评论 2347 字

    简述

    Volume是pod层面数据存储的抽象, 生命周期通常与 Pod 绑定 , 依赖pod存在 , 类型: emptydir ; hostpath ; nfs ; persistentVolume,

    PersistentVolume,简称PV,是集群层面的数据持久化数据 , 生命周期独立于Pod ,必须配合PVC使用, 支持类型更多

    PersistentVolumeClaim,简称PVC,是对存储资源的“声明”,它不直接创建PV

    PVC与PV

    PVC是PV的声明,PVC与PV一一对应,如果某个PV没有被PVC绑定,出于安全与解耦,pod无法直接使用PV,必须使用PVC间接引用PV

    PVC与PV之间的绑定有2中模式,静态绑定与动态绑定,其与StorageClass相关,这个配置用于配置PV的来源,例如本机磁盘,远程存储,云SSD等等

    • 静态绑定

      提前创建好PV,k8s再根据PVC的要求从已经创建的PV中选择合适的PV绑定

      要点:

      1. PV与PVC指定的storageClass必须相同

        kind: PersistentVolume
        # spec.storageClassName: ""  不指定默认为空或指定为空
        
        kind: PersistentVolumeClaim
        spec.storageClassName: ""
        # 这个不能省略,因为省略会使用默认的storageClass,无法匹配storageClassName为空的PV

        PV如果不指定storageClass则默认null,只能绑定storageClass=" "的PVC(经常用)

        PVC如果不指定storageClass则会使用默认的StorageClass,只能绑定到相同storageClass的PV

        ps:很显然,没有人想记默认的storageClass是什么,所以使用静态绑定都会指定storageClass为空来让k8s去选择

      2. PVC声明的是最小容量

        kind: PersistentVolume
        spec.capacity:
            storage: 10Gi
        
        kind: PersistentVolumeClaim
        spec.resources.requests:
            storage: 8Gi

        如果PVC声明需要8g的PV,但是k8s绑定了10g的PV给它,那么这个10g空间PVC都可以使用,不会剩余2g空闲,但是这也可能造成空间的浪费

      3. PV与PVC指定的accessModes访问形式

        kind: PersistentVolume
        spec.accessModes: ["ReadWriteOnce","ReadOnlyMany"]
        
        kind: PersistentVolumeClaim
        spec.accessModes: ["ReadWriteOnce"]

        PV指定的accessModes是允许的访问方式,可以通过列表指定多个

        PVC指定的accessModes是真正的使用方式,必须被PV支持,否则无法绑定

      4. PV的使用

        PV是一种数据卷,使用方法与其相同,使用volumeMounts进行挂载

        spec:
          containers:
            volumeMounts:
            - name: data
              mountPath: /usr/share/nginx/html
          volumes:
          - name: data            
            persistentVolumeClaim:  # 指定PVC而不是PV
              claimName: my-pvc
    • 动态绑定

      不需要提前创建PV,指定PVC的需要指定可用的storageClass,k8s会自动从该源中创建适合PVC要求的PV

      1. storageClass源

        需要专门创建StorageClass类型的资源,设定使用的存储源例如阿里云ceph文件存储,详细yaml文档略,具体使用时可直接参考相应云设备的文档
      2. 没有浪费

        动态创建,PVC指定需要多大容量就会创建多大容量,不会出现静态绑定时PV与PVC空间不符的情况

    StatefulSet与PVC

    StatefulSet控制器一个重要的功能就是持久化的数据存储,这是由PVC与PV提供的功能

    但是无论pod如何重启,始终使用同一个PV,这是StatefulSet控制器通过确保pod与PVC一一对应,间接保证pod一直使用同一个PV

    本文著作权归作者 [ wymm ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.019 s
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。