Kubernetes Deployment

Agenticore includes a Helm chart for Kubernetes deployment with configurable Redis, PostgreSQL, and OTEL Collector sidecars.

Quick Install

helm install agenticore ./helm/agenticore \
  --set github.token=$GITHUB_TOKEN \
  --set server.apiKeys="your-secret-key"

Chart Structure

helm/agenticore/
├── Chart.yaml              # Chart metadata (v0.1.0)
├── values.yaml             # Default configuration values
└── templates/
    ├── _helpers.tpl         # Template helpers (labels, fullname)
    ├── configmap.yaml       # Non-secret env vars
    ├── secret.yaml          # API keys, tokens
    ├── deployment.yaml      # Agenticore pod spec
    ├── service.yaml         # ClusterIP service
    ├── pvc.yaml             # PersistentVolumeClaims (repos + jobs)
    └── redis.yaml           # Redis deployment + service

Values Reference

Image

Key Default Description
image.repository agenticore Container image
image.tag latest Image tag
image.pullPolicy IfNotPresent Pull policy
replicaCount 1 Number of replicas

Server

Key Default Description
server.host 0.0.0.0 Bind address
server.port 8200 Listen port
server.transport sse Transport mode
server.apiKeys "" Comma-separated API keys
service.type ClusterIP Kubernetes service type
service.port 8200 Service port

Claude

Key Default Description
claude.binary claude Claude CLI binary
claude.timeout 3600 Max seconds per job
claude.defaultProfile code Default profile
claude.configDir "" Custom CLAUDE_CONFIG_DIR

Redis

Key Default Description
redis.url redis://redis:6379/0 Redis connection URL
redis.keyPrefix agenticore Key namespace
redis-standalone.enabled true Deploy Redis subchart
redis-standalone.image redis:7-alpine Redis image
redis-standalone.port 6379 Redis port

OTEL

Key Default Description
otel.enabled true Enable telemetry
otel.endpoint http://otel-collector:4317 Collector endpoint
otel.protocol grpc OTLP protocol
otel.logPrompts false Log prompts
otel.logToolDetails true Log tool details
otelCollector.enabled true Deploy OTEL collector
otelCollector.image otel/opentelemetry-collector-contrib:latest Collector image

Repos

Key Default Description
repos.root /data/repos Repos mount path
repos.maxParallelJobs 3 Max concurrent jobs
repos.jobTtlSeconds 86400 Job TTL

GitHub

Key Default Description
github.token "" GitHub token for auto-PR

PostgreSQL

Key Default Description
postgres.enabled true Deploy PostgreSQL
postgres.image postgres:16-alpine PostgreSQL image
postgres.database agenticore Database name
postgres.user agenticore Database user
postgres.password agenticore Database password

Resources

Key Default Description
resources.requests.cpu 100m CPU request
resources.requests.memory 256Mi Memory request
resources.limits.cpu 2 CPU limit
resources.limits.memory 2Gi Memory limit

Scheduling

Key Default Description
nodeSelector {} Node selector
tolerations [] Tolerations
affinity {} Affinity rules

Persistence

Two PersistentVolumeClaims are created when enabled:

PVC Default Size Mount Path Purpose
{release}-agenticore-repos 10Gi /data/repos Cloned repositories
{release}-agenticore-jobs 1Gi /root/.agenticore/jobs Job data files
persistence:
  repos:
    enabled: true
    size: 10Gi
    storageClass: ""    # Use cluster default
  jobs:
    enabled: true
    size: 1Gi
    storageClass: ""

Both use ReadWriteOnce access mode.

Redis Subchart

When redis-standalone.enabled: true, the chart deploys a single-replica Redis instance with:

  • Deployment: {release}-agenticore-redis
  • Service: redis (ClusterIP)
  • Readiness probe: redis-cli ping

To use an external Redis, disable the subchart and set redis.url:

redis-standalone:
  enabled: false
redis:
  url: "redis://my-external-redis:6379/0"

Health Probes

The Agenticore deployment includes:

Probe Endpoint Timing
Liveness GET /health Initial: 10s, Period: 30s
Readiness GET /health Initial: 5s, Period: 10s

Secrets Management

Sensitive values are stored in a Kubernetes Secret:

Key Source Description
AGENTICORE_API_KEYS server.apiKeys API authentication keys
GITHUB_TOKEN github.token GitHub token for auto-PR
AGENTICORE_CLAUDE_CONFIG_DIR claude.configDir Claude config directory

All values are base64-encoded. The pod loads them via secretRef in envFrom.

Non-secret configuration is stored in a ConfigMap with the same envFrom pattern, containing all the env vars listed in the Configuration Reference.

Example: Production Override

helm install agenticore ./helm/agenticore \
  --set image.repository=ghcr.io/my-org/agenticore \
  --set image.tag=v0.1.0 \
  --set github.token=$GITHUB_TOKEN \
  --set server.apiKeys="key1,key2" \
  --set redis-standalone.enabled=false \
  --set redis.url="redis://production-redis:6379/0" \
  --set persistence.repos.size=50Gi \
  --set persistence.repos.storageClass=gp3 \
  --set resources.limits.memory=4Gi