Volume について
コンテナのデータは一時的なもので、Pod/コンテナが削除されてもデータが消えないよう。Volume にデータの永続化をしいく。Pod 内のコンテナ間データ共有にも使える。
Volume の種類
- emptyDir
- hostPath
- configMap
- secret
- gcePersistentDisk
- awsElasticBlockStore
- csi
- downwardAPI
- nfs
-
minikube のローカル環境を使用しているため emptyDir や hostPath を使ってみる
emptyDir を使ってみる
date-tail.yaml
apiVersion: v1
kind: Pod
metadata:
name: date-tail
spec:
containers:
- name: date
image: alpine
command: ["sh", "-c"]
args:
- |
exec >> /var/log/date-tail/output.log
echo -n 'Start at: '
date
sleep 1
done
volumeMounts:
- name: log-volume
mountPath: /var/log/date-tail
- name: tail
image: alpine
command: ["sh", "-c"]
args:
- |
tail -f /var/log/date-tail/output.log
volumeMounts:
og-volume
mountPath: /var/log/date-tail
volumes:
- name: log-volume
emptyDir:
terminationGracePeriodSeconds: 0
- この Pod は date コンテナ、tail コンテナ、Volume に log-volume があります。date コンテナと tail コンテナは、log-volume をマウントしている。
emptyDir を使った Pod を作成する
# date-tailを作成
kubectl apply -f date-tail.yaml
pod/date-tail created
# dateコンテナのファイルを確認してみる
kubectl exec -it date-tail -c date ls /var/log/date-tail
output.log
# tailコンテナのファイルを確認してみる
kubectl exec -it date-tail -c tail ls /var/log/date-tail
output.log
# tailコンテナの方では tail -f を実行しているので kubectl logs でその出力が確認できる。
kubectl logs date-tail -c tail -f --tail=10
Fri Mar 22 13:22:42 UTC 2019
Fri Mar 22 13:22:43 UTC 2019
Fri Mar 22 13:22:44 UTC 2019
Fri Mar 22 13:22:45 UTC 2019
Fri Mar 22 13:22:46 UTC 2019
Fri Mar 22 13:22:47 UTC 2019
Fri Mar 22 13:22:48 UTC 2019
# date-tailのPodを削除
kubectl delete -f date-tail.yaml
pod "date-tail" deleted
hostPath を使ってみる
-
emptyDir は Pod が削除された際に対象の Volume のデータも削除される。 よってコンテナ間のデータ共有のみで使用できる。
-
volume のタイプを hostPath に変更してみる date-tail.yaml を修正してみる
# 修正前
volumes:
- name: log-volume
emptyDir:
# 修正後
volumes:
- name: log-volume
hostPath:
path: /data/date-tail
- こうすることで、Pod を削除しても
/data/date-tail
のデータは削除されることなく残っています。
minikube で使えるパス
- /data
- /var/lib/minikube
- /var/lib/docker
- /tmp/hostpath_pv
-
/tmp/hostpath-provisioner
# Podを再作成してみる
kubectl replace --force -f date-tail.yaml
minikube の VM にファイルがあるか確認
minikube ssh
ls /data/
date-tail minikube
ls /data/date-tail/
output.log
- 実際に GKE などを使うと gcePersistentDisk へ保存したりするとそのときの確認はおいおいやる予定