はじめに
KubernetesのemptyDir
について、どんなものなのか、使い方を紹介したいと思います。
emptyDirとは
emptyDir
は、ボリュームのひとつで、Podが実行されている間だけ使える最も単純なボリュームです。
最初のボリュームの中身は空(empty)になります。
用途としては、
- ダウンロードしたファイルの一時保管
- 生成したデータのキャッシング
- データ処理のワークスペース
など、永続的に保存する必要はないが、ストレージが欲しい場合に使えます。
Podが削除されると、empryDir
のデータも削除されてしまうので注意してください。
使い方
下記のようにemptyDir: {}
とすることで、emptyDir
のボリュームを定義し、使うことができるようになります。
volumes:
- name: volume-name
emptyDir: {}
あとは、ボリュームと同じ用途で使うことができます。
設定例としては、下記を参考にしてください。
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp
name: emptydir-volume
volumes:
- name: emptydir-volume
emptyDir: {}
使ってみる
試しにemptyDir
を使ってみます。
作成するPod(pod.yml
)は下記の通りです。
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: busybox-1
image: busybox:latest
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp
name: emptydir-volume
- name: busybox-2
image: busybox:latest
args:
- sleep
- "999"
volumeMounts:
- mountPath: /tmp
name: emptydir-volume
volumes:
- name: emptydir-volume
emptyDir: {}
Podの中に2つのコンテナが含まれており、それぞれにemptyDir
のボリュームをマウントしています。
kubectl apply -f pod.yml
busybox-1
コンテナに入り、ボリュームをマウントしているディレクトリにファイルを作成してみます。
kubectl exec -it myapp -c busybox-1 -- /bin/sh
/tmp # pwd
/tmp
/tmp # vi hoge.txt
/tmp # cat hoge.txt
hoge
busybox-2
にも同じファイルが作られていることが確認できます。
kubectl exec -it myapp -c busybox-2 -- /bin/sh
/tmp # pwd
/tmp
/tmp # ls
hoge.txt
/tmp # cat hoge.txt
hoge
一度Podを削除して、再度Podを作成してみます。
kubectl delete pod myapp
kubectl apply -f pod.yml
先ほど作成したファイルは無くなっていることが確認できます。
kubectl exec -it myapp -c busybox-1 -- /bin/sh
/tmp # pwd
/tmp
/tmp # ls