Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

  • K8S

    • kubectl常用命令
    • Kubernetes核心概念详解:Namespace、Pod、Deployment、PV和PVC
    • Kubernetes之yaml文件详解
    • k8s部署MySQL
    • Kubernetes (k8s) 相关名词详解
    • PV、PVC、StorageClass的区别和联系
    • Systemd

    • Nginx

    • Supervisord

    • OpenLdap

    • OpenVPN

    • GitLab

    • Sshd

    • WebDev

    • Docker

    • Prometheus

    • Rclone

    • Iptables

    • Firewalld

    • Linux笔记
    • K8S
    Carry の Blog
    2025-03-30
    目录

    PV、PVC、StorageClass的区别和联系原创

    在 Kubernetes 中,持久化存储是一个重要的概念,它通过 PersistentVolume (PV)、PersistentVolumeClaim (PVC) 和 StorageClass 来实现。下面我们详细介绍它们的区别和联系。

    # 1. PersistentVolume (PV)

    定义: PersistentVolume 是 Kubernetes 中的一种资源对象,它表示集群中的一个存储卷。PV 是由管理员预先创建的,或者通过 StorageClass 动态创建的。

    特点:

    • PV 是集群范围的资源。
    • PV 的生命周期独立于 Pod。
    • PV 定义了存储的容量、访问模式、回收策略等。

    示例:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: example-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: standard
      hostPath:
        path: /mnt/data
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # 2. PersistentVolumeClaim (PVC)

    定义: PersistentVolumeClaim 是 Kubernetes 中的一种资源对象,它表示用户对存储的申请。PVC 用于绑定到 PV,并为 Pod 提供存储。

    特点:

    • PVC 是用户的存储需求声明。
    • PVC 会自动绑定到符合条件的 PV。
    • PVC 通过 accessModes 和 storageClassName 来匹配 PV。

    示例:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      storageClassName: standard
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 3. StorageClass

    定义: StorageClass 是 Kubernetes 中的一种资源对象,它定义了存储卷的动态配置方式。通过 StorageClass,可以动态地创建 PV,而无需管理员手动创建。

    特点:

    • StorageClass 定义了存储的提供方式。
    • StorageClass 可以指定不同的存储类型(如 NFS、Ceph、AWS EBS 等)。
    • StorageClass 可以设置 provisioner 和 parameters 来配置存储。

    示例:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: kubernetes.io/aws-ebs
    parameters:
      type: gp2
    
    1
    2
    3
    4
    5
    6
    7

    # 4. 区别

    资源对象 定义 作用
    PersistentVolume (PV) 表示集群中的存储卷 由管理员或 StorageClass 创建,用于存储数据
    PersistentVolumeClaim (PVC) 用户的存储需求声明 用户通过 PVC 申请存储,并绑定到 PV
    StorageClass 动态配置存储卷的方式 定义存储卷的类型和配置,用于动态创建 PV

    # 5. 联系

    1. PV 与 PVC 的联系:

      • PVC 是用户的存储需求声明,PV 是存储的实际实现。
      • PVC 会自动绑定到符合条件的 PV。
    2. StorageClass 与 PV 的联系:

      • StorageClass 定义了动态创建 PV 的方式。
      • 如果使用 StorageClass,PV 会根据 StorageClass 的配置动态生成。
    3. StorageClass 与 PVC 的联系:

      • PVC 可以通过 storageClassName 字段指定使用哪个 StorageClass。
      • PVC 的 storageClassName 决定了绑定的 PV 的类型。

    # 6. 使用场景

    • 静态存储: 如果集群管理员已经预先创建了 PV,用户可以通过 PVC 绑定到这些 PV。

    • 动态存储: 如果使用了 StorageClass,用户可以通过 PVC 动态创建 PV,而无需管理员手动干预。

    # 7. 示例流程

    以下是一个使用 StorageClass 动态创建 PV 的完整流程:

    1. 创建 StorageClass:
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: fast-storage
    provisioner: kubernetes.io/aws-ebs
    parameters:
      type: io1
      iopsPerGB: "10"
      fsType: ext4
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1. 创建 PVC:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: fast-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: fast-storage
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1. 检查自动创建的 PV:
    $ kubectl get pv
    
    1

    通过以上流程,PVC 会自动绑定到由 StorageClass 动态创建的 PV。

    # 总结

    • PV 是存储的实际实现。
    • PVC 是用户的存储需求声明。
    • StorageClass 提供了动态创建 PV 的方式。
    • 三者共同构成了 Kubernetes 中的持久化存储体系。
    #PV#PVC#StorageClass
    上次更新: 4/24/2025

    ← Kubernetes (k8s) 相关名词详解 Systemd编写服务管理脚本→

    最近更新
    01
    tidb fast ddl
    04-04
    02
    TiDB配置文件调优 原创
    04-03
    03
    如何移除TiDB中的表分区 原创
    04-03
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式