Skip to main content
Kubernetes deployment for teams with 100+ developers or requiring high availability and horizontal scaling.
The Helm chart and deployment docs live in the akupara repo in /deploy/kubernetes.

How it fits together

The Greptile chart deploys application workloads only:
  • Services: web, auth, api, chunker, summarizer, worker, webhook, jobs, llmproxy
  • Optional: jackson (for SAML SSO)
  • Bundled by default: PostgreSQL and PgBouncer (transaction pooling)
Two things live outside the Greptile chart and must be in place first:
  • Ingress controller: the chart creates Ingress resources but does not install a controller. You install ingress-nginx yourself, once per cluster.
  • Hatchet: Greptile’s workflow orchestration runs as a separate Helm release, connected through the hatchet.* values and a HATCHET_CLIENT_TOKEN.

Prerequisites

Cluster:
  • Kubernetes 1.21+ (1.25+ recommended)
  • kubectl configured
  • helm 3.0+
From Greptile: External:
  • LLM provider API keys (see requirements)
  • GitHub App or GitLab OAuth configured
The worker deployment runs privileged with SYS_ADMIN and a /sys/fs/cgroup host mount so review sandboxing works. Clusters with restrictive Pod Security Standards must allow this. Plan storage too: the bundled Postgres PVC (postgres.primary.persistence.size, default 40Gi) and the shared workdir PVC (storage.sharedWorkdir.size, default 1Ti) need real backing storage.

Setup

1

Clone the repository

2

Install the ingress controller (required, once per cluster)

Verify an nginx ingress class and a controller service exist:
3

Install Hatchet

Hatchet is the workflow orchestration system. Install it before bootstrapping Greptile so the next step can mint a client token automatically:
Verify Hatchet is healthy before continuing:
Change the default Hatchet admin credentials before exposing the Hatchet UI/API.
4

Create the registry secret

Greptile’s images are pulled from a private registry. Create the pull secret referenced by global.imagePullSecrets (defaults to regcred):
5

Validate the chart

This runs helm dependency update, helm lint, and helm template against the bundled profiles to catch problems before you deploy.
6

Bootstrap your values file

This creates ./charts/profiles/values.user.yaml from the example and auto-generates the secrets you’d otherwise set by hand:
  • JWT_SECRET
  • TOKEN_ENCRYPTION_KEY (32 characters)
  • LITELLM_MASTER_KEY
  • HATCHET_CLIENT_TOKEN (pulled from the running hatchet-stack release)
Hatchet must already be deployed and reachable for automatic HATCHET_CLIENT_TOKEN generation to succeed.
7

Configure values.user.yaml

Open ./charts/profiles/values.user.yaml and set the values the bootstrap script can’t infer:
See values.user.example.yaml for the annotated template and values.yaml for every available key. See Configuration below for the schema.
8

Deploy Greptile

9

Verify the rollout

The minimum healthy set for a bundled-database install:greptile-postgres · greptile-pgbouncer · greptile-api · greptile-auth · greptile-web · greptile-webhook · greptile-worker · greptile-summarizer · greptile-chunker · greptile-jobs · greptile-llmproxyReach the web UI through your ingress host (network.appUrl), or port-forward for a quick check:

Configuration

values.user.yaml overrides the chart defaults in charts/greptile/values.yaml. The top-level keys:

Bundled vs. managed database

Postgres is bundled and enabled by default. To use a managed database (e.g. RDS, Cloud SQL) instead:
The database must have the pgvector extension available (CREATE EXTENSION IF NOT EXISTS vector;).

Secret modes

  • native (default) — values live in secrets.native.*. Best filled by init-values.sh.
  • external — set secrets.mode: external and configure secrets.external.secretStoreRef / secrets.external.data. The chart renders an ExternalSecret (via the External Secrets Operator) targeting the secret all workloads consume.

AWS (EKS) with Terraform

If you don’t already have a cluster, the akupara repo ships a Terraform stack that provisions a full EKS environment and installs Greptile for you. It’s consumed from a customer-owned root module — start from the copy/paste example at terraform/examples/aws-eks-module. The aws-eks stack provisions:
  • EKS Auto Mode cluster + OIDC provider for IRSA
  • RDS PostgreSQL and ElastiCache Redis
  • AWS Load Balancer Controller
  • External Secrets Operator, with secrets stored in SSM Parameter Store (/${name_prefix}/config/*, /${name_prefix}/secrets/*) and a KMS key for SecureString params
  • Hatchet stack + a token-generation Job
  • The Greptile services + DB migration Job
  • An optional CloudWatch log group + agent (see Monitoring)
It installs Kubernetes resources through the Terraform helm and kubernetes providers — there is no separate helm install step.
Terraform stores these secret values in Terraform state. Treat your state backend (local or remote) as sensitive. Pin the module source to a tag/commit (?ref=v0.1.0) for production rather than main.
Pin the EKS-specific tunables in terraform.tfvars — region, kubernetes_version, db_instance_class (default db.m5.large), CloudWatch retention, and Hatchet ingress exposure. See the stack README for the full variables reference.

Other environments

There is no GCP or Azure Terraform in the repo today. For GKE, AKS, on-prem, k3s, Rancher, or OpenShift, bring your own Kubernetes cluster and use the generic deploy/kubernetes chart in Setup above:
  • Kubernetes 1.21+ required
  • The chart deploys PostgreSQL and PgBouncer by default (or point at a managed database via externalDatabase)
  • Install an ingress controller and a Hatchet release first
  • Allow the privileged worker pod (SYS_ADMIN + /sys/fs/cgroup)

Operations

Scaling

Each component defaults to replicas: 1. Scale via chart values:

Updating

Validating workers

After deploy, confirm the worker deployments (chunker, summarizer, worker) appear as registered workers in the Hatchet UI. If they don’t, reviews won’t run — check HATCHET_CLIENT_TOKEN and the Hatchet endpoints.

Monitoring and observability

The chart’s operational visibility is Kubernetes-native — there is no bundled metrics or dashboard stack. Built-in:
  • Rollout and log inspection via kubectl:
  • Worker health via the Hatchet dashboard — workflow status, queue depth, and registered workers (chunker, summarizer, worker).
Not bundled in the shipped chart: The deploy/kubernetes Helm chart does not ship Prometheus scraping (no ServiceMonitor or PodMonitor), Grafana, bundled dashboards, or Fluentd/Elasticsearch log forwarding. If you want metrics scraping or dashboards, deploy and wire up Prometheus/Grafana yourself as a separate operator concern. Optional log shipping (AWS EKS only): The aws-eks Terraform stack — and only that stack — can ship container logs to CloudWatch. It runs a CloudWatch-agent DaemonSet against a Terraform-managed log group (/greptile/<name_prefix>/application), toggled by cloudwatch_logs_enabled (default true). This is not part of the generic deploy/kubernetes chart.

Troubleshooting

Webhook issues: confirm network.webhookUrl is publicly reachable and matches the URL in your GitHub App / GitLab webhook. LLM errors: check the proxy logs and verify keys/model names:

Resources