具体实现
2026/7/23大约 2 分钟
1. 技术背景与选型 (Architecture Decision)
-
方案:Rancher Local Path Provisioner
-
特性:动态供给 (Dynamic Provisioning)。无需手动预建 PV,由 Provisioner 自动根据 PVC 需求在 Node 节点创建物理目录。
-
对比优势:
-
性能:本地磁盘直接 I/O,无网络开销,适合 OpenClaw 的高频日志读写。
-
资源消耗:极低(仅需一个轻量级 Pod),对比 Ceph/GlusterFS 节省了约 4GB+ 集群内存。
2. 核心配置清单 (Configuration Artefacts)
A. 存储类定义 (StorageClass)
这是存储的“大脑”,决定了硬盘怎么分。
# 查看当前 StorageClass 配置
kubectl get sc local-path -o yaml
重点笔记:
reclaimPolicy: Delete:当删除 PVC 时,物理目录自动清理,防止 node-2 硬盘被日志撑爆。volumeBindingMode: WaitForFirstConsumer:延迟绑定。确保存储目录只创建在 Pod 真正被调度到的那个节点上(避免跨节点挂载失败)。
B. 物理路径映射 (Physical Mapping)
- 默认根路径:
/opt/local-path-provisioner - 子目录逻辑:每个 PVC 会对应一个名为
pvc-<uuid>_<namespace>_<pvc-name>的文件夹。
3. 具体操作流程 (Step-by-Step)
第一步:部署存储驱动 (已完成)
# 部署驱动 Pod 和相关权限 (RBAC)
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
# 设置为默认存储类 (可选,方便后续直接使用)
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
第二步:应用集成 (以 Jenkins 为例)
在部署 Jenkins 时,通过参数将逻辑链路打通:
helm install my-jenkins jenkins/jenkins -n devops \
--set persistence.storageClass=local-path \ # 指定使用这个管家
--set persistence.size=10Gi # 申请 10Gi 空间
第三步:验证存储链路
# 1. 查看申请状态 (STATUS 必须为 Bound)
kubectl get pvc -n devops
# 2. 追踪物理文件 (在 node-2 上执行)
ls -R /opt/local-path-provisioner/
4. 生产级运维建议 (Ops Insights for OpenClaw)
-
节点亲和性:由于是本地存储,Pod 如果漂移到没有数据的节点会启动失败。因此,重要的 AIOps 组件建议配合
nodeSelector锁定在 node-2。 -
容量监控:
local-path不会自动限制物理文件夹的大小(哪怕 PVC 写 10G,物理磁盘有 100G 也能写满)。 -
AIOps 补丁思路:后续需编写 Python 脚本监控
/opt/local-path-provisioner的目录大小并触发告警。
