サイドカーコンテナを使用して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 | 有効な値:
|
コンテナの終了コードの無視 | ECI_CONTAINER_IGNORE_EXIT_CODE | コンテナの終了コードを無視するかどうかを指定します。この環境変数が設定されているコンテナが終了し、終了コードが0でない場合、Elastic Container Instanceはコンテナの状態を強制的にSucceededに設定し、実際の終了コード、失敗の原因、および失敗情報をテキスト形式でMessageフィールドに追加します。 |
設定例
ジョブの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
ジョブとPodの詳細を表示し、環境変数の効果を確認します。
次のコマンドを実行して、ジョブの最終状態がSucceededであることを確認します。
kubectl describe job <ジョブ名>
レスポンス例:
サイドカーコンテナの詳細を表示し、実際の終了コードと関連情報を確認します。
kubectl describe pod <pod名>
レスポンス例: