KubernetesでemptyDirを使ってコンテナ間でログを共有する方法
Kubernetesで同一Pod内のコンテナ間でデータ共有を行いたい場合、emptyDirボリュームがよく利用されます。
本記事では、emptyDirを使ってログファイルを共有する方法を解説します。
記事の目次
emptyDirとは?
emptyDirは、Podが起動したタイミングで作成される一時的なストレージです。
- Podが削除されるとデータも削除される
- 同一Pod内のすべてのコンテナから共有可能
ログの一時保存やコンテナ間のデータ連携に適しています。
サンプル①:ログを書き込むPodの作成
まずは、ログを書き込むPodを作成します。
vi log-test-pod.yamlapiVersion: v1
kind: Pod
metadata:
name: log-test-pod
spec:
containers:
- image: busybox
name: write-log-pod-container
volumeMounts:
- mountPath: /log
name: data-volume
command:
- sh
- -c
- "date >> /log/date.log; sleep 300"
volumes:
- name: data-volume
emptyDir: {}Podを作成します。
kubectl apply -f log-test-pod.yamlログの確認方法
作成したログファイルは、以下のコマンドで確認できます。
kubectl exec log-test-pod -- cat /log/date.log
サンプル②:コンテナ間でログを共有する
次に、同一Pod内の別コンテナからログを参照してみます。
apiVersion: v1
kind: Pod
metadata:
name: log-test-pod
spec:
containers:
- image: busybox
name: write-log-pod-container
volumeMounts:
- mountPath: /log
name: data-volume
command:
- sh
- -c
- "date >> /log/date.log; sleep 300"
- image: busybox
name: log-reader-container
volumeMounts:
- mountPath: /log
name: data-volume
command:
- sh
- -c
- "tail -f /log/date.log"
volumes:
- name: data-volume
emptyDir: {}コンテナのログを確認する
ログ監視用コンテナの出力は、以下で確認できます。
kubectl logs log-test-pod -c log-reader-container重要ポイント(試験対策にも◎)
- 同一Pod内であればVolumeは共有可能
- emptyDirはPodのライフサイクルに依存
- 永続化したい場合はPersistentVolumeを使用
まとめ
- emptyDirを使うことでコンテナ間のデータ共有が簡単に実現できる
- ログ連携やサイドカー構成に最適
- Pod削除でデータも消えるため用途に注意
- タグ:
- Kubenetes