说明
在 Kubernetes 中,PersistentVolumeClaims (PVC) 和 PersistentVolumes (PV) 是两个用于实现持久化存储的核心对象。它们通常用于挂载存储卷(如 NFS、iSCSI、Ceph 等)到容器中,以便在容器重启或调度到不同节点时保持数据不变。
PVC
PersistentVolumeClaims (PVC) 是用来声明对存储的需求,类似于 Pod 中的对 CPU 和内存资源的请求。PVC 可以指定需要的存储资源的大小、访问模式(读写、只读等)和存储卷类型等。PVC 可以独立于 Pod 创建,可以在多个 Pod 之间共享。
PV
PersistentVolumes (PV) 是提供持久化存储的实际资源。PV 可以使用不同的后端存储技术来支持各种存储介质,例如 NFS、iSCSI、Ceph 等。在创建 PV 时,可以指定存储的容量、访问模式、存储介质的类型以及其他元数据。PV 是集群范围内的资源,可以被多个 PVC 共享。PV 是先创建,然后通过 PVC 进行绑定使用。
使用 PersistentVolumeClaims 和 PersistentVolumes 的一般流程如下:
- 创建存储后端,例如使用 NFS 或 iSCSI 协议挂载远程存储,或使用本地存储进行挂载。
- 创建 PersistentVolumes (PV) 对象,定义存储的容量、访问模式、存储介质类型等属性。
- 创建 PersistentVolumeClaims (PVC) 对象,声明需要的存储资源大小、访问模式等属性,并指定需要的 PV 的标签或其他属性。
- 在 Pod 的配置中,通过 volume 和 volumeMounts 字段来引用 PVC
示例
# 创建一个 NFS 存储后端的 PersistentVolume 对象
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.1.100
path: /nfs/data
# 创建一个 PersistentVolumeClaim 对象
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
type: nfs
# 在 Pod 配置中引用 PVC
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: nfs-volume
mountPath: /data
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvc