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.5.2. Pod のデプロイ前の、Init コンテナーの使用によるタスクの実行
OpenShift Container Platform は、Init コンテナー を提供します。 このコンテナーは、アプリケーションコンテナーの前に実行される特殊なコンテナーであり、アプリのイメージに存在しないユーティリティーまたはセットアップスクリプトを含めることができます。
5.2.1. Init コンテナーについて リンクのコピーリンクがクリップボードにコピーされました!
Pod の残りの部分がデプロイされる前に、init コンテナーリソースを使用して、タスクを実行することができます。
Pod は、アプリケーションコンテナーに加えて、init コンテナーを持つことができます。Init コンテナーにより、セットアップスクリプトとバインディングコードを再編成できます。
init コンテナーは以下のことを行うことができます。
- セキュリティー上の理由のためにアプリケーションコンテナーイメージに含めることが望ましくないユーティリティーを含めることができ、それらを実行できます。
- アプリのイメージに存在しないセットアップに必要なユーティリティーまたはカスタムコードを含めることができます。たとえば、単に Sed、Awk、Python、Dig のようなツールをセットアップ時に使用するために別のイメージからイメージを作成する必要はありません。
- Linux namespaces を使用して、アプリケーションコンテナーがアクセスできないシークレットへのアクセスなど、アプリケーションコンテナーとは異なるファイルシステムビューを設定できます。
各 init コンテナーは、次のコンテナーが起動する前に正常に完了している必要があります。そのため、Init コンテナーには、一連の前提条件が満たされるまでアプリケーションコンテナーの起動をブロックしたり、遅延させたりする簡単な方法となります。
たとえば、以下は init コンテナーを使用するいくつかの方法になります。
以下のようなシェルコマンドでサービスが作成されるまで待機します。
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
Copy 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 ドキュメントを参照してください。
5.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.yaml pod/myapp-pod created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のステータスを表示します。
oc get pods
$ oc get pods NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のステータスが、待機状態であることを示していることを確認します。
以下のコマンドを実行してサービスを作成します。
oc create -f mydb.yaml oc create -f myservice.yaml
$ oc create -f mydb.yaml $ oc create -f myservice.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod のステータスを表示します。
oc get pods
$ oc get pods NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow