Increasing size of persistent disks on kubernetes

8/9/2017

Suppose I have a one node Database service (PostgreSQL, MySQL, whatever...) deployed on kubernetes using a PersistentVolumeClaim of 10G That will be running on GKE or AWS or Azure (It does not really matter). What is the procedure to scale up the disk to 20G? Is there a way, for instance, to have a PVC bind to a existing disk (a snapshot of the 10G disk) or something like that?

What I want is to increase the storage size of a disk that belongs to a PVC AND maintain the old data (the disk will not necessarily be a database, so I'm not looking to restore a database backup or something like that).

I'm looking for something like: take a snapshot of the old disk, create a bigger disk from the snapshot and "make the PVC use the new disk".

Thank you

-- Daniel Ferreira Jorge
kubernetes

2 Answers

1/5/2020

In Kubernetes v1.11 the persistent volume expansion feature is being promoted to beta.

https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/

Enable this by setting the allowVolumeExpansion field to true in StorageClass. Then any PVC created from this StorageClass can be edited to request more space. And finally, the pod(s) referencing the volume should be restarted

-- Mir Shahriar Sabuj
Source: StackOverflow

2/9/2018

You have a PVC with PV 10G. You want to increase its size. Unfortunately resize is not supported yet. So, you need to create new PVC with 20G size.

Lets say, your existing PVC with 10G called older.

Follow these steps:

Step 1: Create new PVC with 20G, lets say its called latest.

Step 2: Mount older & latest both in a container. Copy data from older to latest.

Step 3: Delete PVC older, we do not need older any more. Data copied to latest PV.

Step 4: Make PV of latest Available.

$ kubectl get pvc latest
NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
latest    Bound     pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            standard       30s

Edit PV pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6 to set persistentVolumeReclaimPolicy to Retain. So that deleting PVC will not delete PV.

Now, delete PVC latest.

$ kubectl delete pvc latest

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM            STORAGECLASS   REASON    AGE
pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            Retain           Released   default/latest   standard                 3m

See the status, PV is Released.

Now, make this latest PV available to be claimed by another PVC, our older as we want to use 20G under this PVC older.

Edit PV again to remove claimRef

$ kubectl edit pv pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            Retain           Available             standard                 6m

Now the status of PV is Available.

Step 5: Claim latest PV by older PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: older
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6
  resources:
    requests:
      storage: 10Gi

Use volumeName pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6

$ kubectl get pvc,pv
NAME          STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc/older   Bound     pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            standard       9s

NAME                                          CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM            STORAGECLASS   REASON    AGE
pv/pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            Retain           Bound     default/older   standard                 9m

Finally: Set persistentVolumeReclaimPolicy to Delete

This is how, your PVC older has had latest PV with 20G.

-- Mir Shahriar Sabuj
Source: StackOverflow