Error "ProvisioningFailed no provisionable volume plugin matched" while restoring PVC
search cancel

Error "ProvisioningFailed no provisionable volume plugin matched" while restoring PVC

book

Article ID: 442484

calendar_today

Updated On:

Products

VMware Tanzu Kubernetes Grid Management

Issue/Introduction

 Velero restore operation does not complete successfully and is in PartiallyFailed state post restore.

When we describe the PVC we see following error.

[root@]# kubectl describe pvc <PVC-name> -n >namesapce>

Events:

  Type     Reason              Age                        From                         Message

  ----     ------              ----                       ----                         -------

  Warning  ProvisioningFailed  3m38s (x42947 over 7d10h)  persistentvolume-controller  no provisionable volume plugin matched

Environment

TKGM 2.5.x

Cause

Source cluster relied on a custom external NFS provisioner configured to answer to the kubernetes.io/nfs string and we observe that the nfs deployments is not running healthily in the target cluster.

1. To Identify the StorageClass mapping:

Check all StorageClasses to determine which one is mapped to kubernetes.io/nfs 

kubectl get storageclass -o custom-columns=NAME:.metadata.name,PROVISIONER:.provisioner

2. To Inspect the Provisioner Deployment configuration

kubectl get deployments -A | grep -i nfs

Resolution

Once the NFS share is set up and healthy configure the NFS provisioner correctly by following the below steps 

Prerequisites

  • Helm must be installed on your jump host or management machine.

  • You must have an existing and reachable NFS server IP and an exported path.

Deployment Commands

1. Add and update the official Helm repository:

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update

2. Create a dedicated namespace (optional but recommended):


kubectl create namespace nfs-provisioner

3. Install the deployment via Helm: Replace <nfs-server-ip> and <nfs-exported-path> with your actual NFS storage details.

helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ -n nfs-provisioner \ --set nfs.server=<nfs-server-ip> \ --set nfs.path=<nfs-exported-path> \ --set storageClass.name=nfs-client \ --set storageClass.defaultClass=true \ --set storageClass.archiveOnDelete=false

Verification

Once the Helm installation completes, verify that the provisioner pod is actively running and the StorageClass has been created:

kubectl get pods -n nfs-provisioner