Source:
docs/manual/kubernetes-deployment.mdThis page is generated by
site/scripts/sync-manual-docs.mjs.
Kubernetes Deployment Guide
Prerequisites
- Kubernetes 1.28+
- Helm 3.14+
- kubectl configured for the target cluster
- Access to
ghcr.io/cruvero/* - Vault Secrets Operator (optional, for Vault-backed secrets)
- Argo CD 2.10+ (optional, for GitOps)
- Prometheus Operator (optional, for ServiceMonitor discovery)
Quick Start (Dev)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add qdrant https://qdrant.github.io/qdrant-helm
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
helm repo update
helm dependency build charts/cruvero
helm install cruvero charts/cruvero \
-f charts/cruvero/values-dev.yaml \
--namespace cruvero-dev \
--create-namespace
Building Container Images
CI image builds are defined in .github/workflows/build-images.yaml.
Manual example:
docker build -f docker/Dockerfile.worker -t ghcr.io/cruvero/worker:dev .
docker push ghcr.io/cruvero/worker:dev
Chart Configuration
Key value groups in charts/cruvero/values.yaml:
- Service blocks (
worker,api,ui,graphWorker,embedWorker) for replicas, resources, and HPA envmap forCRUVERO_*runtime configuration- Infrastructure dependencies (
postgresql,qdrant,natsas subcharts;dragonflydbas native template) vaultfor Vault secret sync configurationingressfor external routing/TLSmonitoringfor ServiceMonitor generationsecretsfor non-Vault runtime secret source (existingSecretor chart-managed secret data)
Vault Setup
The chart follows the Vault Secrets Operator pattern:
vault.enabled=truerendersVaultStaticSecretvault.authRefpoints at an existingVaultAuthin the same namespace (recommended)- optionally set
vault.createAuth=trueto have the chart createVaultAuth
vault kv put secret/cruvero \
CRUVERO_POSTGRES_URL="postgres://..." \
CRUVERO_OPENAI_CHAT_API_KEY="sk-..." \
CRUVERO_EMBEDDING_API_KEY="sk-..." \
CRUVERO_PII_HMAC_KEY="..."
helm install cruvero charts/cruvero \
-f charts/cruvero/values-staging.yaml \
--set vault.enabled=true \
--set vault.authRef=default
If Vault is disabled, provide a Kubernetes Secret source explicitly:
kubectl create secret generic cruvero-dev-secrets -n cruvero-dev \
--from-literal=CRUVERO_POSTGRES_URL='postgres://...'
helm install cruvero charts/cruvero \
-f charts/cruvero/values-dev.yaml \
--set vault.enabled=false \
--set secrets.existingSecret=cruvero-dev-secrets
Argo CD Setup (GitOps)
kubectl apply -f deploy/argocd/project.yaml
kubectl apply -f deploy/argocd/applicationset.yaml
argocd app list | grep cruvero
devtracks branchdevwith auto-syncstagingtracksmainwith auto-syncprodtracksmainwith manual sync (no auto-sync)
Monitoring
helm upgrade cruvero charts/cruvero \
--namespace cruvero-dev \
--set monitoring.enabled=true
kubectl get servicemonitors -n cruvero-dev
Scaling and HA
Use Helm values for replica counts and HPA ranges:
worker.replicaCount,api.replicaCount, etc.worker.hpa.*andapi.hpa.*- Topology spread constraints are enabled automatically when replicas are > 1
- PDBs are generated automatically for services with replicas > 1
Probe/port defaults are service-specific:
worker: probe server:8082with/healthzand/readyzapi: port8900with/v1/healthand/v1/health/readyui: port8080with/api/healthgraph-workerandembed-worker: probes disabled by default (no HTTP probe server)
For detailed HA guidance, see docs/operations/ha-deployment.md.
Troubleshooting
- Migration hook failures:
kubectl logs job/<release>-cruvero-migrate -n cruvero-dev
- Service startup failures:
kubectl get configmap,secret -n cruvero-dev | grep cruvero
- Health check failures:
kubectl describe pod <pod-name> -n cruvero-dev
- Vault sync failures:
kubectl get vaultstaticsecret -n cruvero-dev
kubectl describe vaultstaticsecret <name> -n cruvero-dev
For bare-metal/non-Kubernetes deployment details, see docs/manual/debian-deploy.md.