在 KubeSphere 中配置 Local Path Provisioner 指向自定义目录 /app/k8s_data

目录

🌟 在 KubeSphere 中配置 Local Path Provisioner 指向自定义目录 /app/k8s_data

📦 一、准备环境

🚀 二、安装 Local Path Provisioner

🛠 三、修改挂载路径到 /app/k8s_data

1️⃣ 编辑 ConfigMap:

2️⃣ 重启 Provisioner Pod 使其生效:

✅ 四、验证效果

1️⃣ 创建 PVC:

2️⃣ 查看 PV 挂载路径:

3️⃣ 检查宿主机路径是否同步:

📌 五、设置为默认 StorageClass(可选)

🧩 总结


🌟 在 KubeSphere 中配置 Local Path Provisioner 指向自定义目录 /app/k8s_data

在 Kubernetes 或 KubeSphere 集群中,配置一个轻量级的本地存储类(StorageClass)对于测试环境或小规模持久化数据十分实用。本文将介绍如何使用 Rancher 提供的 Local Path Provisioner,并将实际数据目录指定到本地路径 /app/k8s_data,实现自动化本地卷(Local PV)动态供给。


📦 一、准备环境

本文假设你已经部署好 KubeSphere 集群,具备 kubectl 权限。

确保所有节点都有 /app/k8s_data 目录,并授予合适权限:

sudo mkdir -p /app/k8s_data
sudo chmod 777 /app/k8s_data

🚀 二、安装 Local Path Provisioner

直接执行官方提供的部署命令:

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml

该命令会创建:

  • 一个命名空间:local-path-storage

  • 一个 Deployment:local-path-provisioner

  • 一个默认 StorageClass:local-path

但默认挂载路径是 /opt/local-path-provisioner,接下来我们将其改为 /app/k8s_data


🛠 三、修改挂载路径到 /app/k8s_data

1️⃣ 编辑 ConfigMap:

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

找到 config.json 内容,将其修改为:

{
  "nodePathMap": [
    {
      "node": "DEFAULT_PATH_FOR_NON_LISTED_NODES",
      "paths": ["/app/k8s_data"]
    }
  ]
}

保存退出。

2️⃣ 重启 Provisioner Pod 使其生效:

kubectl -n local-path-storage delete pod -l app=local-path-provisioner

Kubernetes 会自动拉起新 Pod,并按新的路径配置工作。


✅ 四、验证效果

1️⃣ 创建 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-local-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  storageClassName: local-path

应用:

kubectl apply -f test-pvc.yaml

2️⃣ 查看 PV 挂载路径:

kubectl get pv -o wide
kubectl describe pv <自动生成的-pv-name>

输出应包含:

Type:       HostPath (bare host directory volume)
Path:       /app/k8s_data/pvc-xxxxx-xxxxx

3️⃣ 检查宿主机路径是否同步:

登录对应节点:

ls /app/k8s_data

如果有以 pvc- 开头的子目录,说明 PVC 创建成功并正确挂载到了本地指定目录。


📌 五、设置为默认 StorageClass(可选)

如果你希望将该存储类作为默认使用:

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

🧩 总结

通过 Rancher 提供的 Local Path Provisioner,我们可以轻松为 KubeSphere 添加一个支持自动动态供给的本地存储类。通过修改 ConfigMap 将默认路径改为 /app/k8s_data,就可以实现自定义的数据落盘位置,便于统一管理和备份。


📁 参考资料

如需部署示例 YAML、Pod 测试脚本,欢迎留言获取。

<think>好的,用户问的是Kubernetes是否可以使用主机目录来设置默认的StorageClass。首先,我得回忆一下StorageClass的作用,它主要是用来动态分配持久卷的,而默认的StorageClass则是在用户没有指定的时候自动使用。 用户提到的主机目录,也就是HostPath,通常用于单节点测试,因为它直接挂载节点上的目录到Pod里,但多节点环境下会有问题,因为其他节点可能没有相同的目录。不过,用户的需求可能是想用HostPath作为默认存储,可能是在测试环境或者单节点集群中使用。 接下来,我需要确认StorageClass是否支持HostPath。实际上,默认的StorageClass通常是由云提供商提供的,比如AWS的gp2或者GKE的standard。而HostPath一般不会作为StorageClass,因为StorageClass通常关联的是动态卷供应,而HostPath是静态的,需要手动创建PV。不过,Kubernetes有个local卷插件,可以用于本地存储,但配置起来可能需要更多步骤。 然后,想到可能需要使用第三方插件,比如sig-storage-lib-external-provisioner,来创建一个基于HostPath的StorageClass。这样就能动态创建PV,尽管实际数据还是存在节点的主机目录里。不过,这个方法可能不适合生产环境,只适合测试。 还要注意,默认的StorageClass需要设置annotation:storageclass.kubernetes.io/is-default-class: "true"。如果有多个默认,会导致问题,所以需要确保只有一个。 总结步骤应该是:创建使用HostPath的StorageClass,并设置为默认。但需要确认是否可行。可能需要部署一个自定义Provisioner,比如使用ranker的local-path-provisioner,或者自己写一个。比如,Minikube可能已经有一个这样的默认StorageClass,用的是HostPath。 不过,原生的Kubernetes可能不支持直接使用HostPath作为StorageClass,所以需要用户自己配置。这时候,可能需要编写一个StorageClass的YAML文件,指定Provisioner为某个自定义的,然后创建。 然后,用户可能需要应用这个YAML,并设置为默认。这样当用户请求PVC时,会自动创建对应的PV,指向主机目录。 最后,需要提醒用户,这种方法只适合测试,生产环境需要更可靠的存储方案,比如NFS、云存储等。</think>Kubernetes 中通过主机目录(hostPath)设置默认 StorageClass 的实现需要结合以下技术要点分步说明: 1. **StorageClass 与 hostPath 的关系** - 原生 Kubernetes 不直接支持用 hostPath 创建 StorageClass,因为: - StorageClass 用于动态存储供应(Dynamic Provisioning) - hostPath 属于静态存储配置(Static Provisioning) 2. **实现方案** 可通过部署第三方 provisioner 实现动态 hostPath 供应: ```yaml # 步骤1:创建自定义 StorageClass apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hostpath-default annotations: storageclass.kubernetes.io/is-default-class: "true" # 设为默认 provisioner: example.com/hostpath # 自定义provisioner名称 reclaimPolicy: Delete ``` 3. **部署本地卷provisioner**(以 sig-storage 实现为例) ```yaml # 步骤2:部署hostPath provisioner apiVersion: apps/v1 kind: Deployment metadata: name: hostpath-provisioner spec: replicas: 1 selector: matchLabels: app: hostpath-provisioner template: metadata: labels: app: hostpath-provisioner spec: containers: - name: hostpath-provisioner image: sig-storage/hostpathplugin:v1.7.0 volumeMounts: - name: pv-volume mountPath: /mnt/hostpath volumes: - name: pv-volume hostPath: path: /data/k8s-hostpath # 主机目录路径 type: DirectoryOrCreate ``` 4. **RBAC配置**(必需权限) ```yaml # 步骤3:添加RBAC权限 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: hostpath-provisioner rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: hostpath-provisioner subjects: - kind: ServiceAccount name: default namespace: default roleRef: kind: ClusterRole name: hostpath-provisioner apiGroup: rbac.authorization.k8s.io ``` 5. **验证配置** ```bash # 检查默认StorageClass kubectl get storageclass # 创建测试PVC cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi EOF # 确认PV自动创建 kubectl get pv,pvc ``` **注意事项**: 1. 仅适用于单节点/开发环境 2. 多节点集群需配合节点亲和性规则 3. 数据持久性风险: - Pod 必须调度到同一节点 - 节点故障会导致数据丢失 4. 性能影响: - 主机目录I/O性能受本地磁盘限制 - 并发写入可能出现竞争条件 **生产环境替代方案建议**: ```yaml # 推荐使用本地卷插件(需SSD/NVMe) apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer ``` 该配置通过延迟绑定(WaitForFirstConsumer)确保存储卷与Pod调度到同一节点,比直接使用hostPath更安全可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值