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

Elastic Container Instance:サイドカーコンテナを強制終了し、コンテナの終了コードを無視する

最終更新日:Dec 28, 2024

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

機能の説明

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

上記のようなシナリオに対して、Elastic Container Instanceは次の機能をサポートしています。

  • コンテナのタイプの指定

    環境変数を使用して、サイドカーコンテナにタイプラベルを追加できます。このように、アプリケーションコンテナが終了して再起動しない場合、Elastic Container Instanceはサイドカーコンテナの実行を強制終了し、ジョブが実行完了できるようにします。

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

    Elastic Container Instanceがサイドカーコンテナの実行を強制終了した場合、サイドカーコンテナの終了コードは0以外となり、コンテナが失敗状態で終了したことを示します。その結果、ジョブの最終状態はFailedになります。この問題に対処するために、コンテナの環境変数を使用してサイドカーコンテナの終了コードを無視し、サイドカーコンテナの状態を強制的にSucceededに設定できます。これにより、ジョブの最終状態がSucceededになります。

設定の説明

設定項目

環境変数の名前

説明

コンテナのタイプの指定

ECI_CONTAINER_TYPE

有効な値:

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

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

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

ECI_CONTAINER_IGNORE_EXIT_CODE

コンテナの終了コードを無視するかどうかを指定します。この環境変数が設定されているコンテナが終了し、終了コードが0でない場合、Elastic Container Instanceはコンテナの状態を強制的にSucceededに設定し、実際の終了コード、失敗の原因、および失敗情報をテキスト形式でMessageフィールドに追加します。

設定例

  1. ジョブのYAML設定ファイルを記述し、そのYAMLファイルを使用してジョブを作成します。

    kubectl apply -f test-sidecar.yaml

    次の例は、test-sidecar.yamlという名前のYAMLファイルを示しています。このファイルでは、2つのコンテナを含むジョブが作成されます。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. ジョブとPodの詳細を表示し、環境変数の効果を確認します。

    • 次のコマンドを実行して、ジョブの最終状態がSucceededであることを確認します。

      kubectl describe job <ジョブ名>

      レスポンス例:

      job-1.png

    • サイドカーコンテナの詳細を表示し、実際の終了コードと関連情報を確認します。

      kubectl describe pod <pod名>

      レスポンス例:

      job-2.png