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
の値は、コンテナのステータスが無視されることを指定します。
サンプル構成
アプリケーションの 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"
ポッドの詳細を表示し、ポッドのステータスを確認します。
kubectk get pod <pod-name> -o yaml
レスポンスで、status.conditions セクションの Ready パラメータと ContainersReady パラメータを確認します。パラメータのステータス値が True の場合、コンテナ c2 の NotReady 状態が無視されていることを示します。