minikube 多节点集群配置 Local Path Provisioner 本地存储:storage-provisioner-rancher addon 实战指南

发布时间:2026/9/20 1:55:29
minikube 多节点集群配置 Local Path Provisioner 本地存储:storage-provisioner-rancher addon 实战指南 云原生容器编排CLI开发工具【免费下载链接】minikubeRun Kubernetes locally项目地址https://gitcode.com/gh_mirrors/mi/minikube点击查看免费下载本教程基于 minikube 官方文档 local_path_provisioner.md完整讲解如何在多节点 minikube 集群中启用storage-provisioner-rancheraddon借助 Rancher 的 Local Path Provisioner 将每个节点的本地磁盘空间动态供应为 Kubernetes 持久化存储。读完本文你将掌握从创建双节点集群、启用 addon、验证默认 StorageClass到通过 PVC 与 Pod 实际写入并核验节点本地文件的全过程并理解 addon 底层清单与默认 StorageClass 的源码级实现原理。Local Path Provisioner 是什么Local Path Provisioner 是一个 Kubernetes 动态存储供应器dynamic volume provisioner它允许集群用户直接利用每个节点上的本地存储路径。与传统依赖网络存储如 NFS、云盘的方案不同它通过在节点本地目录上创建子目录来为 PersistentVolumeClaimPVC动态生成 PersistentVolumePV具有以下特点按节点本地供应数据落盘在调度 Pod 所在节点的本地文件系统上读写延迟低支持多节点可以在多节点集群中为不同节点上的工作负载分别供应本地存储教程正是基于两节点集群演示零额外存储依赖不需要额外的网络存储设备适合开发、测试及对数据持久性要求不高的场景。在 minikube 中该能力以storage-provisioner-rancheraddon 的形式提供其维护方标注为 3rd party (Rancher)见 pkg/minikube/assets/addons.go。前置条件minikube 版本高于v1.27.0该版本起才内置storage-provisioner-rancheraddon已安装kubectl命令行工具本机拥有可用的容器运行时或虚拟化驱动能够启动多节点集群。实战在两节点集群上使用 Local Path Provisioner第一步创建双节点集群使用-n参数指定节点数量创建一个包含 1 个控制平面节点minikube与 1 个工作节点minikube-m02的两节点集群$ minikube start -n 2第二步启用 storage-provisioner-rancher addon$ minikube addons enable storage-provisioner-rancher启用成功后addon 会在local-path-storage命名空间中创建一个名为local-path-provisioner的 Deployment。可通过以下命令确认 Pod 已就绪$ kubectl get pods -n local-path-storage NAME READY STATUS RESTARTS AGE local-path-provisioner-7f58b4649-hcbk9 1/1 Running 0 38s第三步确认 local-path 成为默认 StorageClassstorage-provisioner-rancheraddon 启用的同时会把名为local-path的 StorageClass 标记为集群默认存储类。查看集群中的 StorageClass 列表$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 107s standard k8s.io/minikube-hostpath Delete Immediate false 4m27s注意两个关键差异StorageClassProvisioner说明local-path(default)rancher.io/local-path本地路径动态供应WaitForFirstConsumer延迟绑定standardk8s.io/minikube-hostpathminikube 自带 hostPath 供应器Immediate立即绑定第四步创建 PVC 与 Pod 写入文件下面的 YAML 同时声明了一个 64Mi 的 PVC以及一个通过nodeSelector被调度到第二个节点minikube-m02上的 Pod。Pod 内的 busybox 容器会把内容写入挂载到/test目录的 PVC 卷中--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 64Mi --- apiVersion: v1 kind: Pod metadata: name: test-local-path spec: restartPolicy: OnFailure nodeSelector: kubernetes.io/hostname: minikube-m02 containers: - name: busybox image: busybox:stable command: [sh, -c, echo local-path-provisioner /test/file1] volumeMounts: - name: data mountPath: /test volumes: - name: data persistentVolumeClaim: claimName: test-pvc将其保存为local-path-test.yaml后执行$ kubectl apply -f local-path-test.yaml第五步验证 PVC 绑定与 Pod 运行状态PVC 应很快进入Bound状态卷名由 local-path-provisioner 自动生成$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-pvc Bound pvc-f07e253b-fea7-433a-b0ac-1bcea3f77076 64Mi RWO local-path 5m19s由于 Pod 设置了restartPolicy: OnFailure且命令执行完成后即退出Pod 会显示为Completed并通过-o wide可以看到它被调度到了minikube-m02节点$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-local-path 0/1 Completed 0 5m19s 10.244.1.5 minikube-m02 none none第六步在节点本地验证文件落盘Local Path Provisioner 默认把卷数据存放在节点的/opt/local-path-provisioner目录下。通过minikube ssh登录第二个节点直接读取写入的文件内容$ minikube ssh -n minikube-m02 cat /opt/local-path-provisioner/pvc-f07e253b-fea7-433a-b0ac-1bcea3f77076_default_test-pvc/file1 local-path-provisioner输出即 Pod 写入的内容证明本地路径存储链路PVC → PV → 节点目录已完整打通。源码视角addon 到底部署了什么启用 addon 的本质是把模板清单 storage-provisioner-rancher.yaml.tmpl 渲染后应用到集群。该清单由六部分组成Namespacelocal-path-storage承载 provisioner 相关资源ServiceAccountlocal-path-provisioner-service-account运行 provisioner 的账号ClusterRole / ClusterRoleBindinglocal-path-provisioner-role授予对nodes、persistentvolumeclaims、configmaps的只读权限对endpoints、persistentvolumes、pods的全部权限以及对events的创建/打补丁权限Deploymentlocal-path-provisioner以--debug start --config /etc/config/config.json参数启动控制器并挂载配置 ConfigMapStorageClasslocal-pathprovisioner: rancher.io/local-pathvolumeBindingMode: WaitForFirstConsumerreclaimPolicy: DeleteConfigMaplocal-path-config包含 provisioner 的运行时配置。ConfigMap 中的核心配置解读ConfigMap 中config.json的nodePathMap定义了路径映射规则{ nodePathMap:[ { node:DEFAULT_PATH_FOR_NON_LISTED_NODES, paths:[/opt/local-path-provisioner] } ] }DEFAULT_PATH_FOR_NON_LISTED_NODES表示该规则适用于所有未在映射中单独列出的节点即所有节点都使用/opt/local-path-provisioner作为卷的根目录你也可以按节点名如minikube-m02单独指定不同的本地路径。此外还定义了三个生命周期脚本setup创建卷目录mkdir -m 0777 -p $VOL_DIR默认权限 0777teardown删除卷目录rm -rf $VOL_DIR对应 StorageClass 的reclaimPolicy: DeletehelperPod.yamlprovisioner 执行 setup/teardown 时启动的辅助 Pod 模板。为什么 local-path 会自动成为默认 StorageClass这与 minikube 源码中的 addon 回调机制有关。在 pkg/addons/config.go 中storage-provisioner-rancher注册了专门的回调函数enableOrDisableStorageClasses而非普通的EnableOrDisableAddon。该回调实现在 pkg/addons/addons_storage_classes.go启用 addon 时先应用清单再调用storageclass.SetDefaultStorageClass把local-path标记为默认类禁用 addon 时先通过DisableDefaultStorageClass取消默认标记再卸载清单。底层实现见 pkg/minikube/storageclass/storageclass.goSetDefaultStorageClass会遍历集群中所有 StorageClass只给指定名称的类设置storageclass.kubernetes.io/is-default-class: true注解其余类统一标记为false从而保证同一时刻只有一个默认 StorageClass。这就是kubectl get sc中local-path (default)的来源。addon 的默认状态与镜像从 pkg/minikube/assets/addons.go 可以看到该 addon 的定义默认关闭NewAddon的布尔参数为false需要用户显式minikube addons enableprovisioner 镜像固定为rancher/local-path-provisioner:v0.0.22带 sha256 摘要校验helper Pod 使用busybox:stable默认从docker.io拉取支持通过--image-repository等参数覆盖镜像仓库与镜像地址模板中使用{{.CustomRegistries.LocalPathProvisioner | default ...}}语法解析。集成测试如何验证该功能仓库的集成测试 test/integration/addons_test.go 中的validateLocalPathAddon完整复刻了本教程的验证链路启用 addon 后应用测试清单 pvc.yaml 与 pod.yamlPod 通过 labelrun: test-local-path标识无需 nodeSelector由调度器自行选择节点等待 Pod 运行完成后通过minikube ssh读取/opt/local-path-provisioner/volume_default_test-pvc/file1断言内容为local-path-provisioner。测试同时排除了none驱动见 tests.en.md 对validateLocalPathAddon的说明。清理与注意事项禁用 addon执行minikube addons disable storage-provisioner-rancherlocal-path将失去默认标记并被卸载数据回收local-pathStorageClass 的reclaimPolicy为Delete删除 PVC 时其对应的节点本地目录会被teardown脚本清理数据位置卷数据位于节点的/opt/local-path-provisioner目录删除 minikube 集群前请确认是否有需要保留的数据适用场景本地路径存储的数据与节点强绑定Pod 重建后若被调度到其他节点PVC 可能无法绑定到原卷因此该方案更适合开发测试或单节点有状态服务生产环境请结合业务对数据分布的要求评估。相关文件速查官方教程site/content/en/docs/tutorials/local_path_provisioner.mdaddon 清单模板deploy/addons/storage-provisioner-rancher/storage-provisioner-rancher.yaml.tmpladdon 注册与镜像配置pkg/minikube/assets/addons.go默认 StorageClass 回调pkg/addons/addons_storage_classes.goStorageClass 注解实现pkg/minikube/storageclass/storageclass.go集成测试test/integration/addons_test.go 与 testdata 清单赞分享云原生容器编排CLI开发工具【免费下载链接】minikubeRun Kubernetes locally项目地址https://gitcode.com/gh_mirrors/mi/minikube点击查看免费下载相关推荐Rancher Local Path Provisioner 共享存储示例解析Rancher Local Path Provisioner 共享存储示例解析 概述 Rancher Local Path Provisioner 是一个轻量级CANN矩阵乘全归约RMS融合算子aclnnInplaceMatmulAllReduceAddRmsNorm 须知该接口后续版本会废弃请使用aclnnMatmulAllReduce和acln算子库人工智能深度学习AscendCANN/ops-nn ForeachLog1p算子文档ForeachLog1p 产品支持情况 |产品 | 是否支持 | |: |: :| | term Ascend 950PR/Ascend 950DT/ter人工智能算子库深度学习CANNAscend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询