This guide demonstrates how to expand the persistent storage volumes of a ZooKeeper cluster managed by KubeBlocks.
Volume expansion requires your StorageClass to support volume expansion (allowVolumeExpansion: true).
Before proceeding, verify your environment meets these requirements:
kubectl v1.21+ installed and configured with cluster accessZooKeeper uses two persistent volume types:
data — stores ZooKeeper data snapshotssnapshot-log — stores transaction logsExpand the data volume from 20Gi to 30Gi:
apiVersion: operations.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: zookeeper-volumeexpansion
namespace: demo
spec:
clusterName: zookeeper-cluster
type: VolumeExpansion
volumeExpansion:
- componentName: zookeeper
volumeClaimTemplates:
- name: data
storage: 30Gi
Apply it:
kubectl apply -f https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/zookeeper/volumeexpand.yaml
Monitor progress:
kubectl get ops zookeeper-volumeexpansion -n demo -w
NAME TYPE CLUSTER STATUS PROGRESS AGE
zookeeper-volumeexpansion VolumeExpansion zookeeper-cluster Running 0/3 10s
zookeeper-volumeexpansion VolumeExpansion zookeeper-cluster Succeed 3/3 64s
Update the storage request in the Cluster resource:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: zookeeper-cluster
namespace: demo
spec:
terminationPolicy: Delete
componentSpecs:
- name: zookeeper
componentDef: zookeeper
serviceVersion: 3.9.2
replicas: 3
resources:
requests:
cpu: "0.5"
memory: "0.5Gi"
limits:
cpu: "0.5"
memory: "0.5Gi"
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi # Updated from 20Gi
- name: snapshot-log
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
kubectl get pvc -n demo -l app.kubernetes.io/instance=zookeeper-cluster
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-zookeeper-cluster-zookeeper-0 Bound pvc-xxx 30Gi RWO kb-default-sc 14m
data-zookeeper-cluster-zookeeper-1 Bound pvc-xxx 30Gi RWO kb-default-sc 13m
data-zookeeper-cluster-zookeeper-2 Bound pvc-xxx 30Gi RWO kb-default-sc 13m
snapshot-log-zookeeper-cluster-zookeeper-0 Bound pvc-xxx 20Gi RWO kb-default-sc 14m
snapshot-log-zookeeper-cluster-zookeeper-1 Bound pvc-xxx 20Gi RWO kb-default-sc 13m
snapshot-log-zookeeper-cluster-zookeeper-2 Bound pvc-xxx 20Gi RWO kb-default-sc 13m
kubectl delete cluster zookeeper-cluster -n demo
kubectl delete ns demo