One replica is a correctness requirement
Browser WebSockets and pending commands live in one server’s memory. PostgreSQL does not route browser messages between processes. More replicas would produce offline-browser errors or send requests to the wrong process. Sticky sessions do not solve this for independent MCP clients, extension connections, and restarts.- Keep
replicaCount: 1. Do not add an HPA, a second Deployment pointing at the same database, or a multi-worker process manager. - The Helm Deployment uses Recreate, not rolling surge, to avoid overlapping replicas.
- Restarting disconnects browsers and interrupts pending commands. Browser reconnect does not replay completed or interrupted commands safely.
- No high-availability, zero-downtime, or exactly-once browser action guarantee is provided.
Health, readiness, and migration failures
GET /healthz checks process liveness. GET /readyz checks database connectivity. Neither reports that a particular user’s extension is connected; check the dashboard’s browser status and last-seen metadata.
If the server pod is stuck in Init:
- Inspect the revision-named migration Job and its pods.
- If
wait-for-databaseis pending, verify database readiness, DNS, network policy, credentials, and TLS. - If migrations failed, read the migration logs and fix the root cause. Do not bypass the startup gate or mark a failed Job successful.
- If migrations completed but the server is waiting, verify the Job name, namespace-scoped Role/RoleBinding, projected token/CA, and reachability of
kubernetes.default.svc.
Upgrade checklist
- Verify both-edition CI, the target image digest, chart version, and database migration notes.
- Take a PostgreSQL backup and confirm the encryption key can be recovered.
- Tell users about disconnections and stop sensitive browser actions.
- Render and server-dry-run the intended configuration, then perform
helm upgrade --wait --wait-for-jobs. - Check migration completion, rollout status, Pod readiness, events, and
/readyz. - Reconnect a test browser and run
browser_tabsplus a snapshot on a harmless page.
helm rollback; restore from a tested backup if a destructive migration requires it. Do not change the PostgreSQL major version by merely editing its image tag on an existing volume.
Persistent data and secrets
PostgreSQL stores users, sessions, browser registrations, token hashes, encrypted settings, pending approvals, and metadata-only audit events. Back it up on an operator-defined schedule. Retention and cleanup policy are operator responsibilities; the chart is not a backup service. The bundled database uses an explicit Ceph RBD RWO PVC with a dedicated childPGDATA path and full-volume mount. No node-local storage or subPath is used. Retain and restore keys independently of storage snapshots. Database password changes require coordinated SQL role rotation and secret updates; environment changes do not reinitialize existing data.