Ownership
Agree an escalation path before production traffic starts.
Monitoring signals
Prometheus is the metrics baseline. Watch:- Pod readiness and restart counts for every service in the release, including Redis.
- Request success rate, error rate, latency, and time-to-first-audio.
- Queue depth, where the application exposes it.
- GPU utilization and GPU memory.
- CPU and memory usage against the configured requests and limits.
- Shared storage usage and latency.
- Redis availability and latency.
- Image pull failures and Kubernetes events in the release namespace.
Scaling
Scaling is controlled through Helm values, with one split worth knowing before you rely on it (see Kubernetes). The API, GPU, aligner, normalizer and router deployments keep the replica count they are already running when youhelm upgrade, so a raised value applies on install and does nothing on
an upgrade — scale those with kubectl scale. oxidengine, the model warehouse and
Redis take the value on every upgrade, so scale those in the values file; a kubectl scale on them is undone. API replicas, GPU worker replicas,
CPU and memory requests, GPU resource requests, and per-worker concurrency. Add a
GPU replica only when a GPU is actually free — a pod that requests a GPU on a
full cluster stays Pending indefinitely.
Validate every scale change with the smoke test and a benchmark run at your
expected concurrency, and remember that the first start of a new GPU worker pays
the compile cost before it becomes ready.
Backup and retention
Back up:- Reference voice archives, if your traffic uses reference ids. In a self-hosted deployment these are durable data, not cache — nothing can re-download them.
- The offline usage ledger directories, before they are pruned by your own archival process.
- The values file used for the production release.
- Secret manager entries.
- Dashboards and alert rules.
Upgrades
- Review the chart and image changes with Fish Audio.
- Render the manifests with your production values file.
- Apply to a staging or dry-run cluster if you have one.
- Capture the current release history.
- Upgrade during an approved window.
- Watch rollout status, then run the smoke test.
- Keep the previous revision available until the deployment is accepted.
Troubleshooting
Start here:
Collect detail for a single failing pod:
Escalating to Fish Audio
Include:- Kubernetes version, cloud provider, region, node types, and GPU type.
- Chart version and the values file with secrets removed.
- Pod status, relevant events, and logs with secrets redacted.
- The exact command that failed, with its output.
- Timestamp and time zone.

