7.2. Pod のデプロイ前の、Init Container の使用によるタスクの実行
アプリケーションコンテナーの前に実行される特殊なコンテナーである init コンテナー を使用できます。init コンテナーには、アプリケーションイメージには含まれていないユーティリティーやセットアップスクリプトを含めることができます。
7.2.1. init コンテナーについて リンクのコピーリンクがクリップボードにコピーされました!
Pod の残りの部分がデプロイされる前に、init コンテナーを使用してタスクを実行できます。init コンテナーを使用すると、環境準備、依存関係チェック、設定生成など、メインアプリケーションロジックが開始される前に完了する必要のあるセットアップタスクを実行できます。
Pod にはアプリケーションコンテナーのほかに init コンテナーがあります。init コンテナーにより、セットアップスクリプトとバインディングコードを再編成できます。
init コンテナーは以下のことを行うことができます。
- セキュリティー上の理由のためにアプリケーションコンテナーイメージに含めることが望ましくないユーティリティーを含めることができ、それらを実行できます。
- アプリのイメージに存在しないセットアップに必要なユーティリティーまたはカスタムコードを含めることができます。たとえば、単に Sed、Awk、Python、Dig のようなツールをセットアップ時に使用するために別のイメージからイメージを作成する必要はありません。
- Linux namespace を使用して、アプリケーションコンテナーがアクセスできないシークレットへのアクセスなど、アプリケーションコンテナーとは異なるファイルシステムビューを設定できます。
次のコンテナーが起動される前に、各 init コンテナーが正常に完了する必要があるため、特定の前提条件が満たされるまで、アプリケーションコンテナーの起動をブロックまたは遅延させる簡単な方法を提供します。
たとえば、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 を使用して主要なアプリ設定ファイルを生成します。