環境変数を使用して、Elastic Container Instance (ECI) インスタンス内のコンテナの起動優先度と終了優先度を設定できます。これらの優先度によって、コンテナが起動および終了する順序が制御されます。
仕組み
デフォルトでは、ECI Pod 内のコンテナは特定の順序なしに並行して起動および終了します。一部のシナリオではコンテナ間に依存関係があり、あるコンテナが実行中になった後でのみ別のコンテナを起動したり、あるコンテナが停止した後でのみ別のコンテナを終了したりする必要があります。例:
-
Istio サービスガバナンスのシナリオでは、アプリケーションコンテナがトラフィックを生成する前に istio-proxy コンテナが Ready 状態になっている必要があり、アプリケーションコンテナが終了した後にのみ終了する必要があります。
-
ログ収集の場合、アプリケーションコンテナがログを生成する前にログエージェントコンテナが Ready 状態になっている必要があり、アプリケーションコンテナが終了した後にのみ終了する必要があります。
これらのシナリオに対応するため、ECI では環境変数を使用してコンテナの起動優先度と終了優先度を設定し、指定された順序で起動および終了させることができます。
設定
以下の環境変数を使用して、コンテナの起動および終了順序を制御できます。
|
パラメーター |
環境変数 |
説明 |
|
コンテナの起動優先度 |
ECI_CONTAINER_LAUNCH_PRIORITY |
|
|
コンテナの終了優先度 |
ECI_CONTAINER_EXIT_PRIORITY |
|
OpenAPI を使用して ECI インスタンスを作成する際に、TerminationGracePeriodSeconds パラメーターを設定して正常な終了を保証できます。コンテナの終了順序も設定した場合、インスタンスの合計終了時間が指定した TerminationGracePeriodSeconds を超える可能性があります。
例
コンテナの起動順序の設定
API
-
コンテナの起動順序を定義して ECI インスタンスを作成します。
次の例は、CreateContainerGroup 操作を呼び出すために使用されるリクエストパラメーターを示しています。インスタンスには c1 と c2 の 2 つのコンテナが含まれています。コンテナ c1 は c2 よりも起動優先度が高く、c1 には readiness プローブが設定されています。これにより、c1 が Ready 状態になった後にのみ c2 が起動することが保証されます。
{ "RegionId": "cn-beijing", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "ContainerGroupName": "test-launch", "Container": [ { "Name": "c1", "Image": "registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine", "EnvironmentVar": [ { "Key": "ECI_CONTAINER_LAUNCH_PRIORITY", "Value": "1000" } ], "ReadinessProbe.PeriodSeconds": 3, "ReadinessProbe.HttpGet.Path": "/", "ReadinessProbe.HttpGet.Port": 80 }, { "Name": "c2", "Image": "registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine", "EnvironmentVar": [ { "Key": "ECI_CONTAINER_LAUNCH_PRIORITY", "Value": "0" } ], "Arg": [ "/bin/sh", "-c", "sleep 3600s" ] } ] } -
インスタンスの詳細をチェックして、各コンテナの起動時刻を確認します。
DescribeContainerGroups 操作を呼び出して、インスタンスの詳細をクエリします。応答の
Containersオブジェクトで、各コンテナのCurrentState.StartTimeフィールドをチェックします。c2 の起動時刻は c1 よりも後になります。
コンソール
Elastic Container Instance コンソールで ECI インスタンスを作成する際、各コンテナの 高度な設定 で環境変数を設定し、コンテナの起動優先度を設定し、ヘルスチェック セクションで Readiness プローブ (つまり アプリケーションサービスプローブ) を設定できます。
環境変数名を ECI_CONTAINER_LAUNCH_PRIORITY に、値を 1000 に設定します。[ヘルスチェック] セクションで、[readiness プローブ] を設定します。チェック方法として [HTTP リクエスト] を選択します。パスを / に、ポートを 80 に、プロトコルを [HTTP] に設定します。
インスタンスの作成後、インスタンスイベントを表示してコンテナの起動順序を確認できます。
コンテナの終了順序の設定
API
-
コンテナの終了順序を定義して ECI インスタンスを作成します。
次の例は、CreateContainerGroup 操作を呼び出すために使用されるリクエストパラメーターを示しています。
TerminationGracePeriodSecondsは 30 秒に設定されています。インスタンスには 3 つのコンテナが含まれており、終了優先度は c1 > c2 > c3 です。{ "RegionId": "cn-beijing", "ContainerGroupName": "test-exit", "SecurityGroupId": "sg-2ze63v3jtm8e6syi****", "VSwitchId": "vsw-2ze94pjtfuj9vaymf****", "TerminationGracePeriodSeconds": 30, "Container": [ { "Name": "c1", "Image": "registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine", "EnvironmentVar": [ { "Key": "ECI_CONTAINER_EXIT_PRIORITY", "Value": "1000" } ] }, { "Name": "c2", "Image": "registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine", "EnvironmentVar": [ { "Key": "ECI_CONTAINER_EXIT_PRIORITY", "Value": "0" } ], "Arg": [ "/bin/sh", "-c", "sleep 3600s" ] }, { "Name": "c3", "Image": "registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine", "EnvironmentVar": [ { "Key": "ECI_CONTAINER_EXIT_PRIORITY", "Value": "-1000" } ], "Arg": [ "/bin/sh", "-c", "sleep 3600s" ] } ] } -
インスタンスを削除し、コンテナの Killing イベントの順序を監視します。
説明コンテナの終了順序を確認するには、イベントを速やかにクエリする必要があります。ECI インスタンスが削除されると、イベントが利用できなくなる場合があります。
DescribeContainerGroupEvents 操作を呼び出してインスタンスイベントをクエリします。応答の
Eventsオブジェクトで、各コンテナの Killing イベントのタイムスタンプをチェックします。イベントにより、コンテナが c1、c2、c3 の順序で終了することが確認されます。
コンソール
ECI インスタンスをElastic Container Instance コンソールで作成する際、各コンテナの 高度な設定 セクションで環境変数を設定して、その終了優先度を構成できます。
環境変数名を ECI_CONTAINER_EXIT_PRIORITY に、値を 1000 に設定します。