このセクションでは、hostPath の Volume リソースについて紹介します。 hostPath の Volume リソースは、Kubernetes Node 上の領域をコンテナにマッピングすることができます。マッピングすると Kubernetes Node 上のディレクトリが参照できてしまうため、セキュリティの観点から利用を控えるようにしてください。また、セキュリティの観点から hostPath を利用できないようにしている Kubernetes 環境もあります。
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-volume]# vi sample-hostpath.yaml
spec の containers の volumeMounts に Volume のマウントパスを指定します。また、volumes に hostPath を指定しています。hostPath の type には、Directory、DirectoryOrCreate、File、Socket、BlockDevice などがあり、Directory はディレクトリが存在しなければ何もしませんが、DirectoryOrCreate はディレクトリが存在しない場合には作成する違いがあります。
apiVersion: v1 kind: Pod metadata: name: sample-hostpath spec: containers: - name: nginx-container image: nginx:1.13 volumeMounts: - mountPath: /srv name: hostpath-sample volumes: - name: hostpath-sample hostPath: path: /etc type: DirectoryOrCreate
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-volume]# kubectl apply -f sample-hostpath.yaml pod/sample-hostpath created [root@kube-master sample-volume]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-volume]# kubectl get pod sample-hostpath NAME READY STATUS RESTARTS AGE sample-hostpath 1/1 Running 0 9s [root@kube-master sample-volume]#
Master サーバーから Pod の /srv/os-release を参照します。ここでは、/srv/ はホスト上の /etc/ にマウントされているため、ホスト上の OS情報が参照できていることが確認できます。
[root@kube-master sample-volume]# kubectl exec -it sample-hostpath cat /srv/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" [root@kube-master sample-volume]#
Master サーバーから Pod の /etc/os-release を参照します。ここでは、Pod の OS情報が参照できていることが確認できます。
[root@kube-master sample-volume]# kubectl exec -it sample-hostpath cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" [root@kube-master sample-volume]#
Master サーバーから 作成したKubernetes クラスタ上の Pod リソースを削除します。
[root@kube-master sample-volume]# kubectl delete pod sample-hostpath pod "sample-hostpath" deleted [root@kube-master sample-volume]#