導入
Pod は基本「1コンテナ」ですが、あえて複数のコンテナを1つの Pod に同居させる設計もあります。密に協力させたいコンテナをまとめる、この使い方の代表が サイドカーパターン です。
説明
レッスン7で見たとおり、同じ Pod のコンテナは同一IPを共有し localhost で通信でき、ボリュームも共有できます。この近さを活かすのが複数コンテナ Pod です。
サイドカー(sidecar) とは、バイクの横に付ける補助席のこと。アプリ本体のコンテナに、補助役のコンテナを寄り添わせる設計を指します。よくある補助役は次のようなものです。
graph TB
subgraph pod["Pod(IP・ボリューム共有)"]
MAIN[アプリ本体<br/>コンテナ]
SIDE[サイドカー<br/>ログ収集コンテナ]
V[(共有ボリューム<br/>ログファイル)]
MAIN -- ログを書く --> V
V -- ログを読む --> SIDE
SIDE -- localhost で連携 --- MAIN
end
2つのコンテナを持つ Pod のマニフェストの骨子はこうなります。containers の配列に2つ並べるだけです。
apiVersion: v1
kind: Pod
metadata:
name: app-with-logger
spec:
containers:
- name: app # 本体
image: my-app:1.0
- name: log-agent # サイドカー(補助役)
image: log-agent:1.0
ポイントは、本体とサイドカーが「同じ運命」を共有すること。同じノードに一緒に配置され、一緒に起動・停止します。強く結びついて動く2役だからこそ、別々の Pod ではなく1つの Pod にまとめるのです。逆に、独立して増減させたいものは同居させず、別々の Pod にします。