共有ボリューム付きマルチコンテナ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コール用のローカルキャッシュプロキシを持つアプリケーションなど、複数の協調するプロセスを必要とする複雑なアプリケーションの構築。

試してみる — K8s Pod Spec Builder

フルツールを開く