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

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

最終更新日:Jan 27, 2025

Alibaba Cloud Container Service for Kubernetes (ACK) では、サイドカーコンテナーを使用して DaemonSet のような効果を実現できます。サイドカーコンテナーのステータスが NotReady の場合、対応するポッドのステータスも NotReady になります。 サイドカーコンテナーのステータスがポッド全体のステータスに影響を与えないようにするには、環境変数を使用してサイドカーコンテナーのステータスを無視できます。

はじめに

仮想ノードの制限により、ACK クラスタは DaemonSet をサポートしていません。DaemonSet のような効果を実現するには、ACK クラスタのポッドにサイドカーコンテナーを追加します。サイドカーコンテナーを追加した後、サイドカーコンテナーのステータスが NotReady の場合、ポッドのステータスは NotReady になります。

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

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

構成方法

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

  1. アプリケーションの 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"
  2. ポッドの詳細を表示し、ポッドのステータスを確認します。

    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 状態が無視されていることを示します。