大家好!今天我们将非常详细地探讨 Rancher Local Path Provisioner,它在Kubernetes环境,特别是在本地部署、边缘(Edge)或开发环境中处理存储时,常被称为“必备神器”。
在Kubernetes中配置存储(PV/PVC)是相当令人头疼的事情。在云端(AWS EBS、Azure Disk)只需点击几下按钮即可解决,但在裸金属或本地PC上进行测试时,搭建NFS或部署Ceph这样庞大的存储解决方案会过于繁重。
此时,救星Local Path Provisioner应运而生!🦸♂️

🤔 Rancher Local Path Provisioner 是什么?
Local Path Provisioner 是由 Rancher Labs(现为 SUSE)开发的一个开源项目,它是一个动态配置(Dynamic Provisioning)工具,当Kubernetes用户使用本地存储(节点磁盘)请求PersistentVolumeClaim(PVC)时,它会自动创建PersistentVolume(PV)。
简单来说,你可以把它看作是“一个无需复杂网络存储,就能自动将节点上的文件夹创建为PV的工具”。它可靠且轻量,甚至被内置到K3s等轻量级Kubernetes发行版中。
⚙️ 核心工作原理 (Architecture)
这个工具的工作方式出人意料地简单却强大。
- 创建PVC: 用户通过指定 StorageClass: local-path 来创建 PVC。
- 检测: Provisioner 检测到此请求。
- 等待调度: 根据 VolumeBindingMode: WaitForFirstConsumer 设置,它会等待 Pod 决定调度到哪个节点。(这一点非常重要!🌟)
- 创建目录: 当 Pod 被调度到特定节点后,Provisioner 会在该节点的文件系统(默认值:/opt/local-path-provisioner)内创建一个唯一的文件夹。
- 连接PV: 创建一个指向该文件夹的基于 hostPath 的 PV,并将其与 PVC 绑定。
🚀 安装与使用方法
安装非常简单。只需一行命令即可完成。
1. 安装 (Standard)
Bash
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
执行此命令将创建 local-path-storage 命名空间,并在其中部署 Provisioner Pod 及相关资源(ServiceAccount、ClusterRole 等)。
2. PVC 创建示例
现在,我们来立即请求存储吧?
YAML
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-path-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path # 关键!安装时默认创建的StorageClass名称
resources:
requests:
storage: 2Gi
3. Pod 连接示例
YAML
apiVersion: v1
kind: Pod
metadata:
name: volume-test-pod
spec:
containers:
- name: volume-test
image: nginx
volumeMounts:
- name: data-vol
mountPath: /usr/share/nginx/html
volumes:
- name: data-vol
persistentVolumeClaim:
claimName: local-path-pvc
部署此 Pod 后,您将看到数据存储在相应节点的 /opt/local-path-provisioner/ 路径下。📂
🔧 进阶设置:如何更改路径? (ConfigMap)
默认路径是 /opt/local-path-provisioner。但在实际操作中,您可能希望使用容量更大的其他磁盘(例如:/mnt/data)。此时,您需要修改 ConfigMap。
打开名为 local-path-config 的 ConfigMap,您会看到 config.json 部分。
JSON
{
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/opt/local-path-provisioner"]
},
{
"node":"worker-node-1",
"paths":["/mnt/ssd-data"]
}
]
}
- DEFAULT_PATH…: 这是适用于所有未指定节点的默认路径。
- node “名称”: 您可以为特定节点(worker-node-1)指定不同的路径(例如:/mnt/ssd-data)。
这样设置,即使节点间的存储环境不同,也能灵活应对!👍
⚠️ 注意事项与局限性 (非常重要!)
Local Path Provisioner 并非万能。您必须理解并结合以下特性来使用它。
- 节点依赖性 (Node Affinity):
- 数据存储在特定节点的“本地磁盘”上。如果该节点宕机,数据将无法访问。即使 Pod 迁移到其他节点,数据也不会随之移动。(因为它不是像 NFS 那样的网络存储!)
- 数据备份:
- 如果节点完全损坏,数据也会随之丢失。对于重要数据,必须有单独的备份策略或应用程序级别的复制(例如:数据库的 ReplicaSet)。
- 无磁盘容量限制:
- 默认情况下,即使 PVC 请求 2Gi,但实际上使用的是 Linux 文件系统中的文件夹,因此不会应用硬限制(容量限制)。它可以一直写入直到整个磁盘满,所以需要进行监控。
🏆 何时使用最佳?
- 开发和测试环境: 当需要快速便捷的存储时。
- 单节点 Kubernetes: 在迷你PC等设备上运行家庭实验室时。
- 分布式数据库: 对于 Cassandra、ElasticSearch、Kafka 等应用程序本身具有数据复制功能(Replication)的情况,可利用本地磁盘的快速读写速度(I/O)。(在这种情况下,本地存储的性能通常远优于网络存储!)⚡️
📝 总结
Rancher Local Path Provisioner 是一个非常有用的工具,它显著降低了 Kubernetes 存储的入门门槛。如果您想轻松测试“有状态的(Stateful)”应用程序,现在就安装并使用它吧!
希望您的 Kubernetes 之旅能更加轻松。☁️✨
发表回复