Skip to content
Latchkey

init container とは?アプリ起動前のセットアップ

init container は、pod 内のメインコンテナが起動する前に実行されて終了します - 成功するまでアプリの実行をゲートする、保証されたセットアップ step です。

ときには、アプリが起動する前に pod に準備が必要です。依存関係を待つ、マイグレーションを実行する、config を取得するなどです。init container はまさにこれを扱います。それらは順番に、次々と実行され、アプリコンテナはそのすべてが成功裏に完了して初めて起動します。

run-to-completion のセマンティクス

init container はアプリコンテナの前に逐次実行されます。それぞれが次の実行前に成功裏に終了しなければなりません。1つが失敗すると、Kubernetes は pod を再起動して retry します - アプリが中途半端に準備された pod 上で起動することは決してありません。

一般的な用途

  • データベースやサービスに到達可能になるまで待つ。
  • アプリ起動前に schema マイグレーションを実行する。
  • secret、証明書、config を共有 volume に取得する。
  • mount された volume にファイルシステムの権限を設定する。

init container と sidecar の違い

init container はセットアップを行ってアプリの前に終了し、sidecar は pod の生涯を通じてアプリと並んで動きます。「まずこれをやる」には init を、「これを続ける」には sidecar を使いましょう。

結果の共有

init container は一般に、アプリコンテナも mount する volume に書き込みます - 取得された config や証明書がそこに置かれ、アプリが起動するときに使える状態になります。

CI との対応

これは、テスト実行前に成功しなければならない CI のセットアップ step - 依存関係のインストール、service container の待機、データの seed - に対応します。どちらも「準備し、検証し、それから進む」を強制します。

重要なポイント

  • init container は、アプリコンテナが起動する前に、順番に、完了まで実行されます。
  • アプリ起動前のセットアップ(待機、マイグレーション、config)を保証します。
  • sidecar と違い、それらは終了します。pod の生涯を通じて動くことはありません。

関連ガイド