sidecar container とは?アプリと並んで動くヘルパー
sidecar とは、同じ pod 内でメインのアプリと並んで動く二次的なコンテナで、そのネットワークと lifecycle を共有して補助的な機能を提供します。
ときには、ある機能 - ログ転送、proxy、メトリクス - がアプリの内部には属さないが、そのすぐ隣で動く必要があります。sidecar パターンは、そのヘルパーを同じ pod 内の別コンテナに置き、アプリケーションイメージを肥大化させることなく、アプリのネットワークと storage を共有させます。
sidecar がコンテキストを共有する仕組み
同じ pod に存在するため、sidecar はネットワーク namespace を共有し(localhost で到達可能)、メインコンテナと volume を共有できます。両者は一緒にスケジュールされ、生死をともにします。
一般的な用途
- 共有ファイルを読むログ・メトリクスのコレクター。
- トラフィックを扱う service-mesh の proxy(例: Envoy)。
- アプリの前段に立つローカル cache や auth proxy。
sidecar と init container の違い
init container はアプリの起動前に完了まで実行されます(セットアップ作業)。sidecar は pod の生涯を通じて、アプリと並行して動きます。異なる仕事、異なる lifecycle です。
凝集性を保つ
sidecar は本当にそのアプリに属するべきです - 同じ lifecycle、同じ pod。「pod を節約する」ためだけに無関係なサービスを1つの pod に入れると、独立してスケールすべきものを結合させてしまいます。
CI における sidecar
同じ考え方は、CI では job と並んで動く service container やヘルパープロセス(例: cache proxy)として現れます。マネージド runner はしばしばそうしたヘルパーを組み込みで提供するため、追加のセットアップなしに job が caching や proxy を得られます。
重要なポイント
- sidecar は同じ pod 内でアプリと並んで動き、ネットワークと storage を共有します。
- アプリケーションイメージを肥大化させずに機能を追加します。
- sidecar は pod の生涯を通じて動きますが、init container は最初に動いて終了します。
関連ガイド
What Is a Pod in Kubernetes? The Smallest Deployable UnitA pod is the smallest deployable unit in Kubernetes - one or more containers that share a network and storage…
What Is an Init Container? Setup Before Your App StartsAn init container runs to completion before a pod’s app containers start. Learn what it is for, how it differ…
What Is a Service Container in CI? Databases for Your TestsA service container is a sidecar like Postgres or Redis that CI starts alongside your job for integration tes…