This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.6.2. Pod のデプロイ前の、Init コンテナーの使用によるタスクの実行
OpenShift Container Platform は、Init コンテナー を提供します。 このコンテナーは、アプリケーションコンテナーの前に実行される特殊なコンテナーであり、アプリのイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。
6.2.1. Init コンテナーについて リンクのコピーリンクがクリップボードにコピーされました!
Pod の残りの部分がデプロイされる前に、init コンテナーリソースを使用して、タスクを実行することができます。
Pod は、アプリケーションコンテナーに加えて、init コンテナーを持つことができます。Init コンテナーにより、セットアップスクリプトとバインディングコードを再編成できます。
init コンテナーは以下のことを行うことができます。
- セキュリティー上の理由のためにアプリケーションコンテナーイメージに含めることが望ましくないユーティリティーを含めることができ、それらを実行できます。
- アプリのイメージに存在しないセットアップに必要なユーティリティーまたはカスタムコードを含めることができます。たとえば、単に Sed、Awk、Python、Dig のようなツールをセットアップ時に使用するために別のイメージからイメージを作成する必要はありません。
- Linux namespace を使用して、アプリケーションコンテナーがアクセスできないシークレットへのアクセスなど、アプリケーションコンテナーとは異なるファイルシステムビューを設定できます。
各 init コンテナーは、次のコンテナーが起動する前に正常に完了している必要があります。そのため、Init コンテナーには、一連の前提条件が満たされるまでアプリケーションコンテナーの起動をブロックしたり、遅延させたりする簡単な方法となります。
たとえば、以下は init コンテナーを使用するいくつかの方法になります。
以下のようなシェルコマンドでサービスが作成されるまで待機します。
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のようなコマンドを使用して、Downward API からリモートサーバーにこの Pod を登録します。
curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’
$ curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
sleep 60のようなコマンドを使用して、アプリケーションコンテナーが起動するまでしばらく待機します。 - Git リポジトリーのクローンをボリュームに作成します。
- 設定ファイルに値を入力し、テンプレートツールを実行して、主要なアプリコンテナーの設定ファイルを動的に生成します。たとえば、設定ファイルに POD_IP の値を入力し、Jinja を使用して主要なアプリ設定ファイルを生成します。
詳細は、Kubernetes ドキュメント を参照してください。
6.2.2. Init コンテナーの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下の例は、2 つの init コンテナーを持つ単純な Pod の概要を示しています。1 つ目は myservice を待機し、2 つ目は mydb を待機します。両方のコンテナーが完了すると、Pod が開始されます。
手順
init コンテナーの YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myserviceサービス用の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbサービス用の YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
myapp-podを作成します。oc create -f myapp.yaml
$ oc create -f myapp.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
pod/myapp-pod created
pod/myapp-pod createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のステータスを表示します。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5s
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5sCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のステータスが、待機状態であることを示していることを確認します。
以下のコマンドを実行してサービスを作成します。
oc create -f mydb.yaml
$ oc create -f mydb.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f myservice.yaml
$ oc create -f myservice.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のステータスを表示します。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2m
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2mCopy to Clipboard Copied! Toggle word wrap Toggle overflow