《K8s PV/PVC:动态存储的 Provisioner 配置》
·
以下是Kubernetes中动态存储配置的完整指南,包含关键概念、配置步骤和示例:
一、核心概念
-
PV(Persistent Volume)
集群级别的存储资源,由管理员创建或通过StorageClass动态生成 -
PVC(Persistent Volume Claim)
用户存储请求,指定所需存储的大小和访问模式 -
StorageClass
定义动态存储配置模板,核心字段:provisioner: storage-driver.example.com # 存储驱动名称 reclaimPolicy: Retain # 回收策略(Retain/Delete) allowVolumeExpansion: true # 允许卷扩容 parameters: # 驱动特定参数 type: ssd
二、动态配置流程
graph LR
A[创建StorageClass] --> B[用户创建PVC]
B --> C[PVC绑定StorageClass]
C --> D[自动创建PV]
D --> E[绑定PVC与PV]
三、配置步骤(以NFS为例)
-
部署Provisioner
helm install nfs-provisioner stable/nfs-server-provisioner \ --set storageClass.name=nfs-sc -
创建StorageClass
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-dynamic provisioner: cluster.local/nfs-provisioner reclaimPolicy: Retain volumeBindingMode: Immediate -
创建PVC请求存储
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: web-data-pvc spec: storageClassName: nfs-dynamic # 匹配StorageClass名称 accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi -
Pod挂载PVC
spec: volumes: - name: web-storage persistentVolumeClaim: claimName: web-data-pvc containers: - name: nginx image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: web-storage
四、关键配置参数
-
回收策略
Retain: 删除PVC后保留PV和数据Delete: 自动删除PV和底层存储
-
访问模式
ReadWriteOnce: 单节点读写ReadOnlyMany: 多节点只读ReadWriteMany: 多节点读写
-
卷绑定模式
Immediate: 立即创建PVWaitForFirstConsumer: 延迟绑定(推荐)
五、验证命令
# 查看存储类
kubectl get sc
# 检查PVC状态
kubectl get pvc
# 查看自动创建的PV
kubectl get pv
# 检查存储事件
kubectl describe pvc/web-data-pvc
六、常见Provisioner类型
| 云平台 | Provisioner名称 |
|---|---|
| AWS EBS | ebs.csi.aws.com |
| GCP PD | pd.csi.storage.gke.io |
| Azure Disk | disk.csi.azure.com |
| Ceph RBD | rbd.csi.ceph.com |
| NFS | nfs.csi.k8s.io |
重要提示:
- 生产环境建议使用
WaitForFirstConsumer绑定模式避免调度冲突- 不同存储驱动的参数配置需参考对应文档
- 动态卷扩容需同时启用
allowVolumeExpansion和文件系统扩展功能
通过以上配置,Kubernetes可自动完成存储资源的生命周期管理,实现按需分配的存储架构。
更多推荐
所有评论(0)