AKS: Resize Private Volume Claim to expand a Managed Premium Disk

If you deployed a private volume claim using the managed-premium storage class, then ran out of space and now you are searching how to expand the disk to a larger disk, this is how you can do it from scratch:

manage-premium storage class is a premium storage class that allows volume expansion: allowVolumeExpansion: true.

Create a private volume claim using a managed-premium storage class:

Create a pvc.yaml file with the following contents:

 1apiVersion: v1
 2kind: PersistentVolumeClaim
 3metadata:
 4  name: nginx-pvc
 5spec:
 6  accessModes:
 7    - ReadWriteOnce
 8  resources:
 9    requests:
10      storage: 128Gi
11  storageClassName: managed-premium

and deploy it to your cluster:

1kubectl apply -f pvc.yaml

Create a deployment that uses the PVC:

Create a deployment.yaml file with the following contents:

 1apiVersion: apps/v1
 2kind: Deployment
 3metadata:
 4  name: nginx
 5  labels:
 6    app: nginx
 7spec:
 8  replicas: 1
 9  selector:
10    matchLabels:
11      app: nginx
12  template:
13    metadata:
14      labels:
15        app: nginx
16    spec:
17      containers:
18      - name: nginx
19        image: nginx
20        volumeMounts:
21        - mountPath: "/mnt/azure"
22          name: volume
23      volumes:
24        - name: volume
25          persistentVolumeClaim:
26            claimName: nginx-pvc

and deploy it to your cluster:

1kubectl apply -f deployment.yaml

Check the PVC status:

To check the status of the PVC, run the following command:

1kubectl get pvc -w

Create a test file by running the following command:

1kubectl exec -it $(kubectl get po -l "app=nginx" -o name) -- sh -c "echo 'Very important file' > /mnt/azure/test.file"

Resize the PVC and expand the disk:

Scale the deployment to 0 replicas:

1kubectl scale --replicas=0 deployment nginx

Check the status of the attached disk:

1$resourceGroupName="<your aks resource group>"
2$aksName="<your aks name>"
3$resourceGroup=$(az aks show --resource-group $resourceGroupName --name $aksName --query "nodeResourceGroup" --output tsv)
4az disk list --resource-group $resourceGroup --query "[[0].diskState, [0].diskSizeGb]"

You should get the following result:

1[
2  "Unattached",
3  256
4]

Note: I only had one disk attached to the AKS cluster, so I am using the first disk.

Resize the PVC:

 1apiVersion: v1
 2kind: PersistentVolumeClaim
 3metadata:
 4  name: nginx-pvc
 5spec:
 6  accessModes:
 7    - ReadWriteOnce
 8  resources:
 9    requests:
10      storage: 256Gi
11  storageClassName: managed-premium
12  volumeName: nginx-pv

and deploy it to your cluster:

1kubectl apply -f pvc.yaml

Scale the deployment back to 1 replicas:

1kubectl scale --replicas=1 deployment nginx

and check the po status:

1kubectl get po -w

Check the size of the disk:

Check again the status and size of the attached disk:

1$resourceGroupName="<your aks resource group>"
2$aksName="<your aks name>"
3$resourceGroup=$(az aks show --resource-group $resourceGroupName --name $aksName --query "nodeResourceGroup" --output tsv)
4az disk list --resource-group $resourceGroup --query "[[0].diskState, [0].diskSizeGb]"

You should get the following result:

1[
2  "Attached",
3  256
4]

and finally check the contents of the test file:

1kubectl exec $(kubectl get po -l "app=nginx" -o name) -- sh -c "cat /mnt/azure/test.file"

Hope it helps!!!


AKS: Open Service Mesh Traffic Access Control
Azure Cache for Redis: Failover Test
comments powered by Disqus