Skip to content

Deploy with Helm

The official Helm chart is published to GitHub Container Registry as an OCI artifact.

Install

helm install gvdb oci://ghcr.io/jonathanberhe/charts/gvdb \
  --namespace gvdb --create-namespace

Connect from outside the cluster:

kubectl port-forward -n gvdb svc/gvdb-proxy 50050:50050

Upgrade

helm upgrade gvdb oci://ghcr.io/jonathanberhe/charts/gvdb \
  --namespace gvdb \
  --set image.tag=v1.2.0

Values reference

The chart is intentionally minimal. Exposed keys mirror deploy/helm/gvdb/values.yaml — follow that file for the source of truth.

image

Parameter Default Description
image.repository gvdb Container image name
image.tag "" (falls back to Chart.appVersion) Image tag
image.pullPolicy IfNotPresent

coordinator

Parameter Default Description
coordinator.replicas 1 Coordinators (use 3 for Raft quorum in production)
coordinator.singleNode true Run as single-node embedded coordinator
coordinator.resources see values.yaml CPU/memory requests and limits
coordinator.storage.size 1Gi PVC size for Raft log
coordinator.storage.storageClass "" (cluster default) StorageClass override

dataNode

Parameter Default Description
dataNode.replicas 2 Data nodes — scale for storage + insert throughput
dataNode.memoryLimitGb 4 Memory budget for vector storage
dataNode.resources see values.yaml CPU/memory requests and limits
dataNode.storage.size 5Gi PVC size per data node
dataNode.storage.storageClass "" StorageClass override

queryNode

Parameter Default Description
queryNode.replicas 1 Query nodes — scale for QPS
queryNode.memoryLimitGb 4 Memory budget
queryNode.resources see values.yaml CPU/memory requests and limits
queryNode.storage.size 2Gi PVC size
queryNode.storage.storageClass "" StorageClass override

proxy

Parameter Default Description
proxy.replicas 1 Proxy replicas (horizontally scalable)
proxy.resources see values.yaml CPU/memory requests and limits
proxy.service.type ClusterIP ClusterIP, NodePort, or LoadBalancer
proxy.service.port 50050 gRPC port
proxy.service.nodePort "" Explicit NodePort when type: NodePort

config (server-side config ConfigMap)

Parameter Default
config.server.maxMessageSizeMb 256
config.server.maxConcurrentStreams 1000
config.storage.segmentMaxSizeMb 512
config.storage.walBufferSizeMb 64
config.storage.enableCompression true
config.storage.compactionThreads 2
config.index.defaultIndexType "HNSW"
config.index.hnswM 16
config.index.hnswEfConstruction 200
config.index.hnswEfSearch 100
config.logging.level "info"
config.logging.consoleEnabled true
config.logging.fileEnabled false

ui

Parameter Default Description
ui.enabled false Deploy the GVDB Web UI alongside the cluster
ui.image.repository ghcr.io/jonathanberhe/gvdb-ui UI image
ui.image.tag latest UI tag
ui.port 8080 Container port
ui.service.type ClusterIP
ui.service.port 8080

What the chart does not surface (yet)

The following are not Helm-parameterized. Configure them by mounting a custom gvdb-config.yaml ConfigMap / Secret that overrides the values the chart renders, or patch the StatefulSet directly:

  • Authentication / RBAC — API keys, RBAC users (see Security)
  • TLS — mutual TLS material (certificates, keys)
  • Audit logging
  • Prometheus ServiceMonitor
  • Object storage (S3 / MinIO) for tiered storage — the server supports it, but the chart doesn't expose the knobs

Contributions to expose these in the Helm chart are welcome.

Example: small production setup

values.prod.yaml
image:
  tag: v1.2.0

coordinator:
  replicas: 3
  singleNode: false

dataNode:
  replicas: 5
  memoryLimitGb: 16
  storage:
    size: 200Gi
    storageClass: gp3

queryNode:
  replicas: 3

proxy:
  replicas: 2
  service:
    type: LoadBalancer

config:
  index:
    defaultIndexType: "AUTO"
  logging:
    level: "info"

ui:
  enabled: true
helm upgrade --install gvdb oci://ghcr.io/jonathanberhe/charts/gvdb \
  --namespace gvdb --create-namespace \
  -f values.prod.yaml

See also