最近、さくらVPS上にkubernetesを構築して、その上で開発を行うことが多くなってきています。さくらVPSなどでは、クラウドサービスにありがちな従量課金の部分がかからないので気兼ねなく開発しています。今回は、オンプレk8s上で開発する際につまりそうなhostPathを使ったDynamic Volume Provisioningを利用する方法についてご紹介します。
目次
調べようと思ったきっかけ
GKEにデプロイする際に利用していたHelmチャットを実行したところ、下記のように利用できるpersistent volumesがないと言われてしまったPVCの状態がPendingのままになる現状が発生していました。
kubectl describe pvc xxxx Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal FailedBinding 4s (x23 over 5m24s) persistentvolume-controller no persistent volumes available for this claim and no storage class is set
hostPathとは
hostPathは、kubernetes Node上の領域をコンテナにマッピングするプラグインです。セキュリティの観点で無効になっているケースが多いです。
hostPathを利用できるようにする
/etc/kubernetes/manifests/kube-controller-manager.yamlというファイルの起動パラメータに下記を追記します。この変更は、プロセスの再起動は不要で自動で反映されます
- --enable-hostpath-provisioner=true
storageclassでhost-pathを利用できるようにする
$ cat k8s_hostpath/provisioner.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
annotations:
storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/host-path
$ kubectl apply -f k8s_hostpath/
ここまで行ってから再度helmを実行するとPVCの生成時にhost-pathを使ってPVが生成されました。無事解決。
まとめ
kubernetes on クラウドの場合は、クラウドがいい感じにやってくれていることも多いですね。たまにオンプレk8sを触ってみるのもいいですね。