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: 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 staysPending 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.

