サイドカーコンテナを使用して 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 | 有効な値:
|
コンテナ終了コードの無視 | ECI_CONTAINER_IGNORE_EXIT_CODE | コンテナの終了コードを無視するかどうかを指定します。この環境変数が設定されたコンテナが終了し、終了コードが 0 以外の場合、ECI はコンテナの終了コードを 0 に設定することで、コンテナが正常に完了したとみなします。実際の終了コード、失敗原因、失敗情報は、テキスト形式で Message フィールドに追加されます。 |
設定例
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-
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
-