跳到主要内容

认识

2024年08月30日
柏拉文
越努力,越幸运

一、认识


Kubernetes 中,PersistentVolumeClaim (PVC) 是用户对持久化存储的需求声明。PVCPersistentVolume (PV) 配合使用,PVC 表示用户的请求,而 PV 提供实际的存储资源。PVC 用于指定存储需求的细节,例如容量大小、访问模式以及与 PersistentVolume (PV) 的绑定方式。

1.1 核心概念

1. PersistentVolume (PV): PV 是一种存储资源,类似于集群中的节点资源,管理员可以预先配置它,也可以动态创建。它描述存储的具体细节(如 NFS、iSCSI、云存储等)。

2. PersistentVolumeClaim (PVC): PVC 是用户的请求,它描述了对存储的需求(如大小、访问模式)。PVC 通过绑定到 PV 来使用存储资源。

3. 存储类 (StorageClass): StorageClass 定义了动态创建 PV 的规则,例如使用哪种存储后端、参数设置等。

1.2 动态静态

静态供应: 管理员预先创建 PV,用户通过 PVC 使用。

动态供应: 使用 StorageClass 动态创建 PVPVC 触发此过程。

1.3 访问模式

PVC 支持与 PV 相同的访问模式:

  • ReadWriteOnce (RWO): 单个节点可读写。

  • ReadOnlyMany (ROX): 多个节点只读。

  • ReadWriteMany (RWX): 多个节点可读写。

1.4 绑定流程:

  1. 创建 PVC: 用户提交一个 PVC YAML 文件,指定存储需求(大小、访问模式等)。

  2. 绑定到 PV: Kubernetes 查找符合条件的 PV(根据存储大小、访问模式等)。

    • 如果找到匹配的 PVPVCPV 绑定。

    • 如果没有匹配且启用了 StorageClass,则动态创建 PV

  3. 挂载到 Pod: PVCPod 挂载为一个存储卷,Pod 中的应用程序通过挂载点访问持久化数据。

二、语法


2.1 静态供应

管理员预先创建 PV,用户通过 PVC 使用:

# PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"

# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi

2.2 动态供应

通过 StorageClass 动态创建 PV

# StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-storageclass
provisioner: kubernetes.io/aws-ebs

# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dynamic-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: example-storageclass