Search code examples
kuberneteskubernetes-podpersistent-volumespersistent-volume-claims

Kubernetes - MountVolume.NewMounter initialization failed for volume "<volume-name>" : path does not exist


I am trying to setup a Local Persistent volume using local storage using WSL. But the pod STATUS stops at Pending.

The kubectl describe pod <pod-name> gives below error.

Warning FailedMount 21s (x7 over 53s) kubelet MountVolume.NewMounter initialization failed for volume "pv1" : path "/mnt/data" does not exist

The path /mnt/data has been created and exists on the local machine but cannot be accessed by the container.

and the pod and Persistent volume configuration as below.

apiVersion : v1
kind : PersistentVolume
metadata :
   name : pv1
spec :
  capacity :
    storage : 2Gi
  accessModes :
    - ReadWriteOnce
  persistentVolumeReclaimPolicy : Retain
  storageClassName : local-storage
  local : 
    fsType : ext4
    path : /mnt/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1

---

apiVersion : v1
kind : PersistentVolumeClaim
metadata : 
  name : pvc1
spec :
  resources :
    requests :
      storage : 1Gi
  accessModes :
    - ReadWriteOnce
  storageClassName : local-storage

---

apiVersion : v1
kind : Pod
metadata :
  name : pod1
spec :
  containers:
  - name: www
    image: nginx:alpine
    ports:
      - containerPort: 80
        name: www
    volumeMounts:
      - name: www-store
        mountPath: /usr/share/nginx/html
  volumes :
    - name : www-store
      persistentVolumeClaim :
        claimName : pvc1

Any help would be appreciated.


Solution

  • You are using nodeSelector for the pv, telling it to use node1 for the volume , chances are 1. node1 does not have /mnt/data directory present, which is hostPath for the volume. OR 2. node1 may be having /mnt/data, but the pod is getting scheduled on some other node which does not have /mnt/data directory:

    apiVersion : v1
    kind : PersistentVolume
    metadata :
       name : pv1
    spec :
      capacity :
        storage : 2Gi
      accessModes :
        - ReadWriteOnce
      persistentVolumeReclaimPolicy : Retain
      storageClassName : local-storage
      local : 
        fsType : ext4
        path : /mnt/data
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - node1
    

    Solution: Make sure /mnt/data is present on all schedulable nodes

    OR

    Try modifying your file to add, nodeName or nodeSelector or nodeAffinity to force it to get scheduled on the same node which have proper hostPath. In below example, it is assumed that node1 have /mnt/data directory present.

    apiVersion : v1
    kind : Pod
    metadata :
      name : pod1
    spec :
      nodeName: node1 #<------------this
      containers:
      - name: www
        image: nginx:alpine
        ports:
          - containerPort: 80
            name: www
        volumeMounts:
          - name: www-store
            mountPath: /usr/share/nginx/html
      volumes :
        - name : www-store
          persistentVolumeClaim :
            claimName : pvc1