Helm
Deploy Vrata on Kubernetes using the official Helm chart. Includes the control plane, proxy fleet, and optional Kubernetes controller.
The chart is published as an OCI artifact in the GitHub Container Registry — no repo to add.
Install
helm install vrata oci://ghcr.io/achetronic/vrata/helm-chart/vrata \
--namespace vrata \
--create-namespace
This deploys a single control plane node with a persistent volume, one proxy replica, and the controller disabled.
Minimal values
controlPlane:
enabled: true
replicas: 1
config:
controlPlane:
address: ":8080"
storePath: "/data"
proxy:
enabled: true
replicas: 2
config:
proxy:
controlPlaneUrl: "http://vrata-control-plane:8080"
controller:
enabled: false
The config sections are free YAML maps — they’re rendered as-is into the ConfigMap that the pods mount.
With the Gateway API controller
controlPlane:
enabled: true
replicas: 1
config:
controlPlane:
address: ":8080"
storePath: "/data"
proxy:
enabled: true
replicas: 2
config:
proxy:
controlPlaneUrl: "http://vrata-control-plane:8080"
controller:
enabled: true
installCRDs: true
config:
controlPlaneUrl: "http://vrata-control-plane:8080"
watch:
gatewayClassName: "vrata"
This also installs the SuperHTTPRoute CRD and sets up RBAC for the controller.
HA control plane (Raft)
controlPlane:
replicas: 3
config:
controlPlane:
address: ":8080"
storePath: "/data"
raft:
nodeId: "${POD_NAME}"
bindAddress: ":7000"
advertiseAddress: "${POD_IP}:7000"
discovery:
dns: "vrata-control-plane-headless.vrata.svc.cluster.local"
Use 3 or 5 replicas. Avoid even numbers — Raft needs a majority for quorum.
Verify
# Port-forward the control plane
kubectl port-forward -n vrata svc/vrata-control-plane 8080:8080
# Swagger UI
open http://localhost:8080/api/v1/docs/
# Create entities via the API
curl -s -X POST localhost:8080/api/v1/listeners \
-H 'Content-Type: application/json' \
-d '{"name": "main", "port": 3000}'
Uninstall
helm uninstall vrata -n vrata
PersistentVolumeClaims are not deleted automatically. Remove them manually if you want a clean slate:
kubectl delete pvc -n vrata -l app.kubernetes.io/instance=vrata