How to Deploy Sentry in Kubernetes Using Helm (Step-by-Step)

Deploy Sentry on Kubernetes with the official Helm chart. Add the Sentry chart repo, customize values (ingress, SMTP, Slack, PostgreSQL), install with Helm or Helmfile, and verify the deployment.

Sentry is an open-source error-tracking and performance-monitoring platform. It captures exceptions and events from your applications and gives you a web UI to search, analyze, and fix issues. Running Sentry in Kubernetes with Helm lets you manage configuration as code and scale the web, workers, and dependencies (PostgreSQL, Redis, etc.) in one place. This guide walks you through adding the Sentry Helm repo, creating a custom values file (ingress, mail, Slack, external PostgreSQL), installing with Helm or Helmfile, and verifying the deployment.

In this guide you’ll:

  • Add the official Sentry Helm repository and pull the latest chart
  • Create a custom values file for admin user, ingress (e.g. Traefik + cert-manager), SMTP (e.g. Resend), Slack, and external PostgreSQL
  • Install Sentry into a dedicated namespace and optionally use Helmfile for declarative releases
  • Verify pods and access Sentry via ingress, LoadBalancer, or port-forward

Prerequisites

  • A Kubernetes cluster (e.g. Minikube, EKS, AKS, GKE) with kubectl configured.
  • Helm 3 installed (helm version).
  • Persistent storage available (for PostgreSQL if you use the in-chart DB, or use an external PostgreSQL instance).
  • (Optional) An Ingress controller (e.g. Traefik, NGINX) and cert-manager if you want TLS and a custom hostname.

Table of contents

1. Add the Sentry Helm repository

The official Sentry charts are maintained at sentry-kubernetes/charts. Add the repo and update it:

1
2
helm repo add sentry https://sentry-kubernetes.github.io/charts
helm repo update

Confirm the chart is available:

1
2
3
4
5
6
7
$ helm search repo sentry

NAME                     CHART VERSION APP VERSION DESCRIPTION
sentry/sentry            26.11.0       24.11.2     A Helm chart for Kubernetes
sentry/sentry-db         0.9.4         10.0.0      A Helm chart for Kubernetes
sentry/sentry-kubernetes 0.4.0         latest      A Helm chart for sentry-kubernetes (https://git...
sentry/clickhouse        3.14.0        23.8.16.16  ClickHouse is an open source column-oriented da...

2. Create a custom values file

Download the default values to use as a base:

1
helm show values sentry/sentry > values.yaml

Then create a custom values file (e.g. sentry-values.yaml) and override only what you need. Do not commit real passwords or secrets to Git—use placeholders and inject them via --set, --set-file, or a secrets manager.

Example overrides (replace placeholders and hostnames with your own):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
user:
  create: true
  email: [email protected]
  password: "CHANGE_ME_STRONG_PASSWORD" # or use --set user.password=... at install time

ingress:
  enabled: true
  regexPathStyle: traefik
  ingressClassName: traefik
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod-issuer
  hostname: sentry.example.com
  tls:
    - hosts:
        - sentry.example.com
      secretName: sentry-tls

sentry:
  singleOrganization: false
  worker:
    replicas: 1

system:
  url: "https://sentry.example.com"
  adminEmail: "[email protected]"
  public: true
  # secretKey: "..."  # set when upgrading to preserve sessions

mail:
  backend: smtp
  useTls: true
  username: "your-smtp-user"
  password: "your-smtp-password"
  port: 587
  host: "smtp.example.com"
  from: "[email protected]"

# Optional: Slack integration — create a Slack app for credentials
# https://develop.sentry.dev/integrations/slack/
slack:
  clientId: "xxxx.xxxx"
  clientSecret: "xxxx"
  signingSecret: "xxxx"

postgresql:
  enabled: false

# Required when postgresql.enabled is false
externalPostgresql:
  host: postgres.database.svc.cluster.local
  port: 5432
  username: sentry
  password: "your-db-password"
  database: sentry

Summary of what these do:

  • user: Initial admin user (email and password) created on first install.
  • ingress: Expose Sentry via Traefik (or another Ingress class) with TLS (e.g. cert-manager).
  • system: Public URL and admin email; required for links in emails and the UI.
  • mail: SMTP for outgoing email (e.g. Resend, SendGrid, or your own server).
  • slack: Slack app credentials for alert notifications (optional).
  • externalPostgresql: Use an existing PostgreSQL instance instead of the chart’s built-in Postgres.

3. Deploy Sentry with Helm

Create the namespace and install the chart (use the same values filename you created):

1
2
3
4
5
kubectl create namespace sentry
helm install sentry sentry/sentry \
  --namespace sentry \
  --version 26.11.0 \
  -f ./sentry-values.yaml

Use a specific chart version (e.g. 26.11.0) for reproducible installs. To pass a secret at install time instead of storing it in the values file: --set user.password="YourPassword" or --set-file user.password=./secret.txt.

4. Optional: Use Helmfile

Helmfile lets you manage Helm releases as code. Create helmfile.yaml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
helmDefaults:
  createNamespace: true
  timeout: 1000
  wait: true

repositories:
  - name: sentry
    url: https://sentry-kubernetes.github.io/charts

releases:
  - name: sentry
    namespace: sentry
    chart: sentry/sentry
    version: "26.11.0"
    values:
      - ./sentry-values.yaml

Preview rendered manifests, then sync:

1
2
helmfile template
helmfile sync

5. Verify the deployment

Check that pods are running:

1
kubectl get pods -n sentry

You should see pods for the Sentry web frontend, workers, and (if enabled) PostgreSQL, Redis, and cron jobs. Wait until they are Running and ready. If any stay in Pending or CrashLoopBackOff, check kubectl describe pod <name> -n sentry and the chart’s requirements (e.g. external PostgreSQL reachable, correct credentials).

6. Access Sentry

  • If you configured Ingress: Open the URL you set in system.url / ingress.hostname (e.g. https://sentry.example.com) and log in with the user.email and user.password from your values.
  • If using a LoadBalancer: Run kubectl get svc -n sentry and use the external IP of the Sentry service on port 9000.
  • For local testing: Use port-forwarding:
1
kubectl port-forward -n sentry svc/sentry 9000:9000

Then open http://localhost:9000 and log in.

7. Post-deployment setup

  • Complete the setup wizard in the Sentry UI (organization name, etc.).
  • Confirm email (SMTP) works from Sentry settings if you use notifications or password reset.
  • Create projects and install the Sentry SDK in your applications (e.g. Python, Node, Go) using the DSN provided by Sentry.
  • Optionally add team members and configure Slack (or other integrations) for alerts.

Frequently Asked Questions (FAQ)

What is Sentry?

Sentry is an error-tracking and performance-monitoring platform. It captures exceptions, errors, and performance data from your applications and surfaces them in a web UI so you can debug and fix issues quickly. It supports many languages and frameworks and can be self-hosted (as in this guide) or used as a hosted service.

Can I use the built-in PostgreSQL instead of external?

Yes. Set postgresql.enabled: true in your values and remove or leave empty the externalPostgresql block. The chart will deploy PostgreSQL and Redis in the cluster. Ensure your cluster has a default StorageClass for persistent volumes.

How do I upgrade Sentry after deployment?

Back up your database, then run helm upgrade sentry sentry/sentry -n sentry -f ./sentry-values.yaml --version <new-version>. If the chart requires a new system.secretKey, the upgrade notes will describe how to set it without invalidating existing sessions.

Where can I find the Sentry Helm chart values reference?

Run helm show values sentry/sentry for the full default values. The chart source and documentation are in sentry-kubernetes/charts.


Conclusion

You deployed Sentry on Kubernetes using the official Helm chart: added the Sentry repo, created a custom values file (admin user, Ingress, mail, Slack, external PostgreSQL), installed with helm install or Helmfile, and verified pods and access. Use strong passwords and avoid committing secrets to Git; prefer --set or a secrets manager for sensitive values. For more on Kubernetes and observability, see other guides on monitoring and Kubernetes on this site.

comments powered by Disqus
Citizix Ltd
Built with Hugo
Theme Stack designed by Jimmy