(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】hostPathで指定したディレクトリの有無による挙動の違い

スポンサーリンク

はじめに

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

になる点は注意が必要です。

以上、ご参考になれば幸いです。