在 Kubernetes 中,PersistentVolume
(PV)和 PersistentVolumeClaim
(PVC)用于管理存储资源。PV 是集群中的存储资源,而 PVC 是 Pod 请求 PV 的方式。按需创建 PV 通常使用 StorageClass 实现动态存储分配,PVC 通过声明请求所需的存储量与访问模式来绑定相应的 PV。以下是按需创建 PV 和使用 PVC 的具体步骤。
1. 按需创建 PV(使用 StorageClass)
StorageClass
用于定义动态存储分配的策略,允许 Kubernetes 自动创建 PV,而无需手动预先配置。
创建 StorageClass
首先定义一个 StorageClass
资源,指定存储类型和配置参数。
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs # 选择适合您的云提供商或存储类型
parameters:
type: gp2
reclaimPolicy: Delete # PV 被释放后会删除存储(也可设置为 Retain,保留数据)
volumeBindingMode: WaitForFirstConsumer
2. 创建 PVC 以请求 PV
PersistentVolumeClaim
是 Pod 请求存储资源的声明。配置 PVC 时指定需要的存储大小和访问模式,Kubernetes 会使用指定的 StorageClass
动态创建匹配的 PV 并绑定到该 PVC。
PVC 配置示例
以下示例中,PVC 请求 5Gi 的存储,并使用之前创建的 StorageClass
(standard
)。
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce # 设置访问模式,可选 ReadOnlyMany、ReadWriteMany 等
storageClassName: standard # 指定使用的 StorageClass
resources:
requests:
storage: 5Gi
当这个 PVC 申请存储时,Kubernetes 会根据 StorageClass
配置动态创建一个 PV 并绑定到 PVC。
3. 在 Pod 中使用 PVC
在 Pod 配置中引用 PVC 以挂载存储卷,从而使应用可以使用持久存储。
yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-storage
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc
各字段解析
- volumeMounts:指定容器内部的挂载路径,此路径对应于卷绑定的位置。
- volumes:引用 PVC 以将持久卷挂载到容器中。
验证
- 创建 StorageClass、PVC 和 Pod :使用
kubectl apply -f
命令应用所有配置文件。 - 检查 PVC 状态 :运行
kubectl get pvc my-pvc
,查看 PVC 是否已绑定(Bound
状态)。 - 检查 Pod 挂载 :运行
kubectl describe pod my-pod
,确认卷已挂载到指定路径。
注意事项
- reclaimPolicy :定义 PV 释放后的处理方式,
Delete
表示删除存储资源,而Retain
表示保留。 - volumeBindingMode :
WaitForFirstConsumer
表示 PV 会在 Pod 请求时创建,适合多节点调度环境。