Kubernetes : Dynamic Storage Provisioning using host-path

Yudi picture Yudi · Apr 6, 2017 · Viewed 8.4k times · Source

My question is about PersistentVolumeClaim I have one node cluster setup on aws ec2 I am trying to create a storage class using kubernetes.io/host-path as Provisioner.

yaml file content for storage class as follows,

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
namespace: kube-system
name: my-storage
annotations:
    storageclass.beta.kubernetes.io/is-default-class: "false"
labels:
    kubernetes.io/cluster-service: "true"
provisioner: kubernetes.io/host-path

yaml file content for PersistentVolumeClaim as follows,

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: task-pv-claim
annotations:
    volume.beta.kubernetes.io/storage-class: my-storage
spec:
accessModes:
    - ReadWriteOnce
resources:
    requests:
    storage: 3Gi

When I am trying to create storage class and PVC on minikube, it's working. It is creating volume on minikube in /tmp/hostpath_volume/ But, When I am trying similar thing on one node cluster setup on aws ec2, I am getting following error

Failed to create provisioner: Provisioning in volume plugin "kubernetes.io/host-path" is disabled

I can see this error when I do the kubectl describe pvc task-pv-claim, Also as, PV is not created, so claim is in pending state

I found something like kube-controller-manager which shows --enable-dynamic-provisioning and --enable-hostpath-provisioner in its option but don't know how to use it.

Answer

jaxxstorm picture jaxxstorm · Apr 6, 2017

It seems you might not be running the provisioner itself, so there's nothing to actually do the work of creating the hostpath directory.

Take a look here

The way this works is that the hostpath provisioner reads from the kubernetes API, and watches for you to create a storage class (which you've done) and a persistentvolumeclaim (also done).

When those exist, the provisioner (which is running as a pod) will go an execute a mkdir to create the hostpath.

Run the following:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/docs/demo/hostpath-provisioner/pod.yaml

And then recreate your storageclass and pvc