Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Operator configuration

Chart values

ValueDefaultDescription
replicaCount1Keep at one; the Deployment uses Recreate
image.repositoryghcr.io/4thel00z/qdrant-operator
image.tagchart appVersion
image.pullPolicyIfNotPresent
serviceAccount.createtrue
serviceAccount.namerelease full name
resources100m/128Mi requests, 500m/256Mi limitsSnapshot streaming is I/O bound and buffers one megabyte at a time
operator.logLevelINFOloguru level: DEBUG, INFO, WARNING, ERROR
operator.logFormatjsonjson or text

Environment variables

VariableDefaultDescription
LOG_LEVELINFO
LOG_FORMATjsonjson writes one JSON object per line; text is for a terminal
KUBECONFIGin-clusterUsed when no service account token is mounted
HELM_CACHE_HOME, HELM_CONFIG_HOME, HELM_DATA_HOME/tmp/helm/* in the chartWhere the bundled helm keeps its state on the read-only root filesystem

Command line

The qdrant-operator entry point runs

kopf run -m qdrant_operator.handlers --all-namespaces --liveness=http://0.0.0.0:8080/healthz

and appends any arguments you pass, which override the defaults. Useful ones: --namespace <ns> to watch one namespace, --verbose for kopf's own debug output, --standalone to skip peering, --dev for a short peering priority when running next to an in-cluster operator.

RBAC

The chart's ClusterRole grants:

ResourcesVerbsWhy
qdrant.io kindsallWatch and update the seven custom resources; the schedule creates and deletes backups
qdrant.io */statusget, patch, updateStatus subresources
customresourcedefinitionslist, watchkopf checks the CRDs it serves
clusterkopfpeerings.kopf.devallkopf peering between operator instances
eventscreatekopf posts events on handled resources
secretsget, list, watch, create, update, patch, deleteAPI keys, TLS CA and bucket credentials; access key Secrets are written; the chart renders Secrets
services, namespaces, configmaps, serviceaccounts, statefulsets, poddisruptionbudgets, ingresses, servicemonitorsallEverything the qdrant chart may render

Helm runs inside the operator pod with the pod's service account, so the operator needs every permission the chart's objects need.

Timers and retries

WhatInterval
QdrantCluster readiness check30 s, first after 10 s
QdrantCollection reconcile60 s
QdrantAccessKey renewal check60 s
QdrantBackupSchedule tick60 s
QdrantBackup expiry check300 s, only with expiresAt set
Retry after a missing cluster, Secret or not-yet-completed backup30 s
helm command timeout600 s
Qdrant snapshot, recovery, collection, index, scroll and upsert calls3600 s
Other Qdrant calls30 s
Presigned URL lifetime3600 s
Wait for a restored collection to turn greenpoll 5 s, give up after 3600 s

Annotations and finalizer

kopf keeps its handler progress in annotations prefixed qdrant.io/ and the last applied spec under qdrant.io/last-applied-spec. The finalizer on every resource is qdrant.io/finalizer. Removing the finalizer by hand skips the delete handler: the Helm release, the bucket objects or the Qdrant collection then stay. Access key Secrets are removed by owner reference either way.