共有ボリューム付きマルチコンテナPod
emptyDirボリュームを通じてデータを共有する複数のコンテナを持つKubernetesポッドを構築します。Webサーバーとメトリクスエクスポーターによるアンバサダーとアダプターパターンを実演します。
Advanced
詳細な説明
マルチコンテナPodパターン
Kubernetesのポッドにはネットワークとストレージを共有する複数のコンテナを含めることができます。これにより、コンテナが同じプロセスに緊密に結合されることなく連携する強力なパターンが可能になります。
主要な設定
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-with-metrics
labels:
app: "web"
spec:
replicas: 2
template:
spec:
containers:
- name: web
image: my-web-app:latest
ports:
- name: http
containerPort: 8080
volumeMounts:
- name: shared-data
mountPath: /app/data
- name: metrics-exporter
image: prom/statsd-exporter:latest
ports:
- name: metrics
containerPort: 9102
volumeMounts:
- name: shared-data
mountPath: /data
readOnly: true
volumes:
- name: shared-data
emptyDir: {}
マルチコンテナパターン
サイドカー:メインコンテナを拡張(ログフォワーダー、プロキシ、設定リローダー)
アンバサダー:メインコンテナのネットワークトラフィックをプロキシ(ローカルキャッシュ、コネクションプーリング)
アダプター:メインコンテナの出力を変換(メトリクスフォーマットコンバーター、ログパーサー)
考慮事項
- ポッド内のすべてのコンテナは同じノードにスケジュールされる
- リソースリクエスト/リミットはすべてのコンテナで合算される
- いずれかのコンテナがlivenessプローブに失敗すると、ポッド全体が再起動される可能性がある
- ポッド内のコンテナの起動順序は保証されない(順序付けにはinitコンテナを使用)
ユースケース
メトリクスエクスポーター付きWebサーバーや外部APIコール用のローカルキャッシュプロキシを持つアプリケーションなど、複数の協調するプロセスを必要とする複雑なアプリケーションの構築。