はじめに
Nodeのファイルシステムを利用するhostPathについて、指定したマウント先が存在するかしないかでの実機上の動きを確認しました。
環境情報
- kubeadm 1.15
pathで指定したディレクトリが存在しない場合
例えばYAMLは以下で
containers: volumeMounts: - mountPath: /tmp name: myvol volumes: - name: myvol hostPath: path: /data
展開するノード上に/dataディレクトリがない場合はPodが展開されるタイミングで実行ユーザのumaskに従ってディレクトリが生成されます。
尚、Podを削除してもhostPathは削除されません。
pathで指定したディレクトリが存在する場合
Podは正常に生成されますが、Pod内のmountPathで指定した/dataの権限がPod内のtmpディレクトリの権限になります。
つまりディレクトリが無ければ新規作成し、ある場合はそのままマウントします。
このマウントされているディレクトリはコンテナ内で/tmpディレクトリの権限を変更するとホスト上の/dataディレクトリの権限も合わせて変更されます。
ただし、消去に関してはコンテナからは消せないですが
# rm -rf /tmp rm: cannot remove '/tmp': Device or resource busy
ホストからは消せます。
そして、ホスト上では/dataディレクトリはなくなりますがコンテナからは/tmpは見えたまますがファイルを置くことはできません。
# touch /tmp/a touch: cannot touch '/tmp/a': No such file or directory
終わりに
Pod上では正常に見えても、マウントしたディレクトリをホストから消した際はcdで移動はできるもの
No such file or directory
になる点は注意が必要です。
以上、ご参考になれば幸いです。