New to KubeDB? Please start here.
Reconfigure Weaviate
This guide will show you how to use the KubeDB Ops Manager to reconfigure a Weaviate cluster.
Before You Begin
At first, you need to have a Kubernetes cluster, and the
kubectlcommand-line tool must be configured to communicate with your cluster.Install
KubeDBin your cluster following the steps here.You should be familiar with the following
KubeDBconcepts:
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/reconfigure folder in GitHub repository kubedb/docs.
Deploy Weaviate
In this section, we are going to deploy a Weaviate cluster. We will reconfigure it in the next step.
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
deletionPolicy: WipeOut
Let’s create the Weaviate CR and wait for it to become Ready.
Prepare Reconfigure Helper Resources
The reconfigure operation in this example references a configuration Secret and a backup-credentials Secret. Let’s create them first.
The new configuration Secret (conf.yaml as the key):
apiVersion: v1
kind: Secret
metadata:
name: new-weaviate-config
namespace: demo
type: Opaque
stringData:
conf.yaml: |-
authorization:
admin_list:
enabled: false
rbac:
enabled: false
cluster:
hostname: $(POD_NAME)
debug: false
persistence:
data_path: /var/lib/weaviate
query_defaults:
limit: 200
The backup-credentials Secret:
apiVersion: v1
kind: Secret
metadata:
name: minio-secret
namespace: demo
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: minio
AWS_SECRET_ACCESS_KEY: minio123
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.7.10/docs/examples/weaviate/reconfigure/new-weaviate-config.yaml
secret/new-weaviate-config created
$ kubectl apply -f https://github.com/kubedb/docs/raw/v2026.7.10/docs/examples/weaviate/reconfigure/minio-secret.yaml
secret/minio-secret created
Apply Reconfigure OpsRequest
Now, we are going to reconfigure the cluster. The OpsRequest below references the new configuration Secret, applies an inline applyConfig (which is merged on top), and sets a backup-credentials Secret.
apiVersion: ops.kubedb.com/v1alpha1
kind: WeaviateOpsRequest
metadata:
name: reconfigure
namespace: demo
spec:
type: Reconfigure
databaseRef:
name: weaviate-sample
timeout: 3m
apply: Always
configuration:
applyConfig:
conf.yaml: |-
query_defaults:
limit: 155
configSecret:
name: new-weaviate-config
backupConfigSecret:
name: minio-secret
spec.typespecifies that this is aReconfigureoperation.spec.configuration.configSecretreferences theSecretholding the newconf.yaml.spec.configuration.applyConfigprovides inline configuration that is merged on top of the configuration from the Secret. Here it overridesquery_defaults.limitto155.spec.configuration.backupConfigSecretreferences aSecretholding backup credentials.
Let’s create the WeaviateOpsRequest CR:
$ kubectl create -f https://github.com/kubedb/docs/raw/v2026.7.10/docs/examples/weaviate/reconfigure/ops-request.yaml
weaviateopsrequest.ops.kubedb.com/reconfigure created
The Ops Manager prepares the new configuration, updates the PetSet, and restarts the pods one by one.
$ kubectl get weaviateopsrequest -n demo reconfigure
NAME TYPE STATUS AGE
reconfigure Reconfigure Successful 83s
Let’s check the status.conditions of the WeaviateOpsRequest:
$ kubectl get weaviateopsrequest -n demo reconfigure -o yaml
...
status:
conditions:
- message: Weaviate ops-request has started to reconfigure Weaviate nodes
reason: Reconfigure
status: "True"
type: Reconfigure
- message: Successfully prepared user provided apply configs
reason: PrepareApplyConfig
status: "True"
type: PrepareApplyConfig
- message: successfully reconciled the Weaviate with new configure
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: Successfully restarted all nodes
reason: RestartNodes
status: "True"
type: RestartNodes
- message: Successfully completed reconfigure Weaviate
reason: Successful
status: "True"
type: Successful
observedGeneration: 1
phase: Successful
Now, let’s verify that the new configuration has been applied to the Weaviate object:
$ kubectl get weaviate -n demo weaviate-sample -o jsonpath='{.spec.configuration}' | jq
{
"backupConfigSecret": {
"name": "minio-secret"
},
"inline": {
"conf.yaml": "query_defaults:\n limit: 155\n"
},
"secretName": "new-weaviate-config"
}
The reconfigure operation has been applied successfully.
Next Steps
- Detail concepts of Weaviate object.
- Learn how to supply a custom configuration at provisioning time.
- Want to hack on KubeDB? Check our contribution guidelines.
Cleaning up
To cleanup the Kubernetes resources created by this tutorial, run:
$ kubectl delete weaviateopsrequest -n demo reconfigure
$ kubectl delete weaviate -n demo weaviate-sample
$ kubectl delete ns demo































