--- title: Installation sidebar_label: Installation --- This guide walks you through deploying Zitadel on Kubernetes using Helm. ## Prerequisites You need a running Kubernetes cluster. Supported versions: - Kubernetes 1.30.13+ - Kubernetes 1.31.9+ - Kubernetes 1.32.5+ - Kubernetes 1.33.1+ ### An Ingress Controller Zitadel requires an ingress controller to route traffic to the Zitadel and Login pods. The chart creates standard Kubernetes Ingress resources that work with any ingress controller, including Traefik, NGINX, and cloud-native options like AWS ALB or GCP Cloud Load Balancer. TLS must be terminated at the ingress controller. The Zitadel and Login containers do not handle TLS termination. Your ingress controller is responsible for obtaining and renewing TLS certificates (via ACME, cert-manager, or manually), terminating TLS connections, and forwarding traffic to the Zitadel pods. Without an ingress controller and valid TLS certificates, Zitadel will not work. The chart configures the ingress to use HTTP/2 for communication between the ingress controller and Zitadel pods. ### A PostgreSQL Database Zitadel requires PostgreSQL 14 or later. You can use a managed PostgreSQL service such as Amazon RDS, Google Cloud SQL, or Azure Database for PostgreSQL, or run PostgreSQL in your cluster using a Helm chart or operator. The database must be accessible from the Zitadel pods. Zitadel uses two database users: an admin user for schema migrations and an application user for normal operations. See the [Database](./database) page for connection options. ### Helm Install Helm 3.x or 4.x following the [official instructions](https://helm.sh/docs/intro/install/). Verify your installation: ```bash helm version ``` ### kubectl Install kubectl following the [Kubernetes documentation](https://kubernetes.io/docs/tasks/tools/). Verify connectivity to your cluster: ```bash kubectl cluster-info ``` ## Add the Helm Repository Add the Zitadel Helm repository: ```bash helm repo add zitadel https://charts.zitadel.com ``` Update your local repository cache: ```bash helm repo update ``` Verify the repository was added: ```bash helm search repo zitadel ``` You should see output similar to: ``` NAME CHART VERSION APP VERSION DESCRIPTION zitadel/zitadel 9.x.x v4.x.x A Helm chart for Zitadel ``` ## Install ### Step 1: Create Secrets Create the masterkey secret: ```bash kubectl create secret generic zitadel-masterkey \ --from-literal=masterkey="$(tr -dc A-Za-z0-9