このトピックでは、Elastic Container Instance ベースのポッド (Elastic Container Instance) 内のコンテナの起動および終了の優先度を設定する方法について説明します。これにより、コンテナは順番に起動および終了します。
機能の説明
デフォルトでは、Elastic Container Instance 内のコンテナは同時に起動および終了します。状況によっては、インスタンス内のコンテナに依存関係がある場合があります。あるコンテナは、別のコンテナが起動した後に起動する必要がある場合や、あるコンテナは別のコンテナが終了した後に終了する必要がある場合があります。次に例を示します。
Istio サービスガバナンスのシナリオでは、istio-proxy コンテナはアプリケーションコンテナでデータ転送が生成される前に準備完了状態である必要があり、istio-proxy コンテナはアプリケーションコンテナが終了した後にのみ終了できます。
ログ収集のシナリオでは、ログコンテナはアプリケーションコンテナでログが生成される前に準備完了状態である必要があり、ログコンテナはアプリケーションコンテナが終了した後にのみ終了できます。
前述のシナリオでは、Elastic Container Instance を使用すると、環境変数を使用して Elastic Container Instance 内のコンテナの起動および終了の優先度を設定できます。ビジネス要件に基づいてコンテナに環境変数を追加して、コンテナが順番に起動または終了するようにすることができます。
設定の説明
次の表に、コンテナの起動および終了の優先度を設定するために使用できる環境変数を示します。
項目 | 環境変数の名前 | 説明 |
コンテナの起動優先度 | ECI_CONTAINER_LAUNCH_PRIORITY |
|
コンテナの終了優先度 | ECI_CONTAINER_EXIT_PRIORITY |
|
コンテナの終了順序を設定した後、ポッドが破棄されるまでの時間は、ポッドの仕様で TerminationGracePeriodSeconds に指定された時間よりも長くなる場合があります。
設定例
コンテナの起動優先度の設定
アプリケーションの YAML 設定ファイルを作成し、その YAML ファイルを使用してデプロイメントを作成します。
kubectl apply -f test-launch.yaml
次の test-launch.yaml の例は、1 つのポッドレプリカを含むデプロイメントを作成するための設定を示しています。ポッドには 2 つのコンテナが含まれています。c1 コンテナは c2 コンテナよりも起動優先度が高くなっています。c1 コンテナには readiness プローブが設定されています。この場合、c2 コンテナは c1 コンテナが準備完了状態になった後にのみ起動します。
apiVersion: apps/v1 kind: Deployment metadata: name: test-launch labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c1 env: - name: ECI_CONTAINER_LAUNCH_PRIORITY value: "1000" readinessProbe: // readiness プローブを設定します httpGet: path: / port: 80 initialDelaySeconds: 30 // 初期遅延時間 periodSeconds: 3 // チェック間隔 - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c2 env: - name: ECI_CONTAINER_LAUNCH_PRIORITY value: "0" args: - /bin/sh - -c - sleep 3600s
ポッドのステータスで各コンテナの開始時刻を確認します。
kubectl describe pod <ポッド名>
レスポンスの
Containers
セクションには、c2 コンテナの起動時刻が c1 コンテナの起動時刻よりも遅いことが示されています。レスポンス例:
コンテナの終了優先度の設定
アプリケーションの YAML 設定ファイルを作成し、その YAML ファイルを使用してデプロイメントを作成します。
kubectl apply -f test-exit.yaml
次の test-exit.yaml の例は、1 つのポッドレプリカを含むデプロイメントを作成するための設定を示しています。ポッドには c1、c2、c3 の 3 つのコンテナが含まれており、終了優先度は降順になっています。
apiVersion: apps/v1 kind: Deployment metadata: name: test-exit labels: app: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c1 env: - name: ECI_CONTAINER_EXIT_PRIORITY value: "1000" - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c2 env: - name: ECI_CONTAINER_EXIT_PRIORITY value: "0" args: - /bin/sh - -c - sleep 3600s - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine name: c3 env: - name: ECI_CONTAINER_EXIT_PRIORITY value: "-1000" args: - /bin/sh - -c - sleep 3600s
ポッドを削除し、ポッド内のコンテナの kill イベントシーケンスを観察します。
説明コンテナの終了順序を確認する場合は、イベントをタイムリーに表示してください。ポッドが削除された後、イベントを観察できない場合があります。
kubectl describe pod <ポッド名>
レスポンスの
Events
セクションには、c1、c2、c3 コンテナが順番に終了することが示されています。レスポンス例: