安装nfs-Provisioner,实现动态供应StorageClass、在创建PVC时,自动创建PV。


需要澄清一下概念

  • 误区:单纯通过 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 的流程及鉴权,超详细~~~-优快云博客https://blog.youkuaiyun.com/SAJDASD/article/details/146314407?sharetype=blogdetail&sharerId=146314407&sharerefer=PC&sharesource=SAJDASD&spm=1011.2480.3001.8118 

### 部署 NFS-Subdir-External-Provisioner 实现 Pod PVC 动态扩容 #### 准备工作 为了确保 Kubernetes 环境能够支持通过 NFS 存储类动态创建持久卷声明 (PVC),需要先配置好 NFS 服务器并安装必要的工具。 #### 安装 NFS-Subdir-External-Provisioner 可以通过 Helm 或者 YAML 文件来部署此组件。以下是使用 YAML 方式的具体操作: 1. 下载官方提供的最新版本的 `nfs-subdir-external-provisioner` 资源清单文件。 2. 修改资源配置中的参数以匹配实际环境中使用的 NFS 服务器地址和其他必要选项。 3. 应用修改后的配置到集群中: ```bash kubectl apply -f nfs-subdir-external-provisioner.yaml ``` 这一步骤将启动一个名为 `nfs-subdir-external-provisioner` 的 Deployment 和 ServiceAccount,在命名空间内运行,并监听新的 PersistentVolumeClaim 请求以便为其供应相应的 PersistentVolumes[^1]。 #### 创建自定义 StorageClass 接下来要做的就是定义一个新的存储类别(Storage Class),它指定了当收到新请求应如何处理这些请求以及由谁负责准备物理磁盘空间。这里的关键在于指定正确的 provisioner 字段值为 "example.com/nfs"[^3]。 ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: managed-nfs-storage provisioner: example.com/nfs # or choose another suitable one from the documentation of your chosen provider. parameters: archiveOnDelete: "false" reclaimPolicy: Retain mountOptions: - hard - nolock ``` 上述 YAML 片段展示了如何构建这样一个对象;其中包含了若干可选属性,比如是否希望删除不再被任何 Pods 使用的数据卷(`archiveOnDelete`)、回收策略 (`reclaimPolicy`) 及挂载选项 (`mountOptions`) 等设置。 #### 测试动态供给功能 一旦完成了前面几步的工作之后就可以测试整个流程了——即验证当我们提交了一个带有适当标签的新 PVC 后是否会触发自动化机制从而为我们准备好所需的空间。为此可以编写如下所示的一个简单的 Pod 清单文档来进行尝试: ```yaml apiVersion: v1 kind: Pod metadata: name: nginx- name: nginx-container image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: html-volume volumes: - name: html-volume persistentVolumeClaim: claimName: test-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: managed-nfs-storage ``` 这段代码片段描述了一种情况下的应用实例:我们试图让 Nginx Web Server 将其网页根目录映射至之前所建立的那个特殊类型的 PVC 上面去。如果一切顺利的话,则应该可以在稍作等待后看到对应的 PV 成功绑定到了这个声明之上[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值