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

Container Compute Service:サイドカーコンテナの起動とシャットダウンの設定

最終更新日:Jun 23, 2026

サイドカーコンテナを使用して DaemonSet のような効果を実現し、ロギング、モニタリング、セキュリティ、トラフィックルーティングなどの追加のサービスや機能を提供したい場合は、メインアプリケーションコンテナに対するサイドカーコンテナの起動と終了の優先度を設定する必要があります。このトピックでは、サイドカーコンテナの起動と終了の優先度を設定する方法について説明します。

機能説明

Alibaba Cloud Container Compute Service (ACS) クラスターは、仮想ノードの制限により DaemonSet をサポートしていません。DaemonSet のような効果を実現するために、ACS クラスターの Pod にサイドカーコンテナを追加できます。Pod に追加されたサイドカーコンテナのライフサイクルは、Pod のライフサイクルから独立していません。DaemonSet のような効果を実現するには、サイドカーコンテナの起動と終了の優先度を設定する必要があります。たとえば、Pod の作成中に、メインアプリケーションコンテナの前にサイドカーコンテナを起動する必要がある場合があります。ジョブタイプの Pod を使用する場合、メインアプリケーションコンテナが終了した後に、サイドカーコンテナを強制終了する必要がある場合があります。

これらの要件を満たすために、ACS はサイドカーコンテナの起動と終了の優先度を設定するための以下の方法を提供します。

  • Kubernetes ネイティブのサイドカーコンテナ構成

    Kubernetes 1.29 以降では、ネイティブのサイドカー構成のサポートがデフォルトで有効になっています。サイドカーを init コンテナとして定義し、その restartPolicy を Always に設定することで、サイドカーを構成できます。

    説明

    ネイティブのアプローチでは、サイドカーコンテナを特別な init コンテナとして実装します。Pod の起動中、アプリケーションコンテナはサイドカーコンテナが起動するまで待機します。restartPolicy: Always の設定により、サイドカーコンテナはメインアプリケーションコンテナや他の init コンテナに影響を与えることなく、起動、停止、再起動ができます。

  • ACS 最適化サイドカーコンテナ構成

    Kubernetes バージョン 1.28 以前の場合、ACS では特別な環境変数 __IS_SIDECAR__ を設定して、通常のコンテナをサイドカーコンテナとしてマークすることができます。

    重要

    ACS 最適化構成では、通常のコンテナをサイドカーとして宣言できます。他の通常のコンテナより先に起動し、失敗時には restartPolicyAlways であるかのように自動的に再試行されます。さらに、以前の Kubernetes バージョン (1.28 以下) の ACS クラスターには、コンテナのステータスが正しく更新されることを保証するための互換性機能が含まれています。

    しかし、新しい Kubernetes バージョンや他のクラスタータイプでは、この方法はコンテナステータスの更新に関する Kubernetes の制限を受けます。ACS 最適化方法を使用して構成されたサイドカーが失敗して再起動した後、その containerStatus と Pod のステータスは Running に更新されません。正確なステータスについては、実際の Pod の状態に依存してください。クラスターをバージョン 1.29 以降にアップグレードし、Kubernetes ネイティブのサイドカーコンテナ構成を使用することを推奨します。

サイドカーコンテナの構成方法

構成方法

パラメーター/環境変数

説明

Kubernetes ネイティブのサイドカーコンテナ構成

init コンテナの restartPolicy フィールド

  • Never: コンテナは init コンテナです。これはデフォルト値です。

  • Always: コンテナはサイドカーコンテナです。

ACS 最適化サイドカーコンテナ構成

通常のコンテナの環境変数: __IS_SIDECAR__

  • true: コンテナはサイドカーコンテナです。

  • false: コンテナは通常のコンテナです。これはデフォルト値です。

  1. test-sidecar.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。このファイルは、app と sidecar という 2 つのコンテナをプロビジョニングするジョブを作成するために使用されます。app コンテナはアプリケーションコンテナです。sidecar コンテナはサイドカーコンテナです。

    ACS 最適化サイドカーコンテナ構成

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - name: app
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
            command: ['sh', '-c', 'for i in $(seq 1 10);do echo "logging" >> /var/logs.txt; sleep 1; done']
          - name: sidecar
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
            command: ['sh', '-c', 'touch /var/logs.txt && tail -F /var/logs.txt']
            env:
            - name: __IS_SIDECAR__   # コンテナに環境変数を追加します。
              value: "true"          # コンテナをサイドカーコンテナとして指定します。
          restartPolicy: Never
      backoffLimit: 2

    Kubernetes ネイティブのサイドカーコンテナ構成

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: test
        spec:
          initContainers:
          - name: sidecar
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
            command: ['sh', '-c', 'touch /var/logs.txt && tail -F /var/logs.txt']
            restartPolicy: Always  # コンテナをサイドカーコンテナとして指定します。
          containers:
          - name: app
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
            command: ['sh', '-c', 'for i in $(seq 1 10);do echo "logging" >> /var/logs.txt; sleep 1; done']
          restartPolicy: Never
      backoffLimit: 2
  2. 次のコマンドを実行してジョブを作成します:

    kubectl apply -f test-sidecar.yaml
  3. ジョブと Pod の詳細を表示し、環境変数の効果を観察します。

    • ジョブが完了し、そのステータスが Succeeded であることを確認します。

      kubectl describe job <job-name>

      例:

      Parallelism:    1
      Completions:    1
      Completion Mode:  NonIndexed
      Start Time:     Tue, 29 Oct 2024 11:24:18 +0800
      Completed At:   Tue, 29 Oct 2024 11:25:17 +0800
      Duration:       59s
      Pods Statuses:  0 Active (0 Ready) / 1 Succeeded / 0 Failed
      Pod Template:
  4. サイドカーコンテナの詳細を表示し、コンテナの起動シーケンスと実際の終了コードを確認します。

    kubectl describe pod <pod-name>
    • 次の図は、sidecar コンテナが app コンテナの前に起動されたことを示しています。これにより、メインコンテナが必要とするトラフィックルーティングなどの依存機能が事前に準備されていることが保証されます。次の図はまた、sidecar コンテナが app コンテナの実行停止から 10 秒後に終了したことを示しています。これにより、ジョブによってプロビジョニングされた Pod が正常に終了できることが保証されます。

      Events:
        Type    Reason     Age    From                Message
        ----    ------     ----   ----                -------
        Normal  Scheduled  5m11s  default-scheduler   Successfully assigned default/test-729nd to virtual-kubelet-cn-shenzhen-f
        Normal  Pulling    5m13s  kubelet             Pulling image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28"
        Normal  Pulled     5m12s  kubelet             Successfully pulled image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28" in 384ms
        Normal  Created    5m12s  kubelet             Created container sidecar
        Normal  Started    5m12s  kubelet             Started container sidecar
        Normal  Pulling    5m12s  kubelet             Pulling image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28"
        Normal  Pulled     5m12s  kubelet             Successfully pulled image "registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28" in 342ms
        Normal  Created    5m12s  kubelet             Created container app
        Normal  Started    5m12s  kubelet             Started container app
        Normal  Killing    5m1s   kubelet             Stopping container sidecar
    • 次の図は、sidecar コンテナが強制終了され、終了コードが 0 であることを示しています。これにより、Pod がサイドカーコンテナの影響を受けることなく、正常に成功または失敗として終了できることが保証されます。

      sidecar:
          Container ID:  containerd://bd85de5ad7ee1cb5a4807b094f2d41fa90881916857172 0e73ef0dfbd26f1dfb
          Image:         registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
          Image ID:      registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox@sha256:141c253bc4c3fd0a20
          Port:          <none>
          Host Port:     <none>
          Command:
            sh
            -c
            touch /var/logs.txt && tail -F /var/logs.txt
          State:          Terminated
            Reason:       Completed
            Message:      Force this container to be success(137, Error, )
            Exit Code:    0
            Started:      Tue, 29 Oct 2024 11:24:32 +0800
            Finished:     Tue, 29 Oct 2024 11:25:13 +0800
          Ready:          False
          Restart Count:  0