KubeBlocks
BlogsEnterprise
⌘K
​
Blogs

Overview
Quickstart
Architecture

Operations

Lifecycle Management
Vertical Scaling
Horizontal Scaling
Volume Expansion
Configuration
Minor Version Upgrade
Manage Services

Backup And Restore

Backup
Restore

Monitoring

Observability for ZooKeeper Clusters
FAQs
  1. Prerequisites
  2. Stopping the Cluster
    1. Verify Cluster Stop
  3. Starting the Cluster
    1. Verify Cluster Start
  4. Restarting the Cluster
    1. Verify Restart Completion
  5. Cleanup

ZooKeeper Cluster Lifecycle Management

This guide demonstrates how to manage a ZooKeeper cluster's operational state in KubeBlocks, including:

  • Stopping the cluster to conserve resources
  • Starting a stopped cluster
  • Restarting cluster components
OperationEffectUse Case
StopSuspends cluster, retains storageCost savings, maintenance
StartResumes cluster operationRestore service after pause
RestartRecreates pods for componentConfiguration changes, troubleshooting

Prerequisites

    Before proceeding, verify your environment meets these requirements:

    • A functional Kubernetes cluster (v1.21+ recommended)
    • kubectl v1.21+ installed and configured with cluster access
    • Helm installed (installation guide)
    • KubeBlocks installed (installation guide)
    • ZooKeeper Add-on installed and a ZooKeeper cluster running (see Quickstart)

    Stopping the Cluster

    Stopping a ZooKeeper cluster in KubeBlocks will:

    1. Terminate all running pods
    2. Retain persistent storage (PVCs)
    3. Maintain cluster configuration
    apiVersion: operations.kubeblocks.io/v1alpha1 kind: OpsRequest metadata: name: zookeeper-stop namespace: demo spec: clusterName: zookeeper-cluster type: Stop

    Apply it:

    kubectl apply -f https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/zookeeper/stop.yaml
    kubectl patch cluster zookeeper-cluster -n demo --type='json' -p='[ { "op": "add", "path": "/spec/componentSpecs/0/stop", "value": true } ]'

    Verify Cluster Stop

    kubectl get cluster zookeeper-cluster -n demo -w
    Example Output
    NAME CLUSTER-DEFINITION TERMINATION-POLICY STATUS AGE zookeeper-cluster Delete Stopping 6m zookeeper-cluster Delete Stopped 6m55s

    Verify no running pods:

    kubectl get pods -n demo -l app.kubernetes.io/instance=zookeeper-cluster
    Example Output
    No resources found in demo namespace.

    Confirm persistent volumes remain:

    kubectl get pvc -n demo -l app.kubernetes.io/instance=zookeeper-cluster
    Example Output
    NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-zookeeper-cluster-zookeeper-0 Bound pvc-xxx 20Gi RWO kb-default-sc 8m data-zookeeper-cluster-zookeeper-1 Bound pvc-xxx 20Gi RWO kb-default-sc 8m data-zookeeper-cluster-zookeeper-2 Bound pvc-xxx 20Gi RWO kb-default-sc 8m snapshot-log-zookeeper-cluster-zookeeper-0 Bound pvc-xxx 20Gi RWO kb-default-sc 8m snapshot-log-zookeeper-cluster-zookeeper-1 Bound pvc-xxx 20Gi RWO kb-default-sc 8m snapshot-log-zookeeper-cluster-zookeeper-2 Bound pvc-xxx 20Gi RWO kb-default-sc 8m

    Starting the Cluster

    apiVersion: operations.kubeblocks.io/v1alpha1 kind: OpsRequest metadata: name: zookeeper-start namespace: demo spec: clusterName: zookeeper-cluster type: Start

    Apply it:

    kubectl apply -f https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/zookeeper/start.yaml
    kubectl patch cluster zookeeper-cluster -n demo --type='json' -p='[ { "op": "remove", "path": "/spec/componentSpecs/0/stop" } ]'

    Verify Cluster Start

    kubectl get cluster zookeeper-cluster -n demo -w
    Example Output
    NAME CLUSTER-DEFINITION TERMINATION-POLICY STATUS AGE zookeeper-cluster Delete Updating 9m zookeeper-cluster Delete Running 9m48s
    kubectl get pods -n demo -l app.kubernetes.io/instance=zookeeper-cluster -L kubeblocks.io/role
    Example Output
    NAME READY STATUS RESTARTS AGE ROLE zookeeper-cluster-zookeeper-0 2/2 Running 0 107s follower zookeeper-cluster-zookeeper-1 2/2 Running 0 94s leader zookeeper-cluster-zookeeper-2 2/2 Running 0 80s follower

    Restarting the Cluster

    Restart recreates pods without full cluster stop, useful for:

    • Configuration changes requiring pod restart
    • Resource refresh
    • Troubleshooting
    apiVersion: operations.kubeblocks.io/v1alpha1 kind: OpsRequest metadata: name: zookeeper-restart namespace: demo spec: clusterName: zookeeper-cluster type: Restart restart: - componentName: zookeeper

    Apply it:

    kubectl apply -f https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/zookeeper/restart.yaml

    Verify Restart Completion

    kubectl get ops zookeeper-restart -n demo -w
    Example Output
    NAME TYPE CLUSTER STATUS PROGRESS AGE zookeeper-restart Restart zookeeper-cluster Running 0/3 10s zookeeper-restart Restart zookeeper-cluster Running 1/3 94s zookeeper-restart Restart zookeeper-cluster Running 2/3 2m40s zookeeper-restart Restart zookeeper-cluster Running 3/3 3m45s zookeeper-restart Restart zookeeper-cluster Succeed 3/3 4m51s
    kubectl get pods -n demo -l app.kubernetes.io/instance=zookeeper-cluster -L kubeblocks.io/role
    Example Output
    NAME READY STATUS RESTARTS AGE ROLE zookeeper-cluster-zookeeper-0 2/2 Running 0 3m43s follower zookeeper-cluster-zookeeper-1 2/2 Running 0 2m1s follower zookeeper-cluster-zookeeper-2 2/2 Running 0 4m51s leader

    Cleanup

    kubectl delete cluster zookeeper-cluster -n demo kubectl delete ns demo

    © 2026 KUBEBLOCKS INC