ログ転送用サイドカーコンテナパターン

共有emptyDirボリュームからアプリケーションログを読み取り、集中管理システムに転送するログ転送コンテナを使用してKubernetesでサイドカーパターンを実装します。

Patterns

詳細な説明

サイドカーパターン

サイドカーパターンはメインアプリケーションコンテナを拡張するヘルパーコンテナをポッドに追加します。最も一般的なユースケースはログ転送です:アプリケーションが共有ボリュームにログを書き込み、サイドカーコンテナがそれを読み取って転送します。

主要な設定

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-with-logging
  labels:
    app: "web"
spec:
  replicas: 2
  template:
    spec:
      containers:
        - name: app
          image: my-app:latest
          ports:
            - name: http
              containerPort: 8080
          volumeMounts:
            - name: logs
              mountPath: /var/log/app
        - name: log-forwarder
          image: fluent/fluent-bit:latest
          volumeMounts:
            - name: logs
              mountPath: /var/log/app
              readOnly: true
      volumes:
        - name: logs
          emptyDir: {}

動作の仕組み

  1. 両方のコンテナが/var/log/appにマウントされたemptyDirボリュームを共有
  2. アプリケーションコンテナがこのディレクトリにログファイルを書き込み
  3. ログフォワーダーコンテナ(Fluent Bit、Fluentd、Vector)がこれらのファイルを読み取り、Elasticsearch、CloudWatch、その他のロギングバックエンドに転送
  4. 同じポッド内にあるため、同じライフサイクルを共有 — ポッドが削除されると両方のコンテナが停止

リソース配分

サイドカーはデータの読み取りと転送だけが仕事なので、最小限のリソースで十分です。一般的な値:

  • Fluent Bit:25m CPU、32Miメモリ(非常に軽量)
  • Fluentd:100m CPU、128Miメモリ(重い、プラグインが多い)
  • Vector:50m CPU、64Miメモリ(Rustベース、効率的)

ユースケース

stdoutではなくファイルにログを書き込むアプリケーションに集中ログを追加する。サイドカーパターンはアプリケーションコンテナを変更せずにログ転送機能を追加できます。

試してみる — K8s Pod Spec Builder

フルツールを開く