Resizing PVC in Kubernetes With Kubectl edit

Viewed 7799

Recently I tried to resize PersistentVolumeClaim with help of Kubectl edit pvc to increase storage from 10 Gi to 70 Gi but it’s giving error:

persistentvolumeclaims "myclaim" was not valid:
* spec: Forbidden: spec is iimmutable after creation except resources.requests for bound claims

How can I do this with out error with help of Kubectl edit.

Screen of error

1 Answers

I have verified this on my GKE test cluster which supports Dynamic Provisioning. As I mentioned in comments, you are trying to edit spec part of PersistentVolumeClaim which is immutable, except resources.requests.

However, storage field path is spec.resources.requests.storage and I do not have any issue with editing this. When you are using kubectl edit as default it's using vi editor which controls might be hard/it's easy for a typo. I guess you accidentally changed more than just storage in your example (maybe typo in selectors, labels).

You can always use another editor like nano. KUBE_EDITOR="nano" kubectl edit pvc <pvc-name>

For test Ive used This YAML on GKE cluster.

$ kubectl get pvc
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mongodb-pv-claim   Bound    pvc-802714bf-3922-4b41-b70f-97394f252a00   10Gi       RWO            standard       16s

Instead of editing resource you can also patch resources.

kubectl patch pvc <pvc-name> -p '{"spec":{"resources":{"requests":{"storage":"70Gi"}}}}}'

$ kubectl patch pvc mongodb-pv-claim -p '{"spec":{"resources":{"requests":{"storage":"70Gi"}}}}}'
persistentvolumeclaim/mongodb-pv-claim patched

After that, if you will describe PVC you can find information like below:

Conditions:
  Type                      Status  LastProbeTime                     LastTransitionTime                Reason  Message
  ----                      ------  -----------------                 ------------------                ------  -------
  FileSystemResizePending   True    Mon, 01 Jan 0001 00:00:00 +0000   Fri, 25 Sep 2020 06:40:17 +0000           Waiting for user to (re-)start a pod to finish
 file system resize of volume on node.

After while:

$ kubectl get pvc
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mongodb-pv-claim   Bound    pvc-802714bf-3922-4b41-b70f-97394f252a00   70Gi       RWO            standard       8m37s

Please keep in mind that as per error message, that it's wokring only for bound claims.

If patch or edit with nano won't work for you, please provide your PVC yaml.

EDIT

As per OP's comment below answer, creating storageclass which supports Dynamic Provisioning resolved this issue.

Related