存储类(StorageClass)定义了持久卷声明(PersistentVolumeClaim)所需的属性和行为,而持久卷(PersistentVolume)是实际的存储资源,持久卷声明(PersistentVolumeClaim)是 Pod 对持久卷的请求。
简而言之,存储类定义了持久卷的供应方式,持久卷是预先配置的存储资源,持久卷声明是 Pod 对持久卷的请求。存储类通过与 持久卷声明 绑定来创建符合需求的 持久卷,使得 Pod 可以使用持久卷。
从北漂租客眼中的看法:
- 存储类 相当于我爱*家、链* 等这种租房中介商
- 持久卷 相当于一套房子(三室两厅、两室三厅、豪华别墅等)
- 持久卷声明 相当于租客的需求
- Pod 相当于租客
租客(Pod)想租房子需要找到中介(SC)说出自己的需求(PVC)。中介(SC)根据租客需求(PVC)找到房子(PV)提供给租客使用。
在 Kubernetes 中,存储类(StorageClass)、持久卷(PersistentVolume,PV)和持久卷声明(PersistentVolumeClaim,PVC)是用于管理持久化存储的关键组件。下面是它们之间的关系和作用:
- 存储类(StorageClass):存储类是用于定义持久卷的供应方式的抽象。它定义了存储卷的类型、访问模式、回收策略等信息。存储类允许管理员为不同的存储需求创建不同的策略,并且可以根据需要动态创建和删除持久卷。当创建 PVC 时,可以指定要使用的存储类,以便 Kubernetes 根据存储类的定义来创建相应的 PV。
- 持久卷(PersistentVolume,PV):持久卷是集群中的一块网络存储空间,它独立于 Pod 的生命周期。PV 是由管理员预先配置的,可以是物理存储设备、网络存储或云存储等。PV 具有容量、访问模式和回收策略等属性。PV 可以手动创建,也可以由存储类动态创建。当 PVC 请求一个符合条件的 PV 时,Kubernetes 会根据存储类的定义和可用的 PV 来选择并绑定一个 PV 给 PVC。
- 持久卷声明(PersistentVolumeClaim,PVC):持久卷声明是 Pod 对持久卷的请求。PVC 描述了 Pod 对存储的需求,包括容量、访问模式等。PVC 是通过与存储类绑定来创建符合需求的 PV 的一种方式。当创建 PVC 时,可以指定所需的存储类和其他属性,Kubernetes 会根据这些信息来选择并绑定一个合适的 PV 给 PVC。Pod 可以通过 PVC 来访问和使用持久卷。
PV/PVC 创建
# PV
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: cluster.local/nfs-provisioner
finalizers:
- kubernetes.io/pv-protection
name: pvc-8503070c-0b6f-4bb5-aa58-17722872d8ef
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: xxx-inbound-collector-xxx-job-start-load
mountOptions:
- noresvport
nfs:
path: /data/nfs-external/xxx-xxx-uat-xxx-inbound-collector-xxx-job-start-load-pvc-8503070c-0b6f-4bb5-aa58-17722872d8ef
server: x.32.x.148
persistentVolumeReclaimPolicy: Delete
storageClassName: nfs-client
volumeMode: Filesystem
# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: cluster.local/nfs-provisioner
creationTimestamp: "2023-08-29T08:18:23Z"
finalizers:
- kubernetes.io/pvc-protection
name: xxx-inbound-collector-xxx-job-start-load
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
storageClassName: nfs-client
volumeMode: Filesystem
volumeName: pvc-8503070c-0b6f-4bb5-aa58-17722872d8ef