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

Elastic Container Instance:サイドカーコンテナのNotReady状態を無視する

最終更新日:Dec 28, 2024

DaemonSet と同様の効果を実現するためにサイドカーコンテナを使用する場合、サイドカーコンテナのステータスが NotReady の場合、ポッドのステータスも NotReady になります。特定のシナリオでは、サイドカーコンテナのステータスがポッド全体のステータスに影響を与えないようにするために、環境変数を使用してサイドカーコンテナのステータスを無視できます。

機能の説明

Container Service for Kubernetes (ACK) Serverless クラスタで Elastic Container Instance を使用する場合、仮想ノードの制限により、Elastic Container Instance は Kubernetes の DaemonSet 機能をサポートしていません。DaemonSet 機能を使用するには、Elastic Container Instance ベースのポッドにサイドカーコンテナを追加して、DaemonSet と同様の効果を実現できます。サイドカーコンテナを追加した後、サイドカーコンテナのステータスが NotReady の場合、ポッドのステータスも NotReady になります。

一部のシナリオでは、サイドカーコンテナのステータスがポッド全体のステータスに影響を与えないようにすることが必要な場合があります。たとえば、ログ収集にサイドカーコンテナを使用する場合、ロギングコンテナに問題が発生しても、アプリケーションコンテナは外部サービスの提供を継続する必要があります。

この問題に対処するために、Elastic Container Instance はコンテナの NotReady ステータスを無視する機能を提供しています。コンテナのステータスがポッド全体のステータスに影響を与えないようにするには、環境変数を追加してコンテナのステータスを無視できます。環境変数を追加した後、コンテナが NotReady 状態であっても、ポッドは Ready 状態になることができます。

構成の説明

コンテナのステータスを無視するために使用される環境変数は、ECI_CONTAINER_IGNORE_READY です。true の値は、コンテナのステータスが無視されることを指定します。

サンプル構成

  1. アプリケーションの YAML 構成ファイルを記述し、その YAML ファイルを使用してデプロイメントを作成します。

    kubectl apply -f test-ignore.yaml

    次の例では、test-ignore.yaml という名前の YAML ファイルを使用して、1 つのポッドレプリカを含むデプロイメントを作成します。ポッドには 2 つのコンテナが含まれています。コンテナ c1 は正常に実行できますが、コンテナ c2 は起動コマンドがないため Ready 状態になりません。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-ignore
      labels:
        app: test
    spec:
      replicas: 1 
      selector:
        matchLabels:
          app: test
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - name: c1
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["/bin/sh", "-c", "sleep 999"] // 999秒間スリープします
          - name: c2
            image: registry.cn-shanghai.aliyuncs.com/eci_open/centos:7
            env:
            - name: ECI_CONTAINER_IGNORE_READY
              value: "true"
  2. ポッドの詳細を表示し、ポッドのステータスを確認します。

    kubectk get pod <pod-name> -o yaml

    レスポンスで、status.conditions セクションの Ready パラメータと ContainersReady パラメータを確認します。パラメータのステータス値が True の場合、コンテナ c2 の NotReady 状態が無視されていることを示します。

    忽略容器notready.png