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-provisioner | PVCの作成を検知してCSIドライバーにボリューム作成を依頼 |
| external-attacher | Podへのボリュームのアタッチ・デタッチを管理 |
| 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ドライバー
関連する規格・RFC
| 規格 | 内容 |
|---|---|
| CSI仕様 v1.x | CNCF管理のCSIインターフェース仕様(GitHub: container-storage-interface/spec) |
| OCI(Open Container Initiative) | コンテナランタイム標準。CSIと組み合わせて使われる |
関連用語
- PersistentVolume・PVC — CSIドライバーが実体を管理するKubernetesのボリューム抽象化
- 分散ストレージ(Ceph・Rook・Longhorn) — CSI経由でKubernetesに接続される分散ストレージ
- Kubernetes — CSIの主要な利用環境
- StorageClass — CSIドライバーとストレージ種別を紐付ける設定