はじめに懺悔
KubernetesクラスタでPVの基盤となる分散ストレージ機能を提供するためにRook Cephを導入した。
中身を詳しく把握してなくても少しいじれば良い感じに動いてたのでそのまま使ってたが、ぼちぼちちゃんと向き合う必要が出てきたので調べた結果をここに書き残す。
Cephとは
まずCephから説明した方がスムーズなのでこちらから説明する。
Ceph delivers object, block, and file storage in one unified system.
公式ドキュメントに記載の通り、Cephは
- オブジェクトストレージ
- ブロックストレージ
- ファイルストレージ
これらを提供する統合システムである。
Cephを導入すると必要に応じて上記3種を使い分けられる。
また、CephはRADOS(Reliable Autonomic Distributed Object Storage)という機能に基づきストレージクラスタを提供する。
つまり、複数のノードでクラスタを構成し、データはクラスタを構成する複数のノードに複製する形となる。
Cephのコンポーネント
Cephは複数のコンポーネントからなる。
- Ceph Monitor
- クラスターの状態とそのマップを保持する
- 最低1台必要だが、高可用性を保持するためにはクラスタに3台以上存在する必要がある
- Ceph OSD Daemon
- 論理ディスクとやり取りする
(ディスクと紐づき実際にデータの複製や書き込みを行う、特にクリティカルなコンポーネントという理解) - 自身と他のOSDの状態をチェックしMonitorに報告する
- Cephではデータの複製数が設定できるが、その数以上の台数がクラスタに必要となる
- 高可用性を保持するためには3台以上になるように
- 論理ディスクとやり取りする
- Ceph Manager
- クラスタの状態とメトリクスを追跡する
- 最低1台必要だが、高可用性を保持するためにはクラスタに2台以上存在する必要がある
- Ceph Metadata Server
- ファイルシステムのメタデータを保持する
- ファイルストレージ機能(Ceph File System)を使う場合は必須となる
Rookとは
いよいよRookである。
RookはざっくりCephをK8s上に展開するためのもの。
そのためのコンポーネントとしてOperatorを提供する。
アーキテクチャ
青い層がOperator、赤い層がCephコンポーネント。
間のオレンジの層がCSIプラグインとプロビジョナー。
CSI(Container Storage Interface)とはコンテナオーケストレーションシステム(K8sとか)とストレージプロバイダー(Ceph)を接続するための標準インタフェースである。
雑にまとめ
Cephが分散ストレージ機能とクラスタを提供する。
(実際使ってる体感だが、必要な知識としてこっちのウェイトが現状大きい)
RookはCephをK8s上に展開、管理するためのツール。