k8s按需创建PV和使用PVC详解
作者:少陽君
Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收策略和绑定模式
在 Kubernetes 中,PersistentVolume(PV)和 PersistentVolumeClaim(PVC)用于管理存储资源。
PV 是集群中的存储资源,而 PVC 是 Pod 请求 PV 的方式。
按需创建 PV 通常使用 StorageClass 实现动态存储分配,PVC 通过声明请求所需的存储量与访问模式来绑定相应的 PV。
以下是按需创建 PV 和使用 PVC 的具体步骤。
1.按需创建 PV(使用 StorageClass)
StorageClass 用于定义动态存储分配的策略,允许 Kubernetes 自动创建 PV,而无需手动预先配置。
创建 StorageClass
首先定义一个 StorageClass 资源,指定存储类型和配置参数。
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)。
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 以挂载存储卷,从而使应用可以使用持久存储。
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 请求时创建,适合多节点调度环境。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
