本文へスキップ
BecomeCoder

Kubernetesコース · 第2章 Pod ― 最小の実行単位 · レッスン11

複数コンテナPodとサイドカー

ブラウザで完結

導入

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 にします。

実際に動かしてみよう

上がマニフェスト(YAML)エディタ、下が kubectl の端末です。エディタの内容は `manifest.yaml` として保存され、下で `kubectl apply -f manifest.yaml` を実行するとクラスタに反映されます(pod.yaml / deploy.yaml / service.yaml も最初から置いてあります)。`kubectl get pods` / `describe` / `scale` / `rollout` などで結果を確かめましょう(本物のKubernetesではなく、動きを再現した軽量なシミュレータです)。各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」で戻せます。

kubectl(シミュレート)

マニフェスト(YAML)を書いて kubectl コマンドを試せる学習用クラスタを読み込みます(本物のKubernetesではなく、apply/get/describe/scale/rollout などの動きを再現した軽量な自作シミュレータです)。
スクロールして表示された時点でも自動で読み込まれます。