ログ転送用サイドカーコンテナパターン
共有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: {}
動作の仕組み
- 両方のコンテナが
/var/log/appにマウントされたemptyDirボリュームを共有 - アプリケーションコンテナがこのディレクトリにログファイルを書き込み
- ログフォワーダーコンテナ(Fluent Bit、Fluentd、Vector)がこれらのファイルを読み取り、Elasticsearch、CloudWatch、その他のロギングバックエンドに転送
- 同じポッド内にあるため、同じライフサイクルを共有 — ポッドが削除されると両方のコンテナが停止
リソース配分
サイドカーはデータの読み取りと転送だけが仕事なので、最小限のリソースで十分です。一般的な値:
- Fluent Bit:25m CPU、32Miメモリ(非常に軽量)
- Fluentd:100m CPU、128Miメモリ(重い、プラグインが多い)
- Vector:50m CPU、64Miメモリ(Rustベース、効率的)
ユースケース
stdoutではなくファイルにログを書き込むアプリケーションに集中ログを追加する。サイドカーパターンはアプリケーションコンテナを変更せずにログ転送機能を追加できます。