Configuration
The Kubernetes Agent (k8s-autopilot) supports flexible configuration via environment variables and Docker Compose. This page details how to configure the agent for both local development and production usage.
1. Quick Start (Docker Compose)
The recommended way to run k8s-autopilot is via Docker Compose. All 10 MCP servers (Helm, ArgoCD, Traefik, Argo Rollouts, Prometheus, Alertmanager, OpenTelemetry, Loki, Tempo, Kubernetes) run in-process via stdio transport — no sidecar containers needed.
You need two files: docker-compose.yml and .env.
Docker Compose
services:
k8s-autopilot:
image: talkopsai/k8s-autopilot:latest
container_name: k8s-autopilot
ports:
- "10102:10102"
environment:
# Required: API Keys (loaded from .env file)
- GOOGLE_API_KEY=${GOOGLE_API_KEY}
- GOOGLE_GENAI_USE_VERTEXAI=${GOOGLE_GENAI_USE_VERTEXAI}
# Github MCP Server Configuration
- GITHUB_MCP_URL=${GITHUB_MCP_URL}
- GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}
- HELM_WORKSPACE=${HELM_WORKSPACE}
# MCP Server Configuration (stdio in-process subprocesses)
- >-
MCP_SERVERS=[
{"name": "github_mcp", "url": "https://api.githubcopilot.com/mcp/", "transport": "http", "disabled": false, "headers": {}, "auth_token_env_var": "GITHUB_PERSONAL_ACCESS_TOKEN"},
{"name": "helm_mcp_server", "command": "helm-mcp-server", "transport": "stdio", "args": [], "env": {"MCP_ALLOW_WRITE": "true"}},
{"name": "argocd_mcp_server", "command": "argocd-mcp-server", "transport": "stdio", "args": [], "env": {"MCP_ALLOW_WRITE": "true"}},
{"name": "traefik_mcp_server", "command": "traefik-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "argo_rollout_mcp_server", "command": "argo-rollout-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "prometheus-mcp-server", "command": "prometheus-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "alertmanager-mcp-server", "command": "alertmanager-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "opentelemetry-mcp-server", "command": "opentelemetry-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "loki-mcp-server", "command": "loki-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "tempo-mcp-server", "command": "tempo-mcp-server", "transport": "stdio", "args": [], "env": {}},
{"name": "kubernetes_mcp_server", "command": "kubernetes-mcp-server", "transport": "stdio", "args": []}
]
# LLM Configuration
- LLM_PROVIDER=${LLM_PROVIDER}
- LLM_MODEL=${LLM_MODEL}
- LLM_HIGHER_PROVIDER=${LLM_HIGHER_PROVIDER}
- LLM_HIGHER_MODEL=${LLM_HIGHER_MODEL}
- LLM_DEEPAGENT_PROVIDER=${LLM_DEEPAGENT_PROVIDER}
- LLM_DEEPAGENT_MODEL=${LLM_DEEPAGENT_MODEL}
# Logging & Kubeconfig
- LOG_LEVEL=${LOG_LEVEL}
- KUBECONFIG=/app/.kube/config
# Observability: Prometheus
- PROMETHEUS_BASE_URL=${PROMETHEUS_BASE_URL:-http://prometheus-operated.monitoring.svc:9090}
- PROMETHEUS_VERIFY_SSL=${PROMETHEUS_VERIFY_SSL:-false}
- PROMETHEUS_BACKEND_ID=${PROMETHEUS_BACKEND_ID:-default}
# Observability: Alertmanager
- ALERTMANAGER_BASE_URL=${ALERTMANAGER_BASE_URL:-http://alertmanager-operated.monitoring.svc:9093}
- ALERTMANAGER_VERIFY_SSL=${ALERTMANAGER_VERIFY_SSL:-false}
- AM_MAX_SILENCE_MINUTES=${AM_MAX_SILENCE_MINUTES:-1440}
# Observability: Loki
- LOKI_URL=${LOKI_URL:-http://loki.monitoring.svc:3100}
- LOKI_ORG_ID=${LOKI_ORG_ID:-talkops}
- LOKI_MAX_QUERY_BYTES=${LOKI_MAX_QUERY_BYTES:-5000000000}
# Observability: Tempo
- TEMPO_BASE_URL=${TEMPO_BASE_URL:-http://tempo.monitoring.svc:3200}
- TEMPO_MAX_LOOKBACK=${TEMPO_MAX_LOOKBACK:-168h}
- TEMPO_DEFAULT_SEARCH_LIMIT=${TEMPO_DEFAULT_SEARCH_LIMIT:-20}
# Observability: OpenTelemetry
- OTEL_CRD_GROUP=${OTEL_CRD_GROUP:-opentelemetry.io}
- OTEL_CRD_API_VERSION=${OTEL_CRD_API_VERSION:-v1beta1}
# ArgoCD
- ARGOCD_SERVER_URL=${ARGOCD_SERVER_URL:-https://argocd-server.argocd.svc:443}
- ARGOCD_AUTH_TOKEN=${ARGOCD_AUTH_TOKEN}
- ARGOCD_INSECURE=${ARGOCD_INSECURE:-true}
volumes:
- ./workspace/helm-charts:/app/workspace/helm-charts
- ${HOME}/.kube/config:/app/.kube/config:ro
restart: unless-stopped
networks:
- k8s-autopilot-net
talkops-ui:
image: talkopsai/talkops:latest
container_name: talkops-ui
environment:
- K8S_AGENT_URL=http://localhost:10102
- TALKOPS_ENABLE_LOGGING=false
ports:
- "8080:80"
depends_on:
- k8s-autopilot
restart: unless-stopped
networks:
k8s-autopilot-net:
driver: bridge
2. Environment Variables Reference
LLM Provider Settings
| Variable | Description | Example |
|---|---|---|
LLM_PROVIDER | Default provider for standard model calls | google_genai, openai, anthropic |
LLM_MODEL | Default model for standard model calls | gemini-2.5-flash, gpt-4o-mini |
LLM_HIGHER_PROVIDER | Provider for reasoning and routing tasks | google_genai, openai, anthropic |
LLM_HIGHER_MODEL | Model for Supervisor routing & HITL plans | gemini-3.1-pro-preview, gpt-5-mini |
LLM_DEEPAGENT_PROVIDER | Provider for coordinator deep agents | google_genai, openai, anthropic |
LLM_DEEPAGENT_MODEL | Model for complex code generation | gemini-3.1-pro-preview, o4-mini |
Observability MCP Configurations
| Variable | Default | Purpose |
|---|---|---|
PROMETHEUS_BASE_URL | http://prometheus:9090 | Prometheus API base endpoint |
ALERTMANAGER_BASE_URL | http://alertmanager:9093 | Alertmanager API base endpoint |
LOKI_URL | http://loki:3100 | Grafana Loki HTTP endpoint |
LOKI_ORG_ID | talkops | Multi-tenant tenant ID |
TEMPO_BASE_URL | http://tempo:3200 | Grafana Tempo HTTP endpoint |
OTEL_CRD_GROUP | opentelemetry.io | Kubernetes CRD group for OTel Operator |