皆さん、こんにちは!本日は、Kubernetes環境、特にオンプレミスやエッジ、開発環境でストレージを扱う際に「必須アイテム」と呼ばれるRancher Local Path Provisionerについて、非常に詳しく見ていきたいと思います。
Kubernetesでストレージ(PV/PVC)を設定するのは、かなり骨の折れる作業です。クラウド(AWS EBS、Azure Disk)であれば数回のボタン操作で解決しますが、ベアメタルやローカルPCでのテストでは、NFSを構築したり、Cephのような巨大なストレージソリューションを導入するのは負担が大きすぎます。
そこで登場した救世主が、まさにLocal Path Provisionerです!🦸♂️

🤔 Rancher Local Path Provisionerとは何ですか?
Local Path Provisionerは、Rancher Labs(現在はSUSE)が開発したオープンソースプロジェクトで、Kubernetesユーザーがローカルストレージ(ノードのディスク)を使用してPersistentVolumeClaim(PVC)リクエストを行う際に、自動的にPersistentVolume(PV)を生成する動的プロビジョニング(Dynamic Provisioning)ツールです。
簡単に言えば、「複雑なネットワークストレージなしに、ノードにあるフォルダを自動的に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ネームスペースが作成され、その中にプロビジョナー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のようなネットワークストレージではないため!)
- データバックアップ:
- ノードが完全に破損すると、データも一緒に失われます。重要なデータの場合は、別途バックアップ戦略や、アプリケーションレベルのレプリケーション(例: DBのReplicaSet)が必須です。
- ディスク容量制限なし:
- 基本的にPVCで2Giを要求しても、実際にはLinuxファイルシステムのフォルダを使用しているため、ハードリミット(容量制限)は適用されません。ディスク全体が満杯になるまで使用できるため、監視が必要です。
🏆 いつ使用するのが良いですか?
- 開発およびテスト環境: 迅速かつ簡単にストレージが必要な場合。
- シングルノードKubernetes: ミニPCなどでホームラボを運用する場合。
- 分散データベース: Cassandra、ElasticSearch、Kafkaのようにアプリ自体にデータ複製機能(Replication)がある場合、ローカルディスクの高速性(I/O)を活用するために使用します。(この場合、ローカルストレージはネットワークストレージよりもはるかに優れたパフォーマンスを発揮します!)⚡️
📝 終わりに
Rancher Local Path Provisionerは、Kubernetesストレージへの参入障壁を画期的に低減してくれるありがたいツールです。「ステートフルな(Stateful)」アプリケーションを気軽にテストしたい場合は、今すぐインストールして使ってみてください!
皆様のKubernetesジャーニーが少しでも軽くなることを願っています。☁️✨
コメントを残す