15章Init Container(Initコンテナ)
Init Container(Initコンテナ)パターンを使うと、初期化関連タスクのライフサイクルをメインアプリケーションコンテナから切り離すことによって、関心の分離が実現できます。この章では、初期化ロジックが必要な際に、さまざまなパターンで使われるKubernetesの基本的な考え方を詳細に見ていきます。
15.1 問題
初期化(initialization)は、多くのプログラミング言語においてよく語られる懸案事項です。言語によっては言語機能の一部として含まれ、また別の言語では構成要素がイニシャライザであることを表すのに命名規則やパターンが使われます。例としてJava言語では、何らかのセットアップが必要なオブジェクトをインスタンス化するのにはコンストラクタ(またはもう少し凝った使い方では静的ブロック)を使います。コンストラクタはオブジェクト内で最初に実行されることが保証されており、管理ランタイムによって1度だけ実行されることが保証されています(これはあくまで例であり、別の言語やまれなケースを取り上げることはしません)。また、必須パラメータなどの事前条件が満たされているかの検証にもコンストラクタを使います。さらに、渡された引数やデフォルト値でインスタンスのフィールドを初期化するのにもコンストラクタを使います。
Initコンテナはこれに似ていますが、Javaのクラスレベルではなく、Podレベルで動きます。メインアプリケーションに相当するPodに1つ以上のコンテナがある時、これらのコンテナには起動する前の前提条件があるはずです。このような前提条件には、ファイルシステムでの特別なパーミッション、データベーススキーマのセットアップ、アプリケーションのシードデータの設定などがあるでしょう。あるいは、この初期化ロジックには、アプリケーションイメージには含まれないツールやライブラリが必要な場合もあるでしょう。そういった場合には、外部依存関係が満たされるまではアプリケーションの起動を遅らせたいかもしれません。こういったユースケースすべてに対するKubernetesにおける実装方法として、メインアプリケーションの役割から初期化処理を切り離すことができるInitコンテナを使います。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access