Documentation

kagent#

A Helm chart for kagent, built with Google ADK

Requirements#

RepositoryNameVersion
file://../agents/argo-rolloutsargo-rollouts-agent
file://../agents/cilium-debugcilium-debug-agent
file://../agents/cilium-managercilium-manager-agent
file://../agents/cilium-policycilium-policy-agent
file://../agents/helmhelm-agent
file://../agents/istioistio-agent
file://../agents/k8sk8s-agent
file://../agents/kgatewaykgateway-agent
file://../agents/observabilityobservability-agent
file://../agents/promqlpromql-agent
file://../tools/grafana-mcpgrafana-mcp
file://../tools/querydocquerydoc
https://oauth2-proxy.github.io/manifestsoauth2-proxy~7.0.0
oci://ghcr.io/kagent-dev/kmcp/helmkmcp${KMCP_VERSION}
oci://ghcr.io/kagent-dev/tools/helmkagent-tools0.1.3

Values#

KeyTypeDefaultDescription
agents.argo-rollouts-agent.enabledbooltrue
agents.argo-rollouts-agent.resources.limits.cpustring"1000m"
agents.argo-rollouts-agent.resources.limits.memorystring"1Gi"
agents.argo-rollouts-agent.resources.requests.cpustring"100m"
agents.argo-rollouts-agent.resources.requests.memorystring"256Mi"
agents.cilium-debug-agent.enabledbooltrue
agents.cilium-debug-agent.resources.limits.cpustring"1000m"
agents.cilium-debug-agent.resources.limits.memorystring"1Gi"
agents.cilium-debug-agent.resources.requests.cpustring"100m"
agents.cilium-debug-agent.resources.requests.memorystring"256Mi"
agents.cilium-manager-agent.enabledbooltrue
agents.cilium-manager-agent.resources.limits.cpustring"1000m"
agents.cilium-manager-agent.resources.limits.memorystring"1Gi"
agents.cilium-manager-agent.resources.requests.cpustring"100m"
agents.cilium-manager-agent.resources.requests.memorystring"256Mi"
agents.cilium-policy-agent.enabledbooltrue
agents.cilium-policy-agent.resources.limits.cpustring"1000m"
agents.cilium-policy-agent.resources.limits.memorystring"1Gi"
agents.cilium-policy-agent.resources.requests.cpustring"100m"
agents.cilium-policy-agent.resources.requests.memorystring"256Mi"
agents.helm-agent.enabledbooltrue
agents.helm-agent.resources.limits.cpustring"1000m"
agents.helm-agent.resources.limits.memorystring"1Gi"
agents.helm-agent.resources.requests.cpustring"100m"
agents.helm-agent.resources.requests.memorystring"256Mi"
agents.istio-agent.enabledbooltrue
agents.istio-agent.resources.limits.cpustring"1000m"
agents.istio-agent.resources.limits.memorystring"1Gi"
agents.istio-agent.resources.requests.cpustring"100m"
agents.istio-agent.resources.requests.memorystring"256Mi"
agents.k8s-agent.enabledbooltrue
agents.k8s-agent.resources.limits.cpustring"1000m"
agents.k8s-agent.resources.limits.memorystring"1Gi"
agents.k8s-agent.resources.requests.cpustring"100m"
agents.k8s-agent.resources.requests.memorystring"256Mi"
agents.kgateway-agent.enabledbooltrue
agents.kgateway-agent.resources.limits.cpustring"1000m"
agents.kgateway-agent.resources.limits.memorystring"1Gi"
agents.kgateway-agent.resources.requests.cpustring"100m"
agents.kgateway-agent.resources.requests.memorystring"256Mi"
agents.observability-agent.enabledbooltrue
agents.observability-agent.resources.limits.cpustring"1000m"
agents.observability-agent.resources.limits.memorystring"1Gi"
agents.observability-agent.resources.requests.cpustring"100m"
agents.observability-agent.resources.requests.memorystring"256Mi"
agents.promql-agent.enabledbooltrue
agents.promql-agent.resources.limits.cpustring"1000m"
agents.promql-agent.resources.limits.memorystring"1Gi"
agents.promql-agent.resources.requests.cpustring"100m"
agents.promql-agent.resources.requests.memorystring"256Mi"
controller.a2aBaseUrlstringhttp://<fullname>-controller.<namespace>.svc.cluster.local:<port>The base URL of the A2A Server endpoint, as advertised to clients.
controller.agentDeploymentobject{"host":"","podLabels":{},"serviceAccountName":""}Global deployment defaults applied to all agent pods. Per-agent settings in the Agent CRD take precedence over these defaults.
controller.agentDeployment.hoststring"" (controller falls back to "0.0.0.0"; "::" when ipv6.enabled)Default host address for agent pods to bind to. Leave empty to use the controller's default fallback of "0.0.0.0". Automatically set to "::" when ipv6.enabled is true. Can be explicitly overridden here regardless of the ipv6 flag.
controller.agentDeployment.podLabelsobject (no extra labels)Default labels applied to all agent pod templates. Per-agent labels in the Agent CRD take precedence over these defaults.
controller.agentDeployment.serviceAccountNamestring"" (auto-create per-agent ServiceAccount)Default ServiceAccount name for agent pods. When set, agent pods that don't specify an explicit serviceAccountName will use this ServiceAccount instead of creating a per-agent one. Useful for Workload Identity (GCP, AWS IRSA, Azure Workload Identity). Precedence: agent-level serviceAccountName > this default > auto-created SA.
controller.agentImage.pullPolicystring""
controller.agentImage.registrystring""
controller.agentImage.repositorystring"kagent-dev/kagent/app"
controller.agentImage.tagstring""
controller.auth.modestring"unsecure"
controller.auth.userIdClaimstring""
controller.envlist[]
controller.envFromlist[]
controller.image.pullPolicystring""
controller.image.registrystring""
controller.image.repositorystring"kagent-dev/kagent/controller"
controller.image.tagstring""
controller.loglevelstring"info"
controller.nodeSelectorobject{}Node labels to match for Pod scheduling.
controller.podAnnotationsobject{}
controller.replicasint1
controller.resources.limits.cpuint2
controller.resources.limits.memorystring"512Mi"
controller.resources.requests.cpustring"100m"
controller.resources.requests.memorystring"128Mi"
controller.service.ports.portint8083
controller.service.ports.targetPortint8083
controller.service.typestring"ClusterIP"
controller.skillsInitImageobject{"pullPolicy":"","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.streaming.initialBufSizestring"4Ki"
controller.streaming.maxBufSizestring"1Mi"
controller.streaming.timeoutstring"600s"
controller.tolerationslist[]Node taints which will be tolerated for Pod scheduling.
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"]},"seccompProfile":{"type":"RuntimeDefault"}},"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"]},"seccompProfile":{"type":"RuntimeDefault"}}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.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.
fullnameOverridestring""
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.replicaCountint1
kagent-tools.resources.limits.cpustring"1000m"
kagent-tools.resources.limits.memorystring"1Gi"
kagent-tools.resources.requests.cpustring"100m"
kagent-tools.resources.requests.memorystring"256Mi"
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.redis.enabledboolfalse
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{}
podSecurityContextobject{"runAsNonRoot":true}Security context for all pods
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.0-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.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"cr.kagent.dev"
securityContextobject{"readOnlyRootFilesystem":true}Security context for all containers
tagstring""
tolerationslist[]Node taints which will be tolerated for Pod scheduling.
tools.grafana-mcp.enabledbooltrue
tools.querydoc.enabledbooltrue
ui.auth.ssoRedirectPathstring"/oauth2/start"
ui.envobject{}
ui.image.pullPolicystring""
ui.image.registrystring""
ui.image.repositorystring"kagent-dev/kagent/ui"
ui.image.tagstring""
ui.nodeSelectorobject{}Node labels to match for Pod scheduling.
ui.podAnnotationsobject{}
ui.podSecurityContextobject(uses global podSecurityContext)Pod-level security context for the UI pod. Overrides the global podSecurityContext.
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.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.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.tolerationslist[]Node taints which will be tolerated for Pod scheduling.
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.
Kagent Lab: Discover kagent and kmcp
Free, on‑demand lab: build custom AI agents with kagent and integrate tools via kmcp on Kubernetes.