すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:コンテナの起動および終了優先度の設定

最終更新日:Dec 28, 2024

このトピックでは、Elastic Container Instance ベースのポッド (Elastic Container Instance) 内のコンテナの起動および終了の優先度を設定する方法について説明します。これにより、コンテナは順番に起動および終了します。

機能の説明

デフォルトでは、Elastic Container Instance 内のコンテナは同時に起動および終了します。状況によっては、インスタンス内のコンテナに依存関係がある場合があります。あるコンテナは、別のコンテナが起動した後に起動する必要がある場合や、あるコンテナは別のコンテナが終了した後に終了する必要がある場合があります。次に例を示します。

  • Istio サービスガバナンスのシナリオでは、istio-proxy コンテナはアプリケーションコンテナでデータ転送が生成される前に準備完了状態である必要があり、istio-proxy コンテナはアプリケーションコンテナが終了した後にのみ終了できます。

  • ログ収集のシナリオでは、ログコンテナはアプリケーションコンテナでログが生成される前に準備完了状態である必要があり、ログコンテナはアプリケーションコンテナが終了した後にのみ終了できます。

前述のシナリオでは、Elastic Container Instance を使用すると、環境変数を使用して Elastic Container Instance 内のコンテナの起動および終了の優先度を設定できます。ビジネス要件に基づいてコンテナに環境変数を追加して、コンテナが順番に起動または終了するようにすることができます。

設定の説明

次の表に、コンテナの起動および終了の優先度を設定するために使用できる環境変数を示します。

項目

環境変数の名前

説明

コンテナの起動優先度

ECI_CONTAINER_LAUNCH_PRIORITY

  • 有効な値: -1000 ~ 1000。デフォルト値: 0。値が大きいほど、起動優先度が高くなります。

  • 優先度の高いコンテナは、優先度の低いコンテナが起動する前に起動することが保証されています。同じ優先度のコンテナは、順番に起動することが保証されておらず、同時に起動します。

  • コンテナが別のコンテナが提供するサービスに依存している場合は、別のコンテナの readiness プローブを設定する必要があります。たとえば、コンテナ B がコンテナ A が提供するサービスに依存している場合は、コンテナ A に対してより高い起動優先度と readiness プローブを設定して、コンテナ A が準備完了状態になった後にのみコンテナ B が起動できるようにする必要があります。

コンテナの終了優先度

ECI_CONTAINER_EXIT_PRIORITY

  • 有効な値: -1000 ~ 1000。デフォルト値: 0。値が大きいほど、終了優先度が高くなります。

  • 優先度の高いコンテナは、優先度の低いコンテナが終了する前に終了することが保証されています。同じ優先度のコンテナは、順番に終了することが保証されておらず、同時に終了します。

重要

コンテナの終了順序を設定した後、ポッドが破棄されるまでの時間は、ポッドの仕様で TerminationGracePeriodSeconds に指定された時間よりも長くなる場合があります。

設定例

コンテナの起動優先度の設定

  1. アプリケーションの 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
  2. ポッドのステータスで各コンテナの開始時刻を確認します。

    kubectl describe pod <ポッド名>

    レスポンスの Containers セクションには、c2 コンテナの起動時刻が c1 コンテナの起動時刻よりも遅いことが示されています。レスポンス例:

    容器启动k8s.png

コンテナの終了優先度の設定

  1. アプリケーションの 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
  2. ポッドを削除し、ポッド内のコンテナの kill イベントシーケンスを観察します。

    説明

    コンテナの終了順序を確認する場合は、イベントをタイムリーに表示してください。ポッドが削除された後、イベントを観察できない場合があります。

    kubectl describe pod <ポッド名>

    レスポンスの Events セクションには、c1、c2、c3 コンテナが順番に終了することが示されています。レスポンス例:

    容器退出.png