Alibaba Cloud Container Service for Kubernetes (ACK) では、サイドカーコンテナーを使用して DaemonSet のような効果を実現できます。サイドカーコンテナーのステータスが NotReady の場合、対応するポッドのステータスも NotReady になります。 サイドカーコンテナーのステータスがポッド全体のステータスに影響を与えないようにするには、環境変数を使用してサイドカーコンテナーのステータスを無視できます。
はじめに
仮想ノードの制限により、ACK クラスタは DaemonSet をサポートしていません。DaemonSet のような効果を実現するには、ACK クラスタのポッドにサイドカーコンテナーを追加します。サイドカーコンテナーを追加した後、サイドカーコンテナーのステータスが NotReady の場合、ポッドのステータスは NotReady になります。
シナリオによっては、サイドカーコンテナーのステータスがポッド全体のステータスに影響を与えないようにする必要がある場合があります。たとえば、サイドカーコンテナーを使用してログを収集する場合などです。ログコンテナーで問題が発生した場合でも、アプリケーションコンテナーは外部サービスの提供を継続する必要があります。
この問題に対処するために、ACK はコンテナーの NotReady ステータスを無視する機能を提供しています。コンテナーのステータスがポッド全体のステータスに影響を与えないようにするには、環境変数を追加してコンテナーのステータスを無視します。環境変数を追加すると、コンテナーが NotReady 状態であっても、ポッドは Ready 状態になることができます。
構成方法
コンテナーのステータスを無視するために使用される環境変数は、__IGNORE_READY__
です。true
の値は、コンテナーのステータスが無視されることを指定します。
例
アプリケーションの YAML 構成ファイルを作成し、その YAML ファイルを使用して [デプロイメント] を作成します。
kubectl apply -f test-ignore.yaml
次の例では、test-ignore.yaml という名前の YAML ファイルを使用して、1 つのポッドレプリカを含む [デプロイメント] を作成します。ポッドには 2 つのコンテナーが含まれています。app コンテナーは正常に動作します。sidecar コンテナーはゼロ以外の状態コードを返し、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: app image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ["/bin/sh", "-c", "sleep 999"] - name: sidecar image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 command: ["/bin/sh", "-c", "exit 1"] env: - name: __IGNORE_READY__ value: "true"
ポッドの詳細を表示し、ポッドのステータスを確認します。
kubectl get pod <pod-name> -o yaml
期待される結果:
... status: conditions: - lastTransitionTime: '2024-08-02T09:36:14Z' status: 'True' type: Initialized - lastTransitionTime: '2024-08-02T09:36:16Z' status: 'True' type: Ready - lastTransitionTime: '2024-08-02T09:36:16Z' status: 'True' type: ContainersReady - lastTransitionTime: '2024-08-02T09:36:15Z' status: 'True' type: PodScheduled - lastTransitionTime: '2024-08-02T09:36:14Z' status: 'True' type: ContainerHasSufficientDisk ...
応答の status.conditions セクションで、Ready パラメーターと ContainersReady パラメーターを確認します。パラメーターのステータス値が True であることは、サイドカーコンテナーの NotReady 状態が無視されていることを示します。