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

Elastic Container Instance:サイドカーコンテナの強制終了とコンテナ終了コードの無視

最終更新日:Jun 21, 2026

サイドカーコンテナを使用して DaemonSet と同様の効果を実現している場合、Job タイプの Pod が実行を完了できないことがあります。この場合、環境変数を設定してサイドカーコンテナのタイプを指定し、サイドカーコンテナの終了コードを無視できます。これにより、Job を期待どおりに完了させることができます。

機能の説明

Container Service for Kubernetes (ACK) のサーバーレスクラスターで Elastic Container Instance (ECI) を使用する場合、仮想ノードの制約により、ECI は Kubernetes の DaemonSet 機能をサポートしていません。DaemonSet を使用したい一部のシナリオでは、ECI ベースの Pod にサイドカーコンテナを追加することで、DaemonSet と同様の効果を得られます。ただし、RestartPolicy パラメーターを OnFailure または Never に設定すると、Pod のライフサイクルに影響します。たとえば、Job に filebeat のサイドカーコンテナを追加した場合、アプリケーションコンテナが終了した後もサイドカーコンテナが実行を継続します。その結果、Job が望ましい状態に到達できず、実行を完了できません。

前述のシナリオに対して、ECI は次の機能をサポートしています:

  • コンテナタイプの指定

    環境変数を使用して、サイドカーコンテナにタイプラベルを付与できます。これにより、アプリケーションコンテナが終了して再起動しない場合、ECI がサイドカーコンテナの実行を強制終了し、Job が実行を完了できるようにします。

  • コンテナ終了コードの無視

    ECI がサイドカーコンテナの実行を強制終了すると、サイドカーコンテナの終了コードが 0 以外になるため、コンテナは Failed 状態になります。その結果、Job 全体も Failed となります。この問題に対処するには、環境変数を使用してサイドカーコンテナの終了コードを無視するように設定します。これにより、コンテナの終了が成功したとみなされ、Job の最終状態が Succeeded になります。

設定の説明

設定項目

環境変数名

説明

コンテナタイプの指定

ECI_CONTAINER_TYPE

有効な値:

  • normal:コンテナが通常のコンテナであることを指定します。この環境変数が空の場合、normal が使用されます。

  • sidecar:コンテナがサイドカーコンテナであることを指定します。

コンテナ終了コードの無視

ECI_CONTAINER_IGNORE_EXIT_CODE

コンテナの終了コードを無視するかどうかを指定します。この環境変数が設定されたコンテナが終了し、終了コードが 0 以外の場合、ECI はコンテナの終了コードを 0 に設定することで、コンテナが正常に完了したとみなします。実際の終了コード、失敗原因、失敗情報は、テキスト形式で Message フィールドに追加されます。

設定例

  1. Job の YAML 設定ファイルを作成し、その YAML ファイルを使用して Job を作成します。

    kubectl apply -f test-sidecar.yaml

    次の例は、test-sidecar.yaml という名前の YAML ファイルです。このファイルでは、2 つのコンテナを含む Job を作成します。c1 はアプリケーションコンテナで、c2 はサイドカーコンテナです。コンテナタイプを指定し、コンテナ終了コードを無視するために環境変数を追加します。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: test
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - name: c1
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
          - name: c2
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["/bin/sh","-c","sleep 999"] 
            env:
            - name: ECI_CONTAINER_TYPE
              value: "sidecar"
            - name: ECI_CONTAINER_IGNORE_EXIT_CODE
              value: "true"
          restartPolicy: Never
          backoffLimit: 2
  2. Job と Pod の詳細を表示し、環境変数の効果を確認します。

    • 次のコマンドを実行して、Job の最終状態が Succeeded であるかを確認します。

      kubectl describe job <job-name>

      レスポンスの例:

      :~$ kubectl describe job test
      Name:           test
      Namespace:      default
      Selector:       batch.kubernetes.io/controller-uid=c8a69ddd-34db-4716-
      Labels:         alibabacloud.com/eci=true
                      app=test
                      batch.kubernetes.io/controller-uid=c8a69ddd-34db-4716-
                      batch.kubernetes.io/job-name=test
                      controller-uid=c8a69ddd-34db-4716-8be4-528e556a8533
                      job-name=test
      Annotations:    <none>
      Parallelism:    1
      Completions:    1
      Completion Mode:    NonIndexed
      Start Time:     Wed, 29 Nov 2023 08:58:40 +0000
      Completed At:   Wed, 29 Nov 2023 08:59:37 +0000
      Duration:       57s
      Pods Statuses:  0 Active (0 Ready) / 1 Succeeded / 0 Failed
    • サイドカーコンテナの詳細を表示し、実際の終了コードと関連情報を確認します。

      kubectl describe pod <pod-name>

      レスポンスの例:

      c2:
          Container ID:   containerd://970f2424854aa19796e7883026435de2dae4ecf
          Image:          registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
          Image ID:       registry.cn-shanghai.aliyuncs.com/eci_open/perl@sha2
          Port:           <none>
          Host Port:      <none>
          Command:
            /bin/sh
            -c
            sleep 999
          State:          Terminated
            Reason:       Completed
            Message:      Force this container to be success(137, Error, )
            Exit Code:    0