前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PV、PVC、StorageClass

PV、PVC、StorageClass

原创
作者头像
Michel_Rolle
发布2024-06-28 23:14:13
1480
发布2024-06-28 23:14:13

在 Kubernetes 中,持久化存储是一个至关重要的功能。为了实现这一功能,Kubernetes 引入了 Persistent Volume(持久卷,PV)、Persistent Volume Claim(持久卷声明,PVC)和 StorageClass(存储类)等概念。这些概念帮助用户管理存储资源,使得存储的使用更加灵活和高效。本文将详细介绍 PV、PVC 和 StorageClass 的概念、工作原理及其在实际应用中的使用方法。

一、Persistent Volume(持久卷,PV)

1.1 PV 概念

Persistent Volume(PV)是集群中的一块存储资源。PV 独立于使用 PV 的 Pod,具有其生命周期和管理方式。PV 是一个集群资源,类似于集群中的节点或其他资源。它的定义是由管理员预先创建的,也可以通过 StorageClass 动态地进行分配。

1.2 PV 特点
  • 持久性:PV 在 Pod 重启或重新调度时仍然存在,不会因为 Pod 的生命周期结束而丢失数据。
  • 独立性:PV 独立于 Pod,Pod 可以随时访问和使用 PV 中的数据。
  • 管理方便:管理员可以统一管理集群中的所有 PV,方便进行存储资源的分配和调整。
1.3 PV 配置示例

以下是一个 PV 的 YAML 文件示例:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data"

在这个示例中,PV 名为 my-pv,容量为 10Gi,访问模式为 ReadWriteOnce,存储路径为 /mnt/data

二、Persistent Volume Claim(持久卷声明,PVC)

2.1 PVC 概念

Persistent Volume Claim(PVC)是用户对 PV 的请求。PVC 描述了用户对存储资源的需求,包括存储容量和访问模式等。用户通过 PVC 来申请 PV,并将其挂载到 Pod 中使用。

2.2 PVC 特点
  • 动态绑定:PVC 和 PV 之间可以动态绑定,当 PVC 提交请求后,系统会自动寻找匹配的 PV 并绑定。
  • 需求描述:PVC 允许用户通过 YAML 文件描述其对存储资源的需求,系统根据需求进行分配。
  • 资源隔离:PVC 确保用户只能访问其申请的存储资源,保证数据的安全性和隔离性。
2.3 PVC 配置示例

以下是一个 PVC 的 YAML 文件示例:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

在这个示例中,PVC 名为 my-pvc,请求的存储容量为 5Gi,访问模式为 ReadWriteOnce

三、StorageClass(存储类)

3.1 StorageClass 概念

StorageClass(存储类)用于动态提供存储资源。管理员可以预先定义不同的存储类,每个存储类对应不同的存储提供者或存储配置。用户在 PVC 中指定 StorageClass,从而动态创建和绑定 PV。

3.2 StorageClass 特点
  • 动态创建:StorageClass 允许根据用户需求动态创建 PV,简化了存储资源的管理和使用。
  • 灵活配置:StorageClass 支持配置不同的存储提供者(如 NFS、GlusterFS 等)以及不同的存储参数,满足不同的存储需求。
  • 自动清理:通过定义 StorageClass 的回收策略,可以自动清理不再使用的存储资源,避免资源浪费。
3.3 StorageClass 配置示例

以下是一个 StorageClass 的 YAML 文件示例:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-storageclass provisioner: kubernetes.io/aws-ebs parameters: type: gp2 zone: us-west-2a reclaimPolicy: Retain

在这个示例中,StorageClass 名为 my-storageclass,使用 AWS EBS 作为存储提供者,存储类型为 gp2,区域为 us-west-2a,回收策略为 Retain

四、PV、PVC、StorageClass 的工作流程

4.1 静态供应

静态供应是指管理员预先创建好 PV,然后用户通过 PVC 进行绑定和使用。工作流程如下:

  1. 创建 PV:管理员创建 PV,定义存储容量、访问模式等。
  2. 提交 PVC:用户提交 PVC,描述对存储资源的需求。
  3. 绑定 PV 和 PVC:系统根据 PVC 的需求查找匹配的 PV 并进行绑定。
  4. 挂载 PV:Pod 使用 PVC,系统将绑定的 PV 挂载到 Pod 中。
4.2 动态供应

动态供应是指用户通过 PVC 提交请求,由系统根据 PVC 中指定的 StorageClass 动态创建和绑定 PV。工作流程如下:

  1. 创建 StorageClass:管理员创建 StorageClass,定义存储提供者和存储参数等。
  2. 提交 PVC:用户提交 PVC,指定 StorageClass 和存储需求。
  3. 动态创建 PV:系统根据 PVC 的需求和指定的 StorageClass 动态创建 PV。
  4. 绑定 PV 和 PVC:系统将创建的 PV 与 PVC 进行绑定。
  5. 挂载 PV:Pod 使用 PVC,系统将绑定的 PV 挂载到 Pod 中。

五、实际应用中的使用方法

5.1 静态供应示例

以下是一个静态供应的示例,包括创建 PV 和 PVC,并将 PVC 挂载到 Pod 中。

  1. 创建 PV
代码语言:javascript
复制
yaml复制代码apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
  1. 创建 PVC
代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  1. 创建 Pod 并挂载 PVC
代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: my-volume
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc
5.2 动态供应示例

以下是一个动态供应的示例,包括创建 StorageClass、PVC 并将 PVC 挂载到 Pod 中。

  1. 创建 StorageClass
代码语言:javascript
复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: my-storageclass
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  zone: us-west-2a
reclaimPolicy: Retain
  1. 创建 PVC
代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: my-storageclass
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  1. 创建 Pod 并挂载 PVC
代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: my-volume
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

六、总结

在 Kubernetes 中,PV、PVC 和 StorageClass 是实现持久化存储的重要组成部分。通过 PV 和 PVC,用户可以方便地申请和管理存储资源;通过 StorageClass,管理员可以灵活地配置和动态提供存储资源。理解和掌握这三个概念,有助于提高 Kubernetes 集群的存储管理能力,满足不同应用场景下的存储需求。希望本文能够帮助读者更好地理解和使用 Kubernetes 的持久化存储功能。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Persistent Volume(持久卷,PV)
    • 1.1 PV 概念
      • 1.2 PV 特点
        • 1.3 PV 配置示例
        • 二、Persistent Volume Claim(持久卷声明,PVC)
          • 2.1 PVC 概念
            • 2.2 PVC 特点
              • 2.3 PVC 配置示例
              • 三、StorageClass(存储类)
                • 3.1 StorageClass 概念
                  • 3.2 StorageClass 特点
                    • 3.3 StorageClass 配置示例
                    • 四、PV、PVC、StorageClass 的工作流程
                      • 4.1 静态供应
                        • 4.2 动态供应
                        • 五、实际应用中的使用方法
                          • 5.1 静态供应示例
                            • 5.2 动态供应示例
                            • 六、总结
                            相关产品与服务
                            云硬盘
                            云硬盘(Cloud Block Storage,CBS)为您提供用于 CVM 的持久性数据块级存储服务。云硬盘中的数据自动地在可用区内以多副本冗余方式存储,避免数据的单点故障风险,提供高达99.9999999%的数据可靠性。同时提供多种类型及规格,满足稳定低延迟的存储性能要求。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档