📦 Kubernetesストレージの軽量革命: Rancher Local Path Provisionerの徹底解剖

皆さん、こんにちは!本日は、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)

このツールの動作方法は、意外と単純ですが強力です。

  1. PVC作成: ユーザーがStorageClass: local-pathを指定してPVCを作成します。
  2. 検出: Provisionerがこのリクエストを検出します。
  3. スケジューリング待機: VolumeBindingMode: WaitForFirstConsumerの設定により、Podがどのノードに配置されるかが決定されるまで待ちます。(これが非常に重要です!🌟)
  4. ディレクトリ作成: Podが特定のノードにスケジューリングされると、Provisionerはそのノードのファイルシステム(デフォルト値: /opt/local-path-provisioner)内に固有のフォルダを作成します。
  5. 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は万能ではありません。以下の特性を必ず理解して使用する必要があります。

  1. ノード依存性 (Node Affinity):
  2. データは特定のノードの「ローカルディスク」に保存されます。もしそのノードがダウンすると、データにアクセスできなくなります。Podが別のノードに移動しても、データは追従しません。(NFSのようなネットワークストレージではないため!)
  3. データバックアップ:
  4. ノードが完全に破損すると、データも一緒に失われます。重要なデータの場合は、別途バックアップ戦略や、アプリケーションレベルのレプリケーション(例: DBのReplicaSet)が必須です。
  5. ディスク容量制限なし:
  6. 基本的にPVCで2Giを要求しても、実際にはLinuxファイルシステムのフォルダを使用しているため、ハードリミット(容量制限)は適用されません。ディスク全体が満杯になるまで使用できるため、監視が必要です。

🏆 いつ使用するのが良いですか?

  • 開発およびテスト環境: 迅速かつ簡単にストレージが必要な場合。
  • シングルノードKubernetes: ミニPCなどでホームラボを運用する場合。
  • 分散データベース: Cassandra、ElasticSearch、Kafkaのようにアプリ自体にデータ複製機能(Replication)がある場合、ローカルディスクの高速性(I/O)を活用するために使用します。(この場合、ローカルストレージはネットワークストレージよりもはるかに優れたパフォーマンスを発揮します!)⚡️

📝 終わりに

Rancher Local Path Provisionerは、Kubernetesストレージへの参入障壁を画期的に低減してくれるありがたいツールです。「ステートフルな(Stateful)」アプリケーションを気軽にテストしたい場合は、今すぐインストールして使ってみてください!

皆様のKubernetesジャーニーが少しでも軽くなることを願っています。☁️✨



Comments

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です