ストレージ

CSI(Container Storage Interface) しーえすあい(こんてなすとれーじいんたーふぇーす)

CSIKubernetesストレージドライバーPersistentVolumeコンテナストレージプラグイン
CSI(Container Storage Interface)について教えて

簡単に言うとこんな感じ!

KubernetesなどのコンテナオーケストレーターがAWSやAzureなど様々なストレージを統一した方法で扱えるようにするための「共通の差し込み口(インターフェース)」だよ。プラグインを入れるだけで色々なストレージが使えるようになる仕組みなんだ!


CSI(Container Storage Interface)とは

CSI(Container Storage Interface)は、コンテナオーケストレーター(主にKubernetes)と外部ストレージシステムを接続するための標準インターフェース仕様です。ストレージベンダーはCSI仕様に沿ったプラグイン(ドライバー)を開発することで、Kubernetesから自社ストレージを利用できるようにできます。

CSI導入以前は、各ストレージのドライバーがKubernetesのコア(in-tree)に組み込まれていました。ストレージベンダーがKubernetesのリリースサイクルに縛られ、バグ修正やアップデートが遅れるという問題がありました。CSIはこの問題を解決し、ストレージドライバーをKubernetesのコア外(out-of-tree)に切り出すことを可能にしました。

KubernetesではPersistentVolume(PV)やPersistentVolumeClaim(PVC)という仕組みでストレージを抽象化していますが、その裏でCSIドライバーが実際のストレージ操作(プロビジョニング・マウント・アンマウント)を担当しています。


CSIの仕組み

コンポーネント役割
CSIドライバー(プラグイン)ストレージベンダーが提供。実際のストレージ操作を実行
external-provisionerPVCの作成を検知してCSIドライバーにボリューム作成を依頼
external-attacherPodへのボリュームのアタッチ・デタッチを管理
node-driver-registrarノードにCSIドライバーを登録する
StorageClassストレージの種類(SSD/HDD等)とCSIドライバーを紐付ける定義

CSIドライバーの主な操作

  • CreateVolume / DeleteVolume — ボリュームの作成・削除
  • ControllerPublishVolume — ノードへのボリュームのアタッチ
  • NodeStageVolume / NodePublishVolume — ノード上でのマウント処理
  • CreateSnapshot / DeleteSnapshotスナップショット管理

歴史と背景

  • 2017年 — KubernetesコミュニティでCSI仕様の策定が開始
  • 2018年 — CSI仕様 v1.0リリース。Kubernetes 1.13でGAに
  • 2019年 — 主要クラウドプロバイダー(AWS EBS CSI、Azure Disk CSI等)がCSIドライバーをリリース
  • 2020年 — Kubernetesの既存in-treeドライバーをCSIへ移行する作業が本格化
  • 2022年 — Kubernetes 1.25でin-treeドライバーの多くが非推奨に
  • 現在 — EKS・AKS・GKEでは公式CSIドライバーが標準となっている

主要なCSIドライバー

Kubernetes CSIエコシステム Kubernetes CSI インターフェース AWS EBS CSI Azure Disk CSI GCE PD CSI Ceph / Rook CSI ストレージベンダーがCSI仕様に従いドライバーを提供

関連する規格・RFC

規格内容
CSI仕様 v1.xCNCF管理のCSIインターフェース仕様(GitHub: container-storage-interface/spec)
OCI(Open Container Initiative)コンテナランタイム標準。CSIと組み合わせて使われる

関連用語