You are looking at the documentation of a prior release. To read the documentation of the latest release, please visit here.

New to KubeDB? Please start here.

Vertical Scale Weaviate Cluster

This guide will show you how to use the KubeDB Ops Manager to update the resources (CPU and Memory) of a Weaviate cluster.

Before You Begin

  • At first, you need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster.

  • Install KubeDB in your cluster following the steps here.

  • You should be familiar with the following KubeDB concepts:

To keep things isolated, this tutorial uses a separate namespace called demo throughout this tutorial.

$ kubectl create ns demo
namespace/demo created

Note: YAML files used in this tutorial are stored in docs/examples/weaviate/scaling/vertical-scaling folder in GitHub repository kubedb/docs.

Deploy Weaviate

In this section, we are going to deploy a Weaviate cluster using KubeDB. Then, in the next section we will update the resources using a WeaviateOpsRequest.

apiVersion: kubedb.com/v1alpha2
kind: Weaviate
metadata:
  name: weaviate-sample
  namespace: demo
spec:
  version: 1.33.1
  replicas: 3
  storageType: Durable
  storage:
    storageClassName: longhorn
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi
  podTemplate:
    spec:
      containers:
        - name: weaviate
          resources:
            requests:
              cpu: 500m
              memory: 1Gi
            limits:
              cpu: 500m
              memory: 1Gi
  deletionPolicy: WipeOut

Let’s create the Weaviate CR and wait for it to become Ready:

$ kubectl create -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/examples/weaviate/scaling/vertical-scaling/weaviate.yaml
weaviate.kubedb.com/weaviate-sample created

$ kubectl get weaviate -n demo
NAME              TYPE                  VERSION   STATUS   AGE
weaviate-sample   kubedb.com/v1alpha2   1.33.1    Ready    5m

Let’s check the current resources of one of the pods:

$ kubectl get pod -n demo weaviate-sample-0 -o jsonpath='{.spec.containers[0].resources}'
{"limits":{"cpu":"500m","memory":"1Gi"},"requests":{"cpu":"500m","memory":"1Gi"}}

Apply Vertical Scaling on the Weaviate Cluster

Here, we are going to update the resources of the cluster to meet the resources after vertical scaling.

apiVersion: ops.kubedb.com/v1alpha1
kind: WeaviateOpsRequest
metadata:
  name: wvops-vertical-scale
  namespace: demo
spec:
  type: VerticalScaling
  databaseRef:
    name: weaviate-sample
  verticalScaling:
    node:
      resources:
        requests:
          memory: "2Gi"
          cpu: "1"
        limits:
          memory: "2Gi"
          cpu: "1"
  timeout: 5m
  apply: IfReady
  • spec.type specifies that this is a VerticalScaling operation.
  • spec.databaseRef.name specifies that we are performing the operation on weaviate-sample.
  • spec.verticalScaling.node specifies the desired resources for the Weaviate nodes after scaling.
  • spec.verticalScaling.mode specifies how the scaling is actuated — Restart (default, restarts the Pods) or InPlace (resizes the running Pods without a restart, falling back to restart if a Node can’t fit the new resources). See Vertical Scaling Modes.

Let’s create the WeaviateOpsRequest CR:

$ kubectl create -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/examples/weaviate/scaling/vertical-scaling/ops-request.yaml
weaviateopsrequest.ops.kubedb.com/wvops-vertical-scale created

The Ops Manager will update the PetSet resources and restart the pods one by one to apply the new resources.

$ kubectl get weaviateopsrequest -n demo wvops-vertical-scale
NAME                   TYPE              STATUS       AGE
wvops-vertical-scale   VerticalScaling   Successful   2m

Let’s look at the status.conditions of the WeaviateOpsRequest:

$ kubectl get weaviateopsrequest -n demo wvops-vertical-scale -o yaml
apiVersion: ops.kubedb.com/v1alpha1
kind: WeaviateOpsRequest
metadata:
  name: wvops-vertical-scale
  namespace: demo
spec:
  apply: IfReady
  databaseRef:
    name: weaviate-sample
  maxRetries: 1
  timeout: 5m
  type: VerticalScaling
  verticalScaling:
    node:
      resources:
        limits:
          cpu: "1"
          memory: 2Gi
        requests:
          cpu: "1"
          memory: 2Gi
status:
  conditions:
  - message: Weaviate ops-request has started to vertically scaling the Weaviate nodes
    reason: VerticalScaling
    status: "True"
    type: VerticalScaling
  - message: Successfully updated PetSets Resources
    reason: UpdatePetSets
    status: "True"
    type: UpdatePetSets
  - message: get pod; ConditionStatus:True; PodName:weaviate-sample-0
    status: "True"
    type: GetPod--weaviate-sample-0
  - message: evict pod; ConditionStatus:True; PodName:weaviate-sample-0
    status: "True"
    type: EvictPod--weaviate-sample-0
  - message: running pod; ConditionStatus:True; PodName:weaviate-sample-0
    status: "True"
    type: RunningPod--weaviate-sample-0
  - message: get pod; ConditionStatus:True; PodName:weaviate-sample-1
    status: "True"
    type: GetPod--weaviate-sample-1
  - message: evict pod; ConditionStatus:True; PodName:weaviate-sample-1
    status: "True"
    type: EvictPod--weaviate-sample-1
  - message: running pod; ConditionStatus:True; PodName:weaviate-sample-1
    status: "True"
    type: RunningPod--weaviate-sample-1
  - message: get pod; ConditionStatus:True; PodName:weaviate-sample-2
    status: "True"
    type: GetPod--weaviate-sample-2
  - message: evict pod; ConditionStatus:True; PodName:weaviate-sample-2
    status: "True"
    type: EvictPod--weaviate-sample-2
  - message: running pod; ConditionStatus:True; PodName:weaviate-sample-2
    status: "True"
    type: RunningPod--weaviate-sample-2
  - message: Successfully Restarted Pods With Resources
    reason: RestartPods
    status: "True"
    type: RestartPods
  - message: Successfully completed the vertical scaling for Weaviate
    reason: Successful
    status: "True"
    type: Successful
  observedGeneration: 1
  phase: Successful

Now, let’s verify the resources of the cluster have been updated:

$ kubectl get pod -n demo weaviate-sample-0 -o jsonpath='{.spec.containers[0].resources}'
{"limits":{"cpu":"1","memory":"2Gi"},"requests":{"cpu":"1","memory":"2Gi"}}

$ kubectl get weaviate -n demo weaviate-sample -o jsonpath='{.spec.podTemplate.spec.containers[0].resources}'
{"limits":{"cpu":"1","memory":"2Gi"},"requests":{"cpu":"1","memory":"2Gi"}}

The resources have been updated successfully.

In-Place Vertical Scaling

To resize the Pods without a restart, set spec.verticalScaling.mode to InPlace in the WeaviateOpsRequest. The operator resizes the running containers via the Kubernetes pods/resize subresource and only restarts a Pod if its Node cannot accommodate the new resources.

apiVersion: ops.kubedb.com/v1alpha1
kind: WeaviateOpsRequest
metadata:
  name: wvops-vertical-scale-inplace
  namespace: demo
spec:
  type: VerticalScaling
  databaseRef:
    name: weaviate-sample
  verticalScaling:
    mode: InPlace
    node:
      resources:
        requests:
          memory: "2Gi"
          cpu: "1"
        limits:
          memory: "2Gi"
          cpu: "1"
  timeout: 5m
  apply: IfReady

Apply it the same way as above:

$ kubectl create -f https://github.com/kubedb/docs/raw/v2026.10.12/docs/examples/weaviate/scaling/vertical-scaling/ops-request-inplace.yaml
weaviateopsrequest.ops.kubedb.com/wvops-vertical-scale-inplace created

The resources update in place with no Pod restart.

Next Steps

Cleaning Up

To clean up the Kubernetes resources created by this tutorial, run:

$ kubectl delete weaviateopsrequest -n demo wvops-vertical-scale
$ kubectl delete weaviate -n demo weaviate-sample
$ kubectl delete ns demo