PVC(PersistentVolumeClaim)是 Kubernetes 中用于请求存储卷的对象。它与 PersistentVolume 配合使用,可以实现存储的动态分配与管理。
PVC 的主要作用是:
- 请求特定大小和访问模式(如读写权限)的存储卷。
- 将请求关联到存储卷,存储卷满足请求要求才能绑定。
- 存储卷的动态分配与管理:解决 PersistentVolume 需要预先分配但部分未使用的问题。
PVC 的定义主要包括以下字段:
- metadata:名称、Label 等元数据。
- spec:请求存储卷的参数
- accessModes:存储卷的访问模式,如 ReadWriteOnce(RWO)、ReadOnlyMany(ROX)、ReadWriteMany(RWX)等。
- resources:存储卷的大小,如 1Gi。
- selector:选择器,用于筛选匹配的 PersistentVolume。
- storageClassName:存储类,用于动态分配存储卷。
- status:PVC 的状态,如 Pending、Bound、Lost 等。
例如,我们可以定义一个请求 10Gi 大小、ReadWriteOnce 访问模式的存储卷的 PVC:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
然后 Kubernetes 会根据这一请求选择或者动态分配一个满足要求的 PersistentVolume 绑定到这个 PVC。
我们也可以通过 StorageClass 来请求动态分配的存储卷:
yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 30Gi
这里我们定义了一个 StorageClass,然后 PVC 通过设置 storageClassName 使用这个 StorageClass 请求动态分配的存储卷。
当 PVC 成功绑定到 PersistentVolume 后,我们就可以在 Pod 中以 Volume 的形式挂载这个 PVC 来使用存储卷:
yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
所以总结来说,PVC 的主要作用是:
- 请求存储卷的大小与访问模式。
- 将请求与满足要求的存储卷绑定。
- 通过 StorageClass 实现存储卷的动态分配。
- 在 Pod 中以 Volume 的形式挂载使用。