ファイル、ブロック、オブジェクト、サービス2018/03時点の考察
コンテナでのデータ永続化について考えることがおおく、いまいちピンと来ないという状況なので自分の頭の中を整理する意味も含めて文書化してみる。
自分はこう考えているという内容なので、ここが違うという意見大歓迎です。
それとこの内容は2018/3時点のもの、かつ特に結論があるものではないです。
データ永続化の定義
データの永続化というキーワードで指すものは以下4つに分類する。
- データベースなどのデータファイル、ログファイル
- 各サーバのログファイル
- 設定ファイル (ConfigMap, secret使う)
- 共有ファイル(ウェブコンテンツなど)
ログファイルについては fluentd などつかって何処かに集約すればいいと思う。
アプリケーションによって異なるが大きく分けて2つになると考えられる。
オーケストレーション・スケジューラーはk8sをベースで考えると以下の通り。
既存のアプリケーションをコンテナ化
- NFS: マルチライトをクライアントからしたい場合
- ブロック(iSCSI): ブロックストレージがほしいケース、ライトは1箇所から、リードは複数
新規でクラウドネイティブな設計で作る場合
- オブジェクトストレージ
- データベースをコンテナ化するメリットもあるが、同等のデータ永続化ではマネージドサービスを使うのがいい?
ファイル、ブロック
今動いているアプリケーションを動かすために必要。
自動化の恩恵やアプリケーションパッケージングによるメリットを享受し、環境差異をなくすことができる。 いわゆるmode1、2nd platformのアプリケーション。
ファイルのほうがポータビリティが高くコンテナ向きか。
ストレージプロビジョニングでサービスカタログ化して用途に応じてプロビジョニングする。
オブジェクト
S3互換のプロトコルで通信を行うオブジェクトストレージを指す。
コンテナの特性上、マルチリージョン間でのデータの受け渡しを簡単に出来る物が良い
mode2, 3rd platformに対応するアプリケーションはこちらか…?
サービスを活用
アプリケーションが使うデータベースなどはこの時代であればサービスの使用を検討するのがいい。
コンテナ自体はステートレスとして永続化はサービスをフル活用。
ただし一部の共有ファイルなどは切り出しておいておいたほうが便利。
オンプレミスで XaaSをサービス提供する場合は上記のファイル・ブロック・オブジェクトのをミックスし様々なワークロードに耐えれるよう設計する必要あり。