Skip to main content

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

VariableDescriptionExample
LLM_PROVIDERDefault provider for standard model callsgoogle_genai, openai, anthropic
LLM_MODELDefault model for standard model callsgemini-2.5-flash, gpt-4o-mini
LLM_HIGHER_PROVIDERProvider for reasoning and routing tasksgoogle_genai, openai, anthropic
LLM_HIGHER_MODELModel for Supervisor routing & HITL plansgemini-3.1-pro-preview, gpt-5-mini
LLM_DEEPAGENT_PROVIDERProvider for coordinator deep agentsgoogle_genai, openai, anthropic
LLM_DEEPAGENT_MODELModel for complex code generationgemini-3.1-pro-preview, o4-mini

Observability MCP Configurations

VariableDefaultPurpose
PROMETHEUS_BASE_URLhttp://prometheus:9090Prometheus API base endpoint
ALERTMANAGER_BASE_URLhttp://alertmanager:9093Alertmanager API base endpoint
LOKI_URLhttp://loki:3100Grafana Loki HTTP endpoint
LOKI_ORG_IDtalkopsMulti-tenant tenant ID
TEMPO_BASE_URLhttp://tempo:3200Grafana Tempo HTTP endpoint
OTEL_CRD_GROUPopentelemetry.ioKubernetes CRD group for OTel Operator