Skip to content

For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.

kagent

Page as Markdown

kagent Helm chart configuration reference

A Helm chart for kagent, built with Google ADK

Requirements

RepositoryNameVersion
${SUBSTRATE_REPO}substrate${SUBSTRATE_VERSION}
file://../tools/grafana-mcpgrafana-mcp
file://../tools/querydocquerydoc
https://oauth2-proxy.github.io/manifestsoauth2-proxy~10.7.0
oci://ghcr.io/kagent-dev/kmcp/helmkmcp${KMCP_VERSION}
oci://ghcr.io/kagent-dev/tools/helmkagent-tools0.2.1

Values

KeyTypeDefaultDescription
annotationsobject{}Additional annotations to add to all Kubernetes deployment resources
controller.a2aBaseUrlstringhttp://<fullname>-controller.<namespace>.svc:<port>The base URL of the A2A Server endpoint, as advertised to clients.
controller.a2aClientTimeoutstring"" (no timeout)HTTP client timeout for A2A requests from the controller to agent pods. 0 (the default) means no timeout, which is correct for SSE-based streaming agents that can run for an arbitrarily long time. The previous implicit default was 3m (inherited from the a2a-go SDK), which caused context deadline exceeded errors for agents that take longer than 3 minutes to complete. Set a positive Go duration string (e.g. “30m”, “1h”) only if you need a hard upper bound on individual A2A calls.
controller.a2aGatewayUrlstringhttp://<fullname>-controller.<namespace>.svc:<grpc-port>Public gRPC URL advertised by AgentInstance Agent Cards.
controller.affinityobject{}Affinity rules for the controller pod.
controller.agentImage.registrystring""
controller.agentImage.repositorystring"kagent-dev/kagent/app"
controller.agentImage.tagstring""
controller.annotationsobject{}Additional annotations to add to the controller Deployment metadata
controller.auth.modestring"unsecure"
controller.auth.userIdClaimstring""
controller.envlist[]
controller.envFromlist[]
controller.goAgentImageobject{"registry":"","repository":"kagent-dev/kagent/golang-adk","tag":""}The image used for the Go (ADK) runtime agent.
controller.grpcobject{"bindAddress":":8084","maxMessageBytes":16777216,"reflection":false,"tlsCertFile":"","tlsKeyFile":""}Native gRPC application API settings. This port is internal unless a separate TLS-capable GRPCRoute or ingress is configured.
controller.image.pullPolicystring""
controller.image.registrystring""
controller.image.repositorystring"kagent-dev/kagent/controller"
controller.image.tagstring""
controller.loglevelstring"info"
controller.mcpEgressPlaintextboolfalseRewrite RemoteMCPServer tool URLs and the controller’s tool-discovery dial from https://host[:port] to http://host:<port-or-443> so MCP traffic egresses in plaintext to a proxy that originates TLS upstream off by default.
controller.metricsobjectdisabledPrometheus-style /metrics endpoint for the controller manager. When enabled, provisions a dedicated metrics Service plus the ClusterRoles required for authenticated scrapes. Bind <fullname>-metrics-reader to your Prometheus ServiceAccount to grant scrape access. Use bindAddress for any port change: the Service targetPort and the pod containerPort are derived from it at template time, so overriding METRICS_BIND_ADDRESS via controller.env shifts only the runtime listener and leaves the rendered Service pointing at the chart-time port. Setting bindAddress: "0" (or empty) is treated as a disable signal — equivalent to enabled: false — to keep faith with the controller binary’s documented contract for --metrics-bind-address.
controller.nodeSelectorobject{}Node labels to match for Pod scheduling.
controller.pdbobject{"annotations":{},"enabled":false,"labels":{},"maxUnavailable":1,"minAvailable":null,"unhealthyPodEvictionPolicy":""}PodDisruptionBudget for the controller pods. Disabled by default: controller.replicas is 1, and a minAvailable: 1 budget on a single-replica Deployment blocks every voluntary eviction, so node drains and cluster upgrades hang indefinitely. Raise controller.replicas before switching to minAvailable.
controller.pdb.annotationsobject{}Annotations for the controller PodDisruptionBudget.
controller.pdb.enabledboolfalseSet to true to create the PodDisruptionBudget.
controller.pdb.labelsobject{}Additional labels for the controller PodDisruptionBudget.
controller.pdb.maxUnavailableint1Maximum number of pods that may be unavailable. Int or percentage string (e.g. 1 or "50%"). Mutually exclusive with minAvailable.
controller.pdb.minAvailablestringunset (maxUnavailable is used instead)Minimum number of pods that must remain available. Int or percentage string (e.g. 1 or "50%"). Mutually exclusive with maxUnavailable.
controller.pdb.unhealthyPodEvictionPolicystring"" (defer to the Kubernetes default)spec.unhealthyPodEvictionPolicy, one of IfHealthyBudget (the Kubernetes default) or AlwaysAllow. AlwaysAllow lets unhealthy pods be evicted even when the budget is exhausted, which avoids drains wedging on a crash-looping pod. Requires Kubernetes >= 1.27. Omitted from the manifest when empty.
controller.podAnnotationsobject{}
controller.podLabelsobject{}Additional labels for the controller pod template, merged over the global podLabels (per-key; component keys win). Selector labels can never be overridden.
controller.readinessProbeobjecthttpGet /health on port http, periodSeconds=30Custom readiness probe for the controller container. Setting a value replaces the default probe entirely — include a handler (httpGet / exec / tcpSocket / grpc) when overriding.
controller.replicasint1
controller.resources.limits.cpuint2
controller.resources.limits.memorystring"512Mi"
controller.resources.requests.cpustring"100m"
controller.resources.requests.memorystring"128Mi"
controller.service.annotationsobject{}
controller.service.ports.grpcint8084
controller.service.ports.portint8083
controller.service.ports.targetPortint8083
controller.service.typestring"ClusterIP"
controller.serviceAccountobject{"annotations":{}}ServiceAccount settings for the controller pod
controller.serviceAccount.annotationsobject{} (no extra annotations)Annotations to add to the controller ServiceAccount. Useful for GCP Workload Identity, AWS IRSA, or Azure Workload Identity.
controller.skillsInitImageobject{"registry":"","repository":"kagent-dev/kagent/skills-init","tag":""}The image used by the skills-init container to clone skills from Git and pull OCI skill images.
controller.startupProbeobjecthttpGet /health on port http, periodSeconds=15, initialDelaySeconds=15Custom startup probe for the controller container. Setting a value replaces the default probe entirely — include a handler (httpGet / exec / tcpSocket / grpc) when overriding.
controller.streamingstringnil@deprecated Removed in 0.10.0. The A2A SDK now handles SSE buffering and timeouts internally. These values have no effect and will be removed in a future release.
controller.substrate.ateApiEndpointstring""
controller.substrate.ateApiServer.namespacestring"ate-system"
controller.substrate.ateApiServer.serviceAccountstring"ate-api-server"
controller.substrate.atenetRouterURLstring""
controller.substrate.defaultWorkerPool.namestring""
controller.substrate.defaultWorkerPool.namespacestring""
controller.substrate.enabledboolfalse
controller.tolerationslist[]Node taints which will be tolerated for Pod scheduling.
controller.topologySpreadConstraintslist[]Topology spread constraints for the controller pod.
controller.volumeMountslist[]
controller.volumeslist[]
controller.watchNamespaceslist[] (watches all available namespaces)Namespaces the controller should watch. If empty, the controller will watch ALL available namespaces.
database.postgres.bundledobject{"enabled":true,"image":{"name":"postgres","pullPolicy":"IfNotPresent","registry":"docker.io","repository":"library","tag":"18.3-alpine"},"podSecurityContext":{"fsGroup":999,"runAsGroup":999,"runAsNonRoot":true,"runAsUser":999,"seccompProfile":{"type":"RuntimeDefault"}},"resources":{"limits":{"cpu":"500m","memory":"512Mi"},"requests":{"cpu":"250m","memory":"256Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]}},"storage":"500Mi","storageClassName":""}Bundled PostgreSQL instance — for development and evaluation only. Not suitable for production. Deployed when enabled is true and url/urlFile are not set.
database.postgres.bundled.enabledbooltrueSet to false to disable the bundled database and provide your own via url or urlFile.
database.postgres.bundled.image.namestring"postgres"Bundled PostgreSQL image name
database.postgres.bundled.image.pullPolicystring"IfNotPresent"Bundled PostgreSQL image pull policy
database.postgres.bundled.image.registrystring"docker.io"Bundled PostgreSQL image registry
database.postgres.bundled.image.repositorystring"library"Bundled PostgreSQL image repository (org/namespace)
database.postgres.bundled.image.tagstring"18.3-alpine"Bundled PostgreSQL image tag
database.postgres.bundled.podSecurityContextobject{"fsGroup":999,"runAsGroup":999,"runAsNonRoot":true,"runAsUser":999,"seccompProfile":{"type":"RuntimeDefault"}}Pod-level security context for the bundled PostgreSQL deployment.
database.postgres.bundled.resourcesobject{"limits":{"cpu":"500m","memory":"512Mi"},"requests":{"cpu":"250m","memory":"256Mi"}}Resource requests/limits for the demo PostgreSQL container
database.postgres.bundled.securityContextobject{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]}}Container-level security context for the bundled PostgreSQL container.
database.postgres.bundled.storagestring"500Mi"PersistentVolumeClaim size for demo PostgreSQL data
database.postgres.bundled.storageClassNamestring""StorageClass for the PostgreSQL PVC. Defaults to the cluster default when empty.
database.postgres.poolobject{"maxConnIdleTime":"","maxConnLifetime":"","maxConns":null,"minConns":null}Optional pgxpool settings. Leave unset/null to keep pgx library defaults (MaxConns≈max(4,NumCPU), MinConns=0, MaxConnIdleTime=30m, MaxConnLifetime=1h).
database.postgres.sessionRetentionDaysint0Hard-delete idle sessions (and cascaded events/tasks/checkpoints/shares) after N days of no activity. Uses session.updated_at as a sliding idle clock (writes refresh it). 0 disables cleanup (default, existing installs unchanged).
database.postgres.skipMigrationsboolfalseSkip running database migrations at controller startup. The controller instead verifies the database is already migrated and fails if it is not. Migrations must be applied out-of-band (e.g. from a CI/CD pipeline) before install/upgrade.
database.postgres.urlstring""External PostgreSQL connection string. Is always used if set regardless of the .bundled.enabled field.
database.postgres.urlFilestring""Path to a file containing the database URL. Takes precedence over url when set. Is always used if set regardless of the .bundled.enabled field.
database.postgres.vectorEnabledboolfalseEnable the pgvector migration Required to use features that depend on database vector capability. (e.g. long-term memory) Set to true when using an external PostgreSQL that has the pgvector extension installed.
extraObjectslist[]Additional arbitrary Kubernetes manifests to deploy alongside the chart. Each list entry is rendered through tpl, so values may reference the release context (e.g. {{ include "kagent.fullname" . }}, {{ .Release.Namespace }}). Both map and multi-line string entries are supported. Use this to manage resources such as ExternalSecret, HTTPRoute, or NetworkPolicy within the same chart lifecycle without maintaining a separate chart. To use, replace the empty list below with your manifests, e.g.: extraObjects: - apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: ‘{{ include "kagent.fullname" . }}-openai’ namespace: ‘{{ .Release.Namespace }}’ spec: secretStoreRef: name: aws-secretsmanager kind: ClusterSecretStore target: name: kagent-openai data: - secretKey: OPENAI_API_KEY remoteRef: key: prod/kagent/openai property: api_key
fullnameOverridestring""
grafana-mcp.enabledbooltrue
grafana-mcp.grafana.serviceAccountTokenstring""
grafana-mcp.grafana.urlstring"grafana.kagent:3000/api"
grafana-mcp.resources.limits.cpustring"500m"
grafana-mcp.resources.limits.memorystring"512Mi"
grafana-mcp.resources.requests.cpustring"100m"
grafana-mcp.resources.requests.memorystring"128Mi"
imagePullPolicystring"IfNotPresent"
imagePullSecretslist[]
ipv6objectfalseEnable IPv6/dual-stack support. When true, configures all components for dual-stack (IPv4+IPv6) networking: - nginx listens on both IPv4 and IPv6 (adds listen [::]:8080) - Next.js binds to :: instead of 0.0.0.0 - Agent pods bind to :: for dual-stack reachability Leave disabled on clusters where IPv6 is disabled at the kernel level.
kagent-tools.enabledbooltrue
kagent-tools.nameOverridestring"tools"
kagent-tools.nodeSelectorobject{}Node labels to match for Pod scheduling.
kagent-tools.podSecurityContext.runAsNonRootbooltrue
kagent-tools.podSecurityContext.seccompProfile.typestring"RuntimeDefault"
kagent-tools.replicaCountint1
kagent-tools.resources.limits.memorystring"256Mi"
kagent-tools.resources.requests.cpustring"50m"
kagent-tools.resources.requests.memorystring"128Mi"
kagent-tools.securityContext.allowPrivilegeEscalationboolfalse
kagent-tools.securityContext.capabilities.drop[0]string"ALL"
kagent-tools.securityContext.readOnlyRootFilesystembooltrue
kagent-tools.tolerationslist[]Node taints which will be tolerated for Pod scheduling.
kagent-tools.tools.loglevelstring"debug"
kagent-tools.tools.metrics.portint8085
kmcp.enabledbooltrue
kmcp.fullnameOverridestring""
kmcp.nameOverridestring"kmcp"
kmcp.namespaceOverridestring""
labelsobject{}Additional labels to add to all Kubernetes resources
nameOverridestring""
namespaceOverridestring.Release.NamespaceOverride the namespace
nodeSelectorobject{}Node labels to match for Pod scheduling.
oauth2-proxy.config.clientIDstring""
oauth2-proxy.config.clientSecretstring""
oauth2-proxy.config.cookieSecretstring""
oauth2-proxy.config.existingSecretstring""
oauth2-proxy.enabledboolfalse
oauth2-proxy.extraArgs.approval-promptstring"auto"
oauth2-proxy.extraArgs.cookie-samesitestring"lax"
oauth2-proxy.extraArgs.cookie-securebooltrue
oauth2-proxy.extraArgs.custom-templates-dirstring"/templates"
oauth2-proxy.extraArgs.email-domainstring"*"
oauth2-proxy.extraArgs.oidc-issuer-urlstring"$(OIDC_ISSUER_URL)"
oauth2-proxy.extraArgs.pass-authorization-headerbooltrue
oauth2-proxy.extraArgs.providerstring"oidc"
oauth2-proxy.extraArgs.redirect-urlstring"$(OIDC_REDIRECT_URL)"
oauth2-proxy.extraArgs.scopestring"openid profile email groups"
oauth2-proxy.extraArgs.set-authorization-headerbooltrue
oauth2-proxy.extraArgs.skip-auth-regexstring`"^/(login_next/static
oauth2-proxy.extraArgs.skip-auth-routestring`"^/(healthlogin)$"`
oauth2-proxy.extraArgs.skip-jwt-bearer-tokensbooltrue
oauth2-proxy.extraArgs.upstreamstring"$(UPSTREAM_URL)"
oauth2-proxy.extraEnv[0].namestring"OIDC_ISSUER_URL"
oauth2-proxy.extraEnv[0].valuestring""
oauth2-proxy.extraEnv[1].namestring"OIDC_REDIRECT_URL"
oauth2-proxy.extraEnv[1].valuestring""
oauth2-proxy.extraEnv[2].namestring"UPSTREAM_URL"
oauth2-proxy.extraEnv[2].valuestring"http://kagent-ui:8080"
oauth2-proxy.extraVolumeMounts[0].mountPathstring"/templates"
oauth2-proxy.extraVolumeMounts[0].namestring"custom-templates"
oauth2-proxy.extraVolumeMounts[0].readOnlybooltrue
oauth2-proxy.extraVolumes[0].configMap.namestring"kagent-oauth2-proxy-templates"
oauth2-proxy.extraVolumes[0].namestring"custom-templates"
oauth2-proxy.service.portNumberint4180
oauth2-proxy.service.typestring"ClusterIP"
oauth2-proxy.sessionStorage.typestring"cookie"
otel.logging.enabledboolfalse
otel.logging.exporter.otlp.endpointstring""
otel.logging.exporter.otlp.insecurebooltrue
otel.logging.exporter.otlp.timeoutint15000
otel.tracing.enabledboolfalse
otel.tracing.exporter.otlp.endpointstring""
otel.tracing.exporter.otlp.insecurebooltrue
otel.tracing.exporter.otlp.protocolstring"grpc"
otel.tracing.exporter.otlp.timeoutint15000
podAnnotationsobject{}
podLabelsobject{}Additional labels to add to all pod templates (merged into pod labels of the controller and UI Deployments; can be overridden per component). Useful for admission policies that require specific labels on pods.
podSecurityContextobject{"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}}Security context for all pods
providers.annotationsobject{}Annotations added to the metadata of the generated default ModelConfig (the one derived from providers.default). Omitted from the resource when empty.
providers.anthropic.apiKeySecretKeystring"ANTHROPIC_API_KEY"
providers.anthropic.apiKeySecretRefstring"kagent-anthropic"
providers.anthropic.modelstring"claude-haiku-4-5"
providers.anthropic.providerstring"Anthropic"
providers.azureOpenAI.apiKeySecretKeystring"AZUREOPENAI_API_KEY"
providers.azureOpenAI.apiKeySecretRefstring"kagent-azure-openai"
providers.azureOpenAI.config.apiVersionstring"2023-05-15"
providers.azureOpenAI.config.azureAdTokenstring""
providers.azureOpenAI.config.azureDeploymentstring""
providers.azureOpenAI.config.azureEndpointstring""
providers.azureOpenAI.modelstring"gpt-4.1-mini"
providers.azureOpenAI.providerstring"AzureOpenAI"
providers.defaultstring"openAI"
providers.gemini.apiKeySecretKeystring"GOOGLE_API_KEY"
providers.gemini.apiKeySecretRefstring"kagent-gemini"
providers.gemini.modelstring"gemini-2.5-flash-lite"
providers.gemini.providerstring"Gemini"
providers.ollama.config.hoststring"host.docker.internal:11434"
providers.ollama.config.options.num_ctxstring"64000"
providers.ollama.modelstring"llama3.2"
providers.ollama.providerstring"Ollama"
providers.openAI.apiKeySecretKeystring"OPENAI_API_KEY"
providers.openAI.apiKeySecretRefstring"kagent-openai"
providers.openAI.modelstring"gpt-4.1-mini"
providers.openAI.providerstring"OpenAI"
proxy.urlstring""
querydoc.enabledbooltrue
querydoc.image.pullPolicystring"IfNotPresent"
querydoc.image.registrystring"ghcr.io"
querydoc.image.repositorystring"kagent-dev/doc2vec/mcp"
querydoc.image.tagstring"1.1.14"
querydoc.openai.apiKeystring""
querydoc.replicasint1
querydoc.resources.limits.cpustring"500m"
querydoc.resources.limits.memorystring"512Mi"
querydoc.resources.requests.cpustring"100m"
querydoc.resources.requests.memorystring"128Mi"
rbac.namespaceslist[]Namespaces in which to create Role and RoleBinding resources. If empty (default), the chart creates cluster-scoped ClusterRole and ClusterRoleBinding resources and the controller watches all namespaces. If set, the chart creates a Role + RoleBinding per listed namespace and the controller’s WATCH_NAMESPACES is derived from this list (unless controller.watchNamespaces is set explicitly, which always takes precedence).
registrystring"ghcr.io"
securityContextobject{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true}Security context for all containers
substrate.enabledboolfalse
substrateWorkerPoolobject{"ateomImage":"","create":false,"labels":{},"name":"kagent-default","replicas":1,"sandboxClass":"gvisor","template":{}}Optional Agent Substrate WorkerPool installed by this chart. This is platform capacity and is not owned by individual AgentHarness resources.
tagstring""
tolerationslist[]Node taints which will be tolerated for Pod scheduling.
ui.additionalForwardedHeaderslist[]Additional request headers (beyond Authorization) the UI proxy will forward to the backend. Names are case-insensitive. Hop-by-hop headers (Connection, Transfer-Encoding, etc.) are silently dropped.
ui.affinityobject{}Affinity rules for the UI pod.
ui.annotationsobject{}Additional annotations to add to the UI Deployment metadata
ui.auth.ssoRedirectPathstring"/oauth2/start"
ui.backendGrpcUrlstring""
ui.backendInternalUrlstring""
ui.envobject{}
ui.externalUrlstring"" (share tools return paths only)Public-facing base URL of the UI (e.g. https://kagent.example.com). When set, the controller injects KAGENT_UI_URL into agent pods so that share link tools return full clickable URLs instead of relative paths.
ui.httpRouteobject{"annotations":{},"enabled":false,"hostnames":[],"labels":{},"parentRefs":[],"rules":[]}Gateway API HTTPRoute for the UI. Requires the Gateway API CRDs (gateway.networking.k8s.io/v1) and an existing Gateway to attach to via parentRefs. Disabled by default; enable to front the UI with a Gateway API implementation (kgateway, Istio, Envoy Gateway, etc.) instead of the OpenShift Route or bundled oauth2-proxy.
ui.httpRoute.annotationsobject{}Annotations to add to the HTTPRoute.
ui.httpRoute.hostnameslist[]Hostnames matched by the route.
ui.httpRoute.labelsobject{}Extra labels to add to the HTTPRoute (merged with the chart labels).
ui.httpRoute.parentRefslist[]Gateways this route attaches to. Required when enabled is true.
ui.httpRoute.ruleslist[]Routing rules. When a rule omits backendRefs, it defaults to the UI Service on ui.service.ports.port. Each rule may also set matches, filters, and timeouts.
ui.image.pullPolicystring""
ui.image.registrystring""
ui.image.repositorystring"kagent-dev/kagent/ui"
ui.image.tagstring""
ui.nginxobject{"proxyReadTimeout":"1800s","proxySendTimeout":"1800s"}Nginx proxy timeout configuration for the UI sidecar (values are passed directly to the corresponding nginx directives, e.g. “1800s”).
ui.nginx.proxyReadTimeoutstring"1800s"proxy_read_timeout: max time between two successive reads from the upstream.
ui.nginx.proxySendTimeoutstring"1800s"proxy_send_timeout: max time between two successive writes to the upstream.
ui.nodeSelectorobject{}Node labels to match for Pod scheduling.
ui.openshiftRoute.annotations.“haproxy.router.openshift.io/timeout”string"120m"
ui.pdbobject{"annotations":{},"enabled":false,"labels":{},"maxUnavailable":1,"minAvailable":null,"unhealthyPodEvictionPolicy":""}PodDisruptionBudget for the UI pods. Disabled by default: ui.replicas is 1, and a minAvailable: 1 budget on a single-replica Deployment blocks every voluntary eviction, so node drains and cluster upgrades hang indefinitely. Raise ui.replicas before switching to minAvailable.
ui.pdb.annotationsobject{}Annotations for the UI PodDisruptionBudget.
ui.pdb.enabledboolfalseSet to true to create the PodDisruptionBudget.
ui.pdb.labelsobject{}Additional labels for the UI PodDisruptionBudget.
ui.pdb.maxUnavailableint1Maximum number of pods that may be unavailable. Int or percentage string (e.g. 1 or "50%"). Mutually exclusive with minAvailable.
ui.pdb.minAvailablestringunset (maxUnavailable is used instead)Minimum number of pods that must remain available. Int or percentage string (e.g. 1 or "50%"). Mutually exclusive with maxUnavailable.
ui.pdb.unhealthyPodEvictionPolicystring"" (defer to the Kubernetes default)spec.unhealthyPodEvictionPolicy, one of IfHealthyBudget (the Kubernetes default) or AlwaysAllow. AlwaysAllow lets unhealthy pods be evicted even when the budget is exhausted, which avoids drains wedging on a crash-looping pod. Requires Kubernetes >= 1.27. Omitted from the manifest when empty.
ui.podAnnotationsobject{}
ui.podLabelsobject{}Additional labels for the UI pod template, merged over the global podLabels (per-key; component keys win). Selector labels can never be overridden.
ui.podSecurityContextobject(uses global podSecurityContext)Pod-level security context for the UI pod. Overrides the global podSecurityContext.
ui.publicBackendUrlstring"/api"
ui.readinessProbeobjecthttpGet /health on port http, periodSeconds=30Custom readiness probe for the UI container. Override to adjust thresholds, use exec-based probes, or change the health path.
ui.replicasint1
ui.resources.limits.cpustring"1000m"
ui.resources.limits.memorystring"1Gi"
ui.resources.requests.cpustring"100m"
ui.resources.requests.memorystring"256Mi"
ui.routeobject{"enabled":true}Gates the OpenShift Route for the UI. Additionally conditional on the route.openshift.io/v1 API being present, so it is a no-op off-OpenShift. Set to false to front the UI with your own Route/ingress or the bundled oauth2-proxy instead of the chart’s edge-terminated Route.
ui.securityContextobject(uses global securityContext)Container-level security context for the UI container. Overrides the global securityContext.
ui.service.annotationsobject{}
ui.service.ports.portint8080
ui.service.ports.targetPortint8080
ui.service.typestring"ClusterIP"
ui.serviceAccountobject{"annotations":{}}ServiceAccount settings for the UI pod
ui.serviceAccount.annotationsobject{} (no extra annotations)Annotations to add to the UI ServiceAccount. Useful for GCP Workload Identity, AWS IRSA, or Azure Workload Identity.
ui.startupProbeobjecthttpGet /health on port http, periodSeconds=1, initialDelaySeconds=1Custom startup probe for the UI container. Override to adjust thresholds, use exec-based probes, or change the health path.
ui.streamTimeoutSecondsint1800Client-side chat stream inactivity timeout (seconds). The browser aborts a streaming response if no event is received within this window. Should be >= ui.nginx.proxyReadTimeout so nginx isn’t the silent limit. Default 1800 (30m).
ui.tolerationslist[]Node taints which will be tolerated for Pod scheduling.
ui.topologySpreadConstraintslist[]Topology spread constraints for the UI pod.
ui.volumesobject{"nextjsCache":"100Mi","tmp":"50Mi"}EmptyDir volume sizes for Next.js UI workload (typically used when enabling readOnlyRootFilesystem)
ui.volumes.nextjsCachestring"100Mi"Size limit for Next.js build cache (.next/cache). Default 100Mi is sufficient for typical Next.js apps with moderate caching needs.
ui.volumes.tmpstring"50Mi"Size limit for temporary files (/tmp). Default 50Mi provides ample space for Next.js runtime temporary data.