需要澄清一下概念

  • 误区:单纯通过 StorageClass ​无法自动创建 PV,需要配置 StorageClass ​动态供应器(Provisioner)​​                例:NFS Provisioner。
  • 结论:​不依赖动态供应器时,必须手动创建 PV;若想实现 PVC 直接引用 StorageClass 自动创建 PV,需先部署 NFS Provisioner。

分步说明

1. 动态供应与静态供应的区别
类型是否需要手动创建 PV是否需要 Provisioner适用场景
静态供应NFS 目录固定,PV 数量少
动态供应必须安装 Provisioner按需自动创建 PV

方案一:静态供应(需手动创建 PV)​

即PVC ​必须依赖预先存在的 PV


方案二:动态供应(需安装 NFS Provisioner)​

以下是 ​真正实现 PVC 自动创建 PV 的实例:

1. 部署 NFS Provisioner

使用社区工具:

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=192.168.1.100 \
    --set nfs.path=/data/nfs/dynamic

​社区工具可能失败可以指定阿里云镜像

helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=192.168.1.100 \     # 替换为你的 NFS 服务器 IP
    --set nfs.path=/data/nfs/dynamic \   # 替换为你的 NFS 共享目录
    --set image.repository=registry.cn-hangzhou.aliyuncs.com/google_containers/sig-storage/nfs-subdir-external-provisioner \
    --set image.tag=v4.0.2              # 指定镜像版本
2. 创建 StorageClass(自动生成)​
kubectl get storageclass 
3. 创建 PVC​
# dynamic-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dynamic-nfs-pvc
spec:
  storageClassName: nfs-client  # 与 Provisioner 的 StorageClass 名称一致
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

应用配置

kubectl apply -f dynamic-pvc.yaml
4. 验证自动创建的 PV
kubectl get pvc dynamic-nfs-pvc  # 状态应为 Bound
kubectl get pv                   # 自动生成的 PV,名称类似 pvc-xxxx
5. 挂载 PVC 到 Pod
# pod-with-dynamic-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dynamic-pvc-pod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: nfs-storage
      mountPath: /usr/share/nginx/html
  volumes:
  - name: nfs-storage
    persistentVolumeClaim:
      claimName: dynamic-nfs-pvc

应用配置

kubectl apply -f pod-with-dynamic-pvc.yaml
6. 验证数据持久化

写入数据到容器挂载目录:

kubectl exec -it dynamic-pvc-pod -- touch /usr/share/nginx/html/test.txt

检查 NFS 服务器的 /data/nfs/dynamic 目录,会看到自动创建的子目录,其中包含 test.txt


关键区别说明

配置项静态供应动态供应
PV 创建方式手动预先创建由 Provisioner 自动创建
NFS 目录固定路径动态生成子目录(如 /data/nfs/dynamic/default-pvc-xxxx
适用场景存储路径需严格控制按需分配,避免手动管理 PV

总结一下

  • 若 ​不安装 Provisioner,PVC 直接引用 StorageClass ​无法自动创建 PV,必须手动创建 PV。
  • 若需 ​完全自动化,必须部署 NFS Provisioner 并正确配置 StorageClass

更详细过程请访问: 

​PVC 通过 NFS Provisioner 自动创建 PV 的流程及鉴权,超详细~~~-CSDN博客https://blog.csdn.net/SAJDASD/article/details/146314407?sharetype=blogdetail&sharerId=146314407&sharerefer=PC&sharesource=SAJDASD&spm=1011.2480.3001.8118 

更多推荐