【さいどかーぱたーん】

サイドカーパターン とは?

最終更新:
💡 メインコンテナに「相棒」を横付けして機能を追加

メインのアプリケーションコンテナの横に補助用のコンテナを並べて動かす設計パターン。ログ収集、監視、通信のプロキシなどをアプリのコードを変えずに追加できる。

📌 このページのポイント
サイドカーパターン Pod(ネットワーク・ボリュームを共有) メインコンテナ アプリケーション (ビジネスロジック) localhost 共有Volume サイドカー ログ収集 プロキシ 監視 認証 ← 外部リクエスト バイクのサイドカーのように、メインに寄り添って補助機能を提供
サイドカーパターンのイメージ
ひよこ ひよこ
なんで別コンテナに分けるの?
ペンギン先生 ペンギン先生
関心の分離のためだよ。メインアプリは本来の処理に集中して、ログ収集や通信の暗号化などの横断的な処理はサイドカーが担当する。メインアプリがPythonでもGoでもJavaでも、同じログ収集コンテナを使い回せるのが強みなんだ
ひよこ ひよこ
同じPodの中で、どうやって協力するの?
ペンギン先生 ペンギン先生
Pod内のコンテナはネットワークを共有しているから、localhostで通信できるし、共有ボリュームを通してファイルを受け渡せるよ。たとえばアプリが書いたログファイルを、サイドカーが読んで外へ送るんだ。Kubernetes v1.33では、再起動ポリシーをAlwaysにしたinitコンテナとしてサイドカーを定義する方式が安定版になったよ
ひよこ ひよこ
サービスメッシュとの関係は?
ペンギン先生 ペンギン先生
Istioのサイドカーモードでは、各PodにEnvoyプロキシをサイドカーとして自動注入するんだ。Podの通信がプロキシを経由するから、アプリのコードを変えずにmTLS(相互TLS)での暗号化や認証、リトライ、トラフィックの振り分けなどを実現できる。サイドカーパターンのよく知られた活用例だよ
ひよこ ひよこ
デメリットは?
ペンギン先生 ペンギン先生
まずリソース消費。Podごとにサイドカーが入るから、Pod数に比例してCPU・メモリが増える。Istioの公式測定では、1000リクエスト/秒の条件でサイドカー1つが約0.2vCPU・60MBを使っていたよ。ほかに通信がプロキシを経由する分の遅延、問題の切り分けが難しくなる点もあるんだ
ひよこ ひよこ
サイドカーを使わない方法もある?
ペンギン先生 ペンギン先生
あるよ。IstioのアンビエントモードはPodごとのサイドカーの代わりに、ノードごとのztunnelでmTLSなどの基本機能を担い、高度なL7処理が必要なときだけウェイポイントプロキシを使う。Cilium Service MeshもeBPFと共有のEnvoyでサイドカーなしの構成をとれるよ。機能や運用の違いを見て選ぶのが良いね
もっと詳しく知りたい人へ

Jobでサイドカーを使うと、処理が終わってもPodが終わらなくならない?

普通のアプリコンテナとしてログ送信用などのコンテナを並べると、それが動き続けるかぎりPodは完了しないので注意が必要だよ。Kubernetesのサイドカーコンテナ機能(再起動ポリシーをAlwaysにしたinitコンテナ)で定義すれば、公式ドキュメントにあるとおり、メインのコンテナが終わった後にサイドカーがJobの完了を妨げないんだ。使うクラスターのバージョンが対応しているか確認してね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「サイドカーパターン」って出てきたら「メインアプリに補助コンテナを横付けするパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Sidecar Pattern」 = サイドカーパターン
💬 バイクのサイドカー(横付けの座席)のように、メインの横に補助を付けるイメージだよ

参考資料

← 用語集にもどる