7.2. Pod のデプロイ前の、Init コンテナーの使用によるタスクの実行
アプリケーションコンテナーの前に実行される特殊なコンテナーである 初期化コンテナー を使用できます。初期化コンテナーには、アプリケーションイメージには含まれていないユーティリティーやセットアップスクリプトを含めることができます。
7.2.1. init コンテナーの理解 リンクのコピーリンクがクリップボードにコピーされました!
初期化コンテナーを使用すると、Pod の残りの部分がデプロイされる前にタスクを実行できます。初期化コンテナーを使用すると、環境準備、依存関係チェック、設定生成など、メインアプリケーションロジックが開始される前に完了する必要のあるセットアップタスクを実行できます。
Pod にはアプリケーションコンテナーのほかに init コンテナーがあります。Init コンテナーにより、セットアップスクリプトとバインディングコードを再編成できます。
init コンテナーは以下のことが可能です。
- セキュリティー上の理由から、アプリケーションコンテナーイメージに含めることが望ましくないユーティリティーを格納して実行します。
- アプリのイメージに存在しないセットアップに必要なユーティリティーまたはカスタムコードを含めることができます。たとえば、単に Sed、Awk、Python、Dig のようなツールをセットアップ時に使用するために別のイメージからイメージを作成する必要はありません。
- Linux namespace を使用して、アプリケーションコンテナーがアクセスできないシークレットへのアクセスなど、アプリケーションコンテナーとは異なるファイルシステムビューを設定できます。
次のコンテナーが起動される前に、各初期化コンテナーが正常に完了する必要があるため、特定の前提条件が満たされるまで、アプリケーションコンテナーの起動をブロックまたは遅延させる簡単な方法を提供します。
たとえば、以下のような方法で init コンテナーを使用できます。
次のようなシェルコマンドを使用して、サービスが作成されるまで待機します。
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1次のようなコマンドを使用して、Downward API からこの Pod をリモートサーバーに登録します。
$ curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’-
sleep 60などのコマンドを使用して、アプリケーションコンテナーの起動を遅延させます。 - Git リポジトリーのクローンをボリュームに作成します。
-
設定ファイルに値を入力し、テンプレートツールを実行して、メインのアプリケーションコンテナー用の設定ファイルを動的に生成します。たとえば、
POD_IP の値を設定ファイルに配置し、Jinja を使用してメインのアプリケーション設定ファイルを生成します。