以下是Kubernetes中动态存储配置的完整指南,包含关键概念、配置步骤和示例:

一、核心概念

  1. PV(Persistent Volume)
    集群级别的存储资源,由管理员创建或通过StorageClass动态生成

  2. PVC(Persistent Volume Claim)
    用户存储请求,指定所需存储的大小访问模式

  3. 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为例)

  1. 部署Provisioner

    helm install nfs-provisioner stable/nfs-server-provisioner \
      --set storageClass.name=nfs-sc
    

  2. 创建StorageClass

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nfs-dynamic
    provisioner: cluster.local/nfs-provisioner
    reclaimPolicy: Retain
    volumeBindingMode: Immediate
    

  3. 创建PVC请求存储

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: web-data-pvc
    spec:
      storageClassName: nfs-dynamic  # 匹配StorageClass名称
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi
    

  4. 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
    

四、关键配置参数

  1. 回收策略

    • Retain: 删除PVC后保留PV和数据
    • Delete: 自动删除PV和底层存储
  2. 访问模式

    • ReadWriteOnce: 单节点读写
    • ReadOnlyMany: 多节点只读
    • ReadWriteMany: 多节点读写
  3. 卷绑定模式

    • Immediate: 立即创建PV
    • WaitForFirstConsumer: 延迟绑定(推荐)

五、验证命令

# 查看存储类
kubectl get sc

# 检查PVC状态
kubectl get pvc

# 查看自动创建的PV
kubectl get pv

# 检查存储事件
kubectl describe pvc/web-data-pvc

六、常见Provisioner类型

云平台Provisioner名称
AWS EBSebs.csi.aws.com
GCP PDpd.csi.storage.gke.io
Azure Diskdisk.csi.azure.com
Ceph RBDrbd.csi.ceph.com
NFSnfs.csi.k8s.io

重要提示

  1. 生产环境建议使用WaitForFirstConsumer绑定模式避免调度冲突
  2. 不同存储驱动的参数配置需参考对应文档
  3. 动态卷扩容需同时启用allowVolumeExpansion和文件系统扩展功能

通过以上配置,Kubernetes可自动完成存储资源的生命周期管理,实现按需分配的存储架构。

更多推荐