kubesphere(k8s)如何设置存储类的默认路径
目录
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: localannotations:cas.openebs.io/config: |- name: StorageTypevalue: "hostpath"- name: BasePathvalue: "/data1/openebs/local" # 在此处修改你的默认路径openebs.io/cas-type: localstorageclass.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_SERVERvalue: 10.211.55.5 # 你的NFS服务器地址
- name: NFS_PATHvalue: /mnt/k8s/data # 在此处修改NFS服务器上的共享目录路径
volumes:
- name: nfs-client-rootnfs: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 服务器上的共享目录。