# Helm Setup for Kubernetes

Source: https://docs.openwebui.com/getting-started/quick-start/install-methods/kubernetes-helm

Helm helps you manage Kubernetes applications.

## Prerequisites

- Kubernetes cluster is set up.
- Helm is installed.

## Helm Steps

1. **Add Open WebUI Helm Repository:**

```
helm repo add open-webui https://open-webui.github.io/helm-charts
helm repo update
```
2. **Install Open WebUI Chart:**

```
helm install openwebui open-webui/open-webui
```

The chart pins its own image tag. To run the `:dev` pre-release or a `-slim` / `-cuda` variant, override the image tag in the chart values; see the [chart repository](https://github.com/open-webui/helm-charts) for the value names and [Docker images and tags](/getting-started/quick-start/install-methods/docker-images) for what each tag contains.
3. **Verify Installation:**

```
kubectl get pods
```

> **warning**
>
> If you intend to scale Open WebUI using multiple nodes/pods/workers in a clustered environment, you need to setup a NoSQL key-value database (Redis). There are some [environment variables](https://docs.openwebui.com/reference/env-configuration/) that need to be set to the same value for all service-instances, otherwise consistency problems, faulty sessions and other issues will occur!
>
>
>
> **Important:** The default vector database (ChromaDB) uses a local SQLite-backed client that is **not safe for multi-replica or multi-worker deployments**. SQLite connections are not fork-safe, and concurrent writes from multiple processes will crash workers instantly. You **must** switch to an external vector database (PGVector, Milvus, Qdrant) via [`VECTOR_DB`](https://docs.openwebui.com/reference/env-configuration#vector_db), or run ChromaDB as a separate HTTP server via [`CHROMA_HTTP_HOST`](https://docs.openwebui.com/reference/env-configuration#chroma_http_host).
>
>
>
> For the complete step-by-step scaling walkthrough, see [Scaling Open WebUI](https://docs.openwebui.com/getting-started/advanced-topics/scaling). For troubleshooting multi-replica issues, see the [Scaling & HA guide](https://docs.openwebui.com/troubleshooting/multi-replica).

> **Critical for Updates**
>
> If you run Open WebUI with multiple replicas/pods (`replicaCount > 1`) or `UVICORN_WORKERS > 1`, you **MUST** scale down to a single replica/pod during updates.
>
>
> 1. Scale down deployment to 1 replica.
> 2. Apply the update (new image version).
> 3. Wait for the pod to be fully ready (database migrations complete).
> 4. Scale back up to your desired replica count.
>
>
>
> **Failure to do this can result in database corruption due to concurrent migrations.**

## Access the WebUI

You can access Open WebUI by port-forwarding or configuring an Ingress.

### Ingress Configuration (Nginx)

If you are using the **NGINX Ingress Controller**, you can enable session affinity (sticky sessions) to improve WebSocket stability. Add the following annotation to your Ingress resource:

```
metadata:
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "open-webui-session"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
```

This ensures that a user's session remains connected to the same pod, reducing issues with WebSocket connections in multi-replica setups (though correct Redis configuration makes this less critical).

## Uninstall

1. **Uninstall the Helm Release:**

```
helm uninstall openwebui
```
2. **Remove Persistent Volume Claims (WARNING: Deletes all data):** Helm does not automatically delete PVCs to prevent accidental data loss. You must delete them manually if you want to wipe everything.

```
kubectl delete pvc -l app.kubernetes.io/instance=openwebui
```
