目录

1. 本地存储路径配置

1. 使用 Local Path Provisioner

2. 使用 OpenEBS LocalPV

2. NFS 存储路径配置

3. 重要注意事项

4. 总结


在 KubeSphere 中设置存储类的默认路径,本质上是通过配置存储类(StorageClass)及其背后的存储供给器(Provisioner)来实现的。这个“默认路径”的具体含义会根据你使用的存储类型(本地存储、NFS 等)有所不同。

1. 本地存储路径配置

如果你希望使用集群节点本身的磁盘空间,并指定一个统一的默认路径,通常会使用 ​​Local Path Provisioner​​ 或 ​​OpenEBS LocalPV​​ 这类供给器。

1. 使用 Local Path Provisioner

Rancher 提供的 Local Path Provisioner 是一个流行的本地存储动态供给方案。修改其默认路径(默认为 /opt/local-path-provisioner)的核心是修改其 ConfigMap。

  • ​部署供给器​​:

    kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
  • ​修改配置​​:编辑 ConfigMap,将路径改为你所需的目录,例如 /app/k8s_data

    kubectl -n local-path-storage edit configmap local-path-config

    在 data.config.json中更新 nodePathMap

    {
      "nodePathMap": [
        {
          "node": "DEFAULT_PATH_FOR_NON_LISTED_NODES",
          "paths": ["/app/k8s_data"]  // 修改为你的自定义路径
        }
      ]
    }
  • ​重启 Pod​​:删除 Provisioner Pod 以加载新配置。

    kubectl -n local-path-storage delete pod -l app=local-path-provisioner
  • ​设为默认存储类​​(可选):

    kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
2. 使用 OpenEBS LocalPV

OpenEBS 的 LocalPV 供给器则通过 StorageClass 的 ​​annotations​​ 来指定默认路径。

以下 StorageClass 示例将数据目录设置为 /data1/openebs/local

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local
  annotations:
    cas.openebs.io/config: |
      - name: StorageType
        value: "hostpath"
      - name: BasePath
        value: "/data1/openebs/local"  # 在此处修改你的默认路径
    openebs.io/cas-type: local
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

2. NFS 存储路径配置

当使用 NFS 作为后端存储时,“默认路径”指的是 ​​NFS 服务器上的共享目录​​。这个路径是在部署 NFS 客户端供给器(如 nfs-subdir-external-provisioner)时定义的。

在部署组的 YAML 文件中,你需要通过环境变量 NFS_PATH和 volumes字段来指定 NFS 服务器的共享目录:

env:
- name: NFS_SERVER
  value: 10.211.55.5 # 你的NFS服务器地址
- name: NFS_PATH
  value: /mnt/k8s/data # 在此处修改NFS服务器上的共享目录路径
volumes:
- name: nfs-client-root
  nfs:
    server: 10.10.15.15 # 与上面保持一致
    path: /mnt/k8s/data # 与上面保持一致

3. 重要注意事项

在进行任何修改之前,请务必牢记以下几点:

  • ​路径权限​​:确保所有工作节点上你​​自定义的本地路径(如 /app/k8s_data)已存在​​,并且容器进程(通常是非 root 用户)对其有​​读写权限​​。对于 NFS 路径,则需确保 NFS 服务器上的目录已正确导出(export)并设置了相应的权限。

  • ​数据迁移​​:​​修改存储类的路径不会自动迁移现有数据​​。如果你希望保留原有 PersistentVolume (PV) 中的数据,需要先​​手动备份旧路径下的数据​​,然后在新的存储类生效后,​​将数据恢复到新的路径或新创建的 PV 中​​。

  • ​节点亲和性​​:本地存储(Local PV)与特定节点绑定。如果使用本地存储,当 Pod 被重新调度到其他节点时,将无法访问原有节点上的数据。这是选择本地存储时必须要考虑的特性。

  • ​动态供给的便利性​​:使用 StorageClass 进行动态供给可以大幅简化管理流程。你无需为每个应用手动创建 PV,系统会在用户创建 PersistentVolumeClaim (PVC) 时​​自动按需创建 PV​​并绑定。

  • ​规划存储​​:根据你对性能、可用性、扩展性和数据共享的需求,​​谨慎选择存储类型​​(本地、NFS、云存储等)。

  • ​测试先行​​:在对生产环境进行操作前,​​务必在测试环境中验证整个流程​​,包括路径修改、存储类配置、PVC 创建和数据备份恢复。

  • ​使用声明式管理​​:尽量使用 YAML 文件来定义和管理你的 StorageClass、PV、PVC 等资源,这便于版本控制和重现部署过程。

4. 总结

在 KubeSphere 中设置存储类的默认路径,​​核心在于配置存储供给器​​:

  • 对于 ​​本地存储​​(如 Local Path Provisioner),通过​​修改其 ConfigMap​​ 中的 nodePathMap来指定节点上的默认数据目录。

  • 对于 ​​OpenEBS LocalPV​​,通过在 ​​StorageClass 的 annotation (cas.openebs.io/config)​​ 中设定 BasePath来指定。

  • 对于 ​​NFS 存储​​,通过在部署 ​​NFS 客户端供给器​​时设定 ​NFS_PATH环境变量和 volume​​ 来指定 NFS 服务器上的共享目录。

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐