Helm values

Chart values reference.

Chart source: deploy/helm/krypton.

Common overrides

# values.yaml
image:
  registry: ghcr.io/kryptonhq
  tag: v0.0.4

controlPlane:
  databaseUrl: "postgres://user:pass@host:5432/db"

manager:
  enableWebhooks: false
  enableScaler: true

gateway:
  service:
    type: ClusterIP   # operators add their own ingress in front

Full reference

image

Default image base for all components. Per-component overrides under images.* take precedence.

image:
  registry: ghcr.io/kryptonhq
  tag: ""              # empty → falls back to .Chart.AppVersion
  pullPolicy: IfNotPresent

Leaving tag empty makes the chart pin images at the same version as the chart release (the helper falls back to .Chart.AppVersion), so helm install Just Works without explicit --set image.tag=....

images.*

Per-component image overrides — each accepts repository, tag, pullPolicy.

images:
  manager:      { repository: my-registry/manager, tag: custom }
  controlPlane: {}
  gateway:      {}
  proxy:        {}   # used by manager via --proxy-image

manager

manager:
  replicas: 1
  enableWebhooks: false
  enableScaler: true
  scalerIntervalMs: 1000
  scalerStableWindowMs: 60000
  resources:
    requests: { cpu: 100m, memory: 128Mi }
    limits:   { cpu: 500m, memory: 256Mi }

controlPlane

controlPlane:
  replicas: 1
  databaseUrl: ""           # empty = in-memory store
  service:
    type: ClusterIP
    port: 8090
  resources:
    requests: { cpu: 50m, memory: 64Mi }
    limits:   { cpu: 500m, memory: 256Mi }

gateway

gateway:
  replicas: 1
  maxBufferPerAgent: 100
  pollIntervalMs: 50
  defaultStartupTimeoutMs: 30000
  service:
    type: ClusterIP
    port: 8080
  resources:
    requests: { cpu: 50m, memory: 64Mi }
    limits:   { cpu: 500m, memory: 256Mi }

postgres (optional bundled instance)

For dev installs. Production should use a managed instance and pass controlPlane.databaseUrl.

postgres:
  enabled: false
  image:
    repository: postgres
    tag: "16-alpine"
  auth:
    user: krypton
    password: krypton
    database: krypton
  persistence:
    enabled: false
    size: 1Gi

When postgres.enabled: true and controlPlane.databaseUrl is empty, the chart auto-wires the control plane to the bundled instance via the generated service DNS.

rbac

rbac:
  create: true   # set false if you bring your own

serviceMonitor

Prometheus Operator integration for the three runtime components (manager, control-plane, gateway). Off by default so the chart installs cleanly on clusters without the prometheus-operator CRDs.

serviceMonitor:
  enabled: false
  namespace: ""        # default: release namespace
  labels: {}           # match these against Prometheus's serviceMonitorSelector
  interval: 30s
  scrapeTimeout: 10s
  relabelings: []
  metricRelabelings: []

When the cluster runs kube-prometheus-stack, the typical install is:

helm install krypton oci://ghcr.io/kryptonhq/charts/krypton \
  --namespace krypton-system --create-namespace \
  --set serviceMonitor.enabled=true \
  --set serviceMonitor.labels.release=prom

The labels.release=prom matches the default serviceMonitorSelector applied by kube-prometheus-stack (replace prom with your stack’s release name).

podMonitor

Same idea, for the krypton-proxy sidecar that gets injected into every Agent pod. Sidecars live in dynamic agent namespaces and have no Services of their own, so a PodMonitor (matching on the app.kubernetes.io/managed-by: krypton-runtime label) is the right shape.

podMonitor:
  enabled: false
  namespace: ""
  labels: {}
  namespaceSelector: {} # default: any namespace
                        # restrict via: { matchNames: [agents, prod-agents] }
  interval: 30s
  scrapeTimeout: 10s