Skip to content
Helm chart

Helm chart

This page lists every value in the kslate Helm chart and what it does.

Chart kslate, version 0.9.0, app version 0.9.0. kslate — a shared record for agent fleets, with a gateway that checks every write

The chart needs Kubernetes >=1.27.0-0. It lives at deploy/helm/kslate in the repository. For how to install it and what to set on a first run, see the Install page.

Values

KeyTypeDefaultDescription
exampleobject{"createNamespace":false,"enabled":false,"namespace":"kagent"}The design’s example incidents SharedContext, applied as a ready-to-use class. A live policy granting sa:kagent/* write access; off by default.
example.createNamespaceboolfalseCreate the example namespace. Off because a Namespace is shared infrastructure.
example.enabledboolfalseApply the example class.
example.namespacestring"kagent"Namespace for the example class and the ServiceAccounts its roles name.
externalobject{"dsn":"","existingSecret":"","existingSecretKey":""}An external Postgres, used when postgres.enabled is false.
external.dsnstring""Full postgres:// DSN, rendered into the chart’s own Secret. Use sslmode=require or stronger.
external.existingSecretstring""Name of a Secret you manage holding the DSN; nothing about the credential is then in Helm values.
external.existingSecretKeystring""Key in existingSecret holding the DSN (default dsn).
gatewayobject{"apikeysSecret":"","apikeysSecretKey":"apikeys.yaml","grpcPort":0,"identity":"k8s-sa","listenPort":8080,"metricsPort":9100,"podDisruptionBudget":{"enabled":true,"minAvailable":1},"replicas":2,"resources":{"limits":{"cpu":"1","memory":"512Mi"},"requests":{"cpu":"100m","memory":"128Mi"}}}The stateless API gateway (HTTP/JSON + MCP, optional gRPC).
gateway.apikeysSecretstring""Existing Secret holding the --apikeys file. Required when identity includes apikey; the key must be apikeys.yaml unless apikeysSecretKey says otherwise.
gateway.apikeysSecretKeystring"apikeys.yaml"Key within apikeysSecret.
gateway.grpcPortint0gRPC port. 0 disables the gRPC transport.
gateway.identitystring"k8s-sa"Identity providers, comma-separated and tried in order: apikey
gateway.listenPortint8080Port for HTTP/JSON and MCP (/mcp).
gateway.metricsPortint9100Prometheus metrics port, on its own Service (kslate-gateway-metrics). Labels name classes, fields and roles.
gateway.podDisruptionBudgetobject{"enabled":true,"minAvailable":1}PodDisruptionBudget for the gateway, created when replicas is above 1 so a node drain never takes every gateway at once.
gateway.podDisruptionBudget.enabledbooltrueCreate the PodDisruptionBudget.
gateway.podDisruptionBudget.minAvailableint1Gateways that must stay up during a voluntary disruption.
gateway.replicasint2Gateway replicas. All share one Postgres.
gateway.resourcesobject{"limits":{"cpu":"1","memory":"512Mi"},"requests":{"cpu":"100m","memory":"128Mi"}}Resource requests and limits.
imageobject{"pullPolicy":"IfNotPresent","pullSecrets":[],"repository":"kslate","tag":""}Container image for the gateway, worker/controller and CLI. No images are published; build and load your own (README).
image.pullPolicystring"IfNotPresent"Image pull policy.
image.pullSecretslist[]Names of existing image pull Secrets, applied to every pod of the chart.
image.repositorystring"kslate"Image repository. kslate alone resolves to docker.io/library/kslate, which does not exist; set your registry or load the image into kind.
image.tagstring""Image tag. Empty means the chart appVersion; the kind harness sets dev.
networkPolicyobject{"enabled":false,"from":[]}NetworkPolicy restricting who may scrape the two metrics Services, and who may reach the bundled Postgres.
networkPolicy.enabledboolfalseCreate the NetworkPolicy. Needs a CNI that enforces it.
networkPolicy.fromlist[]NetworkPolicyPeer list allowed to scrape, e.g. a namespaceSelector for your monitoring namespace.
postgresobject{"allowDefaultPassword":false,"database":"kslate","enabled":true,"image":"postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea","password":"kslate-dev-only","resources":{"limits":{"cpu":"1","memory":"1Gi"},"requests":{"cpu":"100m","memory":"256Mi"}},"user":"kslate"}Bundled Postgres: one unreplicated pod on an emptyDir, for development only.
postgres.allowDefaultPasswordboolfalsePermit the default password. Throwaway clusters only.
postgres.databasestring"kslate"Database name.
postgres.enabledbooltrueDeploy the bundled Postgres. Set false and configure external for anything beyond development.
postgres.imagestring"postgres:16-alpine@sha256:721873c34ceb9f8d8fc265984940dc982404c105f19ad51be9fdc5970a6080ea"Postgres image, pinned by digest.
postgres.passwordstring"kslate-dev-only"Database password. The chart refuses to render with this default unless allowDefaultPassword is true.
postgres.resourcesobject{"limits":{"cpu":"1","memory":"1Gi"},"requests":{"cpu":"100m","memory":"256Mi"}}Resource requests and limits.
postgres.userstring"kslate"Database user.
serviceMonitorobject{"enabled":false,"interval":"","labels":{}}Prometheus Operator ServiceMonitor for both metrics Services.
serviceMonitor.enabledboolfalseCreate the ServiceMonitor.
serviceMonitor.intervalstring""Scrape interval. Empty uses the Prometheus default.
serviceMonitor.labelsobject{}Labels on the ServiceMonitor objects. Most Prometheus Operator installs select on one (for example release: kube-prometheus-stack); without it the monitors are silently ignored.
tlsobject{"enabled":false,"secretName":""}TLS for the API listener (HTTP/JSON, MCP, and gRPC when enabled). Off by default; otherwise run behind a mesh or TLS-terminating ingress.
tls.enabledboolfalseServe TLS from the gateway itself.
tls.secretNamestring""A kubernetes.io/tls Secret holding tls.crt and tls.key.
watchNamespacestring""Namespace the controller and the gateway watch for SharedContext objects. Empty is cluster-wide. Set it where more than one team creates classes: class names are a flat namespace and a duplicate is refused.
workerobject{"healthPort":8081,"interval":"60s","metricsPort":9090,"resources":{"limits":{"cpu":"500m","memory":"256Mi"},"requests":{"cpu":"50m","memory":"64Mi"}}}The worker-and-controller pod: TTL sweep, lease-lapse marking, SharedContext reconciliation (one replica).
worker.healthPortint8081Worker health port: /readyz (schema present, SharedContext watch healthy) and /healthz, for the probes. Not restricted by the NetworkPolicy.
worker.intervalstring"60s"Sweep interval.
worker.metricsPortint9090Worker metrics port (kslate-worker-metrics).
worker.resourcesobject{"limits":{"cpu":"500m","memory":"256Mi"},"requests":{"cpu":"50m","memory":"64Mi"}}Resource requests and limits.

What the chart installs

ObjectNotes
CRD sharedcontexts.kslate.devInstalled from crds/ before the templates. Helm does not change it on upgrade.
Deployment kslate-gatewaygateway.replicas replicas. The readiness probe is GET /readyz on the API port, which checks that the database schema is present.
Deployment kslate-workerOne replica. It deletes expired records, flags expired leases, runs the SharedContext controller and mirrors class roles into RBAC.
Deployment + Service kslate-postgresOnly when postgres.enabled is true. Uses strategy: Recreate and an emptyDir. For development only.
Secret (Postgres DSN)Built from postgres.* or external.dsn. Not created when you set external.existingSecret.
Service kslate-gatewayPort 80 to the API port. Serves HTTP/JSON and MCP at /mcp, and gRPC when gateway.grpcPort is set.
Services kslate-gateway-metrics, kslate-worker-metricsMetrics, on a separate port from the API.
ServiceAccount kslate-cliOnly when example.enabled is true. For running the kslate CLI inside the cluster; it is the operator role in the example class, which is the only thing that names it.
ClusterRole / ClusterRoleBindingLets the controller watch SharedContext objects and create the per-class RBAC.
ServiceMonitor, NetworkPolicy, example SharedContextEach is created only when you enable it.