マルチコンテナPod(サイドカー)
サイドカーコンテナなど、1つのPod内で複数のコンテナを同居させて実行するパターンを学びます。
「マルチコンテナPod(サイドカー)」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。
単一コンテナの先へ
ここまでは、Podを単一のコンテナを実行するものとして考えてきました。しかし、アプリケーションに補助プロセスが必要な場合はどうすればよいでしょうか?
Kubernetesでは、Pod内で複数のコンテナを実行できます。これらのコンテナは常に同じ場所に配置され、リソースを共有します。
マルチコンテナPodを使う理由
1つのPodで複数のコンテナを実行する方法は、密接に結合されたアプリケーションで、次のリソースを共有する必要がある場合に適しています。
- ネットワーク名前空間(同じIPアドレスを使い、
localhost経由で通信できます) - ストレージボリューム
- ライフサイクル(同時に起動、停止、再起動します)
これにより、関連するプロセスを1つの管理単位として扱えます。
サイドカーパターンの解説
よく使われる設計にサイドカーパターンがあります。これは、「サイドカー」コンテナをメインアプリケーションのコンテナと並行して実行する方法です。
メインアプリケーション自体を変更せずに、その機能を拡張または強化できます。便利な相棒のようなものだと考えてください。
サイドカーの利用例
サイドカーは非常に柔軟に利用できます。一般的な用途には次のようなものがあります。
- ログ収集:サイドカーがメインアプリケーションのログを収集し、中央のログサービスに送信します。
- プロキシ:サイドカーが、セキュリティ(mTLS)やトラフィック管理などのネットワークプロキシ機能を提供します。
- ファイル同期:サイドカーが、共有ボリュームを設定やデータで最新の状態に保ちます。
2つのコンテナを持つPod(YAML)
PodのYAMLマニフェストで複数のコンテナを定義する方法を見てみましょう。各コンテナはcontainers配列の要素になります。
spec.containersの下に、nginx-proxyコンテナとmain-appコンテナが定義されていることに注目してください。
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: nginx-proxy
image: nginx:latest
ports:
- containerPort: 80
- name: main-app
image: busybox:latest
command: ["sh", "-c", "echo 'Hello from main app!' && sleep 3600"]共有ストレージ:emptyDir
同じPod内のコンテナは、KubernetesのVolumesを使ってデータを共有できます。簡単な方法として、emptyDirボリュームを使用できます。
emptyDirボリュームは、Podがノードに割り当てられたときに作成され、そのPodがそのノード上で実行されている間存在します。一時的なストレージです。
例:ログ収集サイドカー
メインアプリケーションがファイルにログを出力するとします。サイドカーはそのログファイルを読み取り、ログサービスに送信できます。
これにより、ログ処理のロジックをメインアプリケーションから分離でき、アプリケーションをシンプルで本来の機能に集中した状態に保てます。
ログ収集サイドカーのYAML(パート1)
これが、ログ収集の例で使用するYAMLです。log-volumeという名前のemptyDirボリュームを定義し、両方のコンテナでこのボリュームをマウントします。
main-appコンテナは、共有ボリューム内の/var/log/app.logにログメッセージを書き込みます。
apiVersion: v1
kind: Pod
metadata:
name: log-collector-pod
spec:
volumes:
- name: log-volume
emptyDir: {}
containers:
- name: main-app
image: busybox:latest
command: ["sh", "-c", "while true; do echo $(date) 'Main app log entry' >> /var/log/app.log; sleep 1; done"]
volumeMounts:
- name: log-volume
mountPath: /var/logログ収集サイドカーのYAML(パート2)
次に、log-sidecarコンテナが同じlog-volumeをマウントします。その後、tail -fを使って、メインアプリケーションが書き込むログファイルを継続的に読み取ります。
実際の環境では、このサイドカーがログを処理し、ElasticsearchやSplunkなどのログシステムに送信します。
apiVersion: v1
kind: Pod
metadata:
name: log-collector-pod # Same Pod as before
spec:
volumes:
- name: log-volume
emptyDir: {}
containers:
- name: main-app
image: busybox:latest
command: ["sh", "-c", "while true; do echo $(date) 'Main app log entry' >> /var/log/app.log; sleep 1; done"]
volumeMounts:
- name: log-volume
mountPath: /var/log
- name: log-sidecar
image: busybox:latest
command: ["sh", "-c", "tail -f /var/log/app.log"]
volumeMounts:
- name: log-volume
mountPath: /var/logクイックチェック:サイドカーの利点
マルチコンテナPodは、特にサイドカーパターンと組み合わせることで、複雑なアプリケーションの管理にいくつかの利点をもたらします。
サイドカーコンテナを使用する主な利点は、次のうちどれでしょうか?
振り返り:マルチコンテナPod
よくできました。マルチコンテナPodと、強力なサイドカーパターンについて学びました。
- Podでは、ネットワークとストレージを共有する複数のコンテナをホストできます。
- サイドカーパターンは、メインアプリケーションの機能を拡張または強化するのに役立ちます。
- 一般的な用途には、ログ収集、プロキシ、データ同期があります。
emptyDirボリュームは、Pod内で共有できる一時ストレージを提供します。
このパターンは、Kubernetesで堅牢かつモジュール化されたアプリケーションを構築するうえで重要です。
よくある質問
「マルチコンテナPod(サイドカー)」レッスンは無料ですか?
はい。「マルチコンテナPod(サイドカー)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。
「マルチコンテナPod(サイドカー)」で何を学びますか?
サイドカーコンテナなど、1つのPod内で複数のコンテナを同居させて実行するパターンを学びます。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kubernetes Basicsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「マルチコンテナPod(サイドカー)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKubernetes Basicsレッスンでコードを書いて実行できますか?
はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Pod:最小単位
- Podのライフサイクルと状態
- マルチコンテナPod(サイドカー)
- Initコンテナと起動順序