HPE Blog, Japan
1748084 メンバー
5221 オンライン
108758 解決策
新規ポスト
Yoji_Inoue

コンテナストレージ 応用編3 -KubernetesとCSI-

GettyImages-200516654-001_800_0_72_RGB.jpg近年のコンテナの普及には目覚ましいものがあります。まだまだと思っているうちに臨界点を超えて一気に普及してきそうな気配を感じます。さて実際普及するとなるとどうしても「標準仕様」が必要になってきます。例えばネットワークの世界ではCNI(Container Network Interface)そしてストレージの世界でもCSI(Container Storage Interface)という規格があります。今回HPEはこのCSIドライバー(ベータ版)をリリースしましたのでこのブログで紹介したいと思います。

尚、本記事はHPEの同僚であるMichael Mattssonが記載したブログをベースにしています。

 

CSI(Container Storage Interface)とは

CSI(Container Storage Interface)とは、Kubernetes, Mesos, Docker, Cloud Foundry などのコンテナオーケストレーションシステム(Container Orchestration Systems:以降CO)とストレージ間のインターフェースの標準仕様です。2018年3月にアルファ版(v0.1.0)がリリースされてからわずか8か月後の同年11月に正式リリース(GA:GeneralAvailabitiy :v1.0)されました。

Kubernetes Releases

Kubernetes CSI Spec Compatibility Status
v1.9 v0.1.0 Alpha
v1.10 v0.2.0 Beta
v1.11 v0.3.0 Beta
v1.13 v0.3.0, v1.0.0 GA

https://kubernetes-csi.github.io/docs/introduction.html#kubernetes-releases

既存のストレージプラグイン(FlexVolumeプラグイン)の場合各ストレージベンダーは異なるCOに対して複数のボリュームドライバーを作成してサポートする必要がありました。また場合によってはCO側のコード変更が必要なケースもありえます。一方COのリリースサイクルは短く、その都度コードの変更・テストが必要なため、非常に生産性が悪いという課題がありましたが、今回のCSIの正式リリースにより、CO側に依存せず、独立してストレージ側の機能追加や修正を行えるようになります。

 

HPEのCSIドライバー

全体構成は以下のようなフレームワークとなっており、CSIコンポーネントはKubernetesクラスター内の拡張機能として機能します。CSIでは、Kubernetes(CO)側が、以下の5つのサイドカーコンテナを提供します。

  • Node driver register: CSI driverをkubeletに登録します
  • CSI Provisoner: PersistentVolumeClaim(PVC)オブジェクトを監視し、CSIエンドポイントに対してボリューム作成や削除の命令を実行します
  • CSI Attacher: VolumeAttachmentオブジェクトを監視し、CSIエンドポイントに対してボリュームをノードにアタッチする命令を実行します
  • CSI Resizer:PersistentVolumeClaims オブジェクトを監視し、CSIエンドポイントに対してControllerExpandVolume命令を実行します
  • CSI Snapshotter:VolumeSnapshot とVolumeSnapshotContent CRD オブジェクトを監視し、CSIエンドポイントに対してボリュームのスナップショットを作成する命令を実行します

 

このような構成をとることにより、各ベンダーはKubernetesとは独立してCSIドライバーの仕様を個別に変更することが可能になります。CSIの拡張性は、Custom Resource Definitions(CRD:Kubernetes APIを拡張して独自のリソースを定義するもの)で実現します。CRDではリソースを自分で定義し実装することが可能となっているので、例えばエンドユーザー向けにベンダー固有の機能を導入するために独自のCRDを作成することも可能です。

CSIには多くの利点があります。HPEではストレージ機能をユーザーが簡単に使えるように、拡張PVC(PersistentVolumeClaim)アノテーションを使用します。CSIでは、多くのデータ管理機能がKubernetesのAPIオブジェクトになります。例えばストレージシステムのスナップショットがスナップショットAPIオブジェクトとして機能します。

slides-csi-hpedev-market-1566866211263.png

以下の表は、現時点でのCSIドライバーでサポートされる機能とバージョンの一覧です。一例として、ボリュームスナップショット機能はK8s 1.12から組み込まれていますが、現在アルファでGAまでにはもう少し時間がかかります。

slides-csi-hpedev-feat-1566866257740.png

HPE CSIドライバーの構成

HPEのCSIドライバー実装はサイドカー方式を採用していて、CSIコントローラードライバーとCSIノードドライバーのほかに、ストレージ製品個別のContainer Storage Provider (CSP) を実装します。このCSPはRESTful APIに対応しているため、CSIやKubernetesの知識がさほどなくてもストレージシステムの機能が使えます。具体的にはボリュームデバイスのアタッチ・デタッチ、プロビジョン、マウント、ワークフローアロケーション等、一般的な機能が利用できます。 

slides-csi-hpedev-1567184427188.png

 

HPE Nimble Storageパブリックベータで何ができる?

最初のベータ版ドライバーは、HPE Nimble Storage用のCSPが含まれており、他のHPEプラットフォーム用CSPは開発中です。CSPの開発は先行して行われており、既存のFlexVolumeプラグインと同等の機能と、さらにいくつかの追加機能があります。現在HPE CSIドライバーはCSI v1.1.0機能セットをサポートしています。具体的にはダイナミックプロビジョニング、Rawブロックボリューム、ボリュームスナップショット、ボリューム拡張とボリュームクローニング、およびインラインエフェメラルボリュームです。

また、このリリースを機にデプロイメントの効率化を考えて、ヘルム(Helm)チャートを使用して展開できるようにしています。Helmは、Kubernetes上にソフトウェアスタックを構築する上で便利なパッケージ管理ツールで広く利用されています。

 

関連ブログ

コンテナストレージ 応用編1

コンテナストレージ 応用編2 -3つの原則と4つの使い方-

 

関連リンク

HPE CSI Driver Github
https://github.com/hpe-storage/csi-driver

CSI Volume Plugins in Kubernetes Design Doc
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/container-storage-interface.md

 

参考(英文)
https://developer.hpe.com/blog/n0J8kpk1DJf4y7xD2D4X/introducing-a-multi-vendor-csi-driver-for-kubernetes

 

0 感謝
作者について

Yoji_Inoue

Technology Evangelist, Composable Infrastructure, Software Defined Data Center and Cloud Technology Architect, Hyper Converged, Storage, Memory centric-Data driven computing, Specialist