Skip to content
antalos

Open WebUI · Architecture

Two application replicas share open-webui-db, a two-instance PostgreSQL cluster with vector support. Redis has two persistent data nodes and a third Sentinel voter on RTX for distributed coordination. Uploaded objects use Garage. A migration Job handles database changes. The chart is configured with Recreate, so upgrades can stop both application replicas even though two run during steady state.

Component boundaries

Open WebUI · component flow
  1. Sign-in / chats
    • Browser → Authentik OIDC
    • Traefik HTTPS
  2. Chat interface
    • 2 Open WebUI replicas
    • Migration Job / Recreate upgrades
  3. State and inference
    • PostgreSQL + vectors · 2 instances
    • Redis · 2 data / 3 Sentinels
    • Garage uploads / model APIs
Arrows show the main flow between responsibility groups. Parallel boxes are related components, not interchangeable replicas; the text below defines their individual failure and recovery behavior.

State and recovery contract

Back up PostgreSQL and the Garage bucket together. Preserve the shared webui-secret-key across both replicas and recovery, as well as the OIDC and provider credentials. Local application storage is not the authoritative chat or upload database.

Availability and failure behavior

Availability classification: Partially HA: steady-state replicas exist, but Recreate upgrades and Redis/storage dependencies can interrupt all users.

This is an interpretation of the checked-in configuration, assuming the declared replicas are healthy, separated as intended, and their required dependencies are reachable. It is not a live-health result or a completed failure drill.

What supplies redundancy

Component Declared layout Mechanism
Web interface 2 anti-affined pods on main workers Shared application key and external state allow a surviving instance to serve.
PostgreSQL / vectors 2 CNPG instances Preferred synchronous replication with a stable writer endpoint.
Redis 2 data members + 3 Sentinels Client discovery selects a primary; the RTX member contributes a vote, not data.
Objects / models Garage uploads + external model APIs Neither dependency gains replicas from the Open WebUI Deployment.

How a failure is handled

New browser requests can reach the surviving instance after routing converges. Chats and knowledge state require the database and object store; distributed coordination requires a valid Redis primary. In-progress streams can stop and must be restarted by the client rather than moving to another process.

Failure scenarios

Failure Expected behavior and remaining dependency
One main worker One app, one database member, one Redis data member, and two Sentinel voters can remain. Sustained inference throughput depends on the model provider and surviving app capacity.
RTX worker only Leaves both app/data workers and two data-side Sentinels. Another voter or data-worker loss is outside the intended single-failure margin.
A second failure before recovery Outside the stated single-failure envelope; assess remaining data copies, quorum, endpoints, and capacity before further maintenance.

An RTX worker VM failure is not the same as an RTX Proxmox host failure. The latter also removes its control-plane VM and the configured API address. Read the physical failure-domain explanation before making a whole-host HA claim.

Upgrades and voluntary maintenance

The chart explicitly uses Recreate. A version rollout may terminate both application replicas before starting their replacements; the application PDB does not turn a controller-driven Recreate update into a rolling one.

What prevents a stronger HA claim

Redis persists role changes and data-side Sentinel topology on each existing PVC. Startup consults Sentinel before rejoining; first migration of an existing dataset requires agreement from two voters. Verify promotion and former-primary rejoin before asserting automatic recovery. Sentinel listeners intentionally omit requirepass for the current client contract; data-node authentication is a separate setting. Garage or model-provider failure can make a healthy UI unusable for its main workflow.

What would improve the availability contract

Document an upgrade outage unless a supported rolling/migration design is implemented. Establish Redis restart/rejoin correctness, durable backups, and a chat/upload test after failover. Keep the shared application secret identical across replicas and recovery.

These are operational/design requirements, not changes made to the deployment by this documentation. The shared availability reference explains election, replication, durability, recovery time, and shared dependencies; the manifest links below identify this service’s source.

Configuration ownership

apps/open-webui/ owns this service’s Kubernetes resources. Hostnames, addresses, versions, node names, and volume sizes belong in apps/variables.yaml. Runtime settings stored in a product database need that product’s backup and administration procedure.

Continue

Read the deployment guide for dependency order, initial credentials, and integration work. The official documentation explains the upstream product; the topology above describes this repository.

Recovery resource limits

The serving container requests 512Mi and permits up to 3Gi. A worker-loss drill exposed a cgroup OOM at the former 2Gi limit on the surviving replica; evaluate actual general-worker memory headroom as well as scheduling reservations before increasing load. The metrics exporter explicitly selects Open WebUI’s HTTP transport with OTEL_METRICS_OTLP_SPAN_EXPORTER=http for the configured VictoriaMetrics HTTP endpoint. This prevents the default TLS/gRPC exporter from retrying against that endpoint.

The two web replicas use zero-surge rolling updates with one unavailable replica, so applying a resource or configuration repair keeps a serving copy while its replacement starts.