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. List Available ZooKeeper Versions
  3. Step 1: Check the Current Version
  4. Step 2: Apply the Upgrade
  5. Step 3: Verify the Upgrade
  6. Cleanup

Upgrading the Minor Version of a ZooKeeper Cluster in KubeBlocks

This guide walks you through upgrading a ZooKeeper cluster to a newer minor version managed by KubeBlocks.

KubeBlocks performs a rolling upgrade: followers are upgraded one by one first, and the leader is upgraded last. This ensures the ensemble maintains quorum and client connections are not interrupted during the upgrade.

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)

    List Available ZooKeeper Versions

    kubectl get componentversion zookeeper
    Example Output
    NAME VERSIONS STATUS AGE zookeeper 3.9.4,3.9.2,3.8.4,3.7.2,3.6.4,3.4.14 Available 6h

    Step 1: Check the Current Version

    kubectl get cluster zookeeper-cluster -n demo \ -o jsonpath='{.spec.componentSpecs[0].serviceVersion}' && echo ""
    Example Output
    3.9.2

    Check the current pod roles:

    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 12m follower zookeeper-cluster-zookeeper-1 2/2 Running 0 13m follower zookeeper-cluster-zookeeper-2 2/2 Running 0 14m leader

    Step 2: Apply the Upgrade

    Upgrade from 3.9.2 to 3.9.4:

    apiVersion: operations.kubeblocks.io/v1alpha1 kind: OpsRequest metadata: name: zk-upgrade namespace: demo spec: clusterName: zookeeper-cluster type: Upgrade upgrade: components: - componentName: zookeeper serviceVersion: "3.9.4"

    Apply it:

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

    Monitor the progress:

    kubectl get ops zk-upgrade -n demo -w
    Example Output
    NAME TYPE CLUSTER STATUS PROGRESS AGE zk-upgrade Upgrade zookeeper-cluster Running 0/3 6s zk-upgrade Upgrade zookeeper-cluster Running 1/3 74s zk-upgrade Upgrade zookeeper-cluster Running 2/3 2m25s zk-upgrade Upgrade zookeeper-cluster Running 3/3 3m34s zk-upgrade Upgrade zookeeper-cluster Succeed 3/3 3m34s

    Update the serviceVersion field in the Cluster resource:

    kubectl patch cluster zookeeper-cluster -n demo --type=json \ -p='[{"op": "replace", "path": "/spec/componentSpecs/0/serviceVersion", "value": "3.9.4"}]'

    Monitor the cluster status:

    kubectl get cluster zookeeper-cluster -n demo -w

    Step 3: Verify the Upgrade

    Check that all pods are running with the new version:

    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 135m follower zookeeper-cluster-zookeeper-1 2/2 Running 0 137m leader zookeeper-cluster-zookeeper-2 2/2 Running 0 138m follower

    Confirm the image version:

    kubectl get pods -n demo zookeeper-cluster-zookeeper-0 \ -o jsonpath='{.spec.containers[?(@.name=="zookeeper")].image}' && echo ""
    Example Output
    docker.io/apecloud/zookeeper:3.9.4

    Cleanup

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

    © 2026 KUBEBLOCKS INC