Context
The operation grew to serve multiple clients, and the Docker Compose-based model started causing friction in deployment, scalability, and troubleshooting.
The goal was to migrate to K3s with minimal downtime, while preserving per-tenant governance and cost predictability.
Action
Migration rollout
Rollout order
Decision
Migrate one pilot tenant before the remaining client groups.
Rationale
Validate the runbook, metrics, and rollback within a limited area.
Consequence
Configuration problems surface before they can affect the entire base.
Result
Migration completed with no availability incident noticeable to tenants. The phased rollout caught configuration issues in the pilot tenant before they could affect the entire base, and the smoke-test checklist caught regressions before they turned into incidents.
Phased or full rollout
Lessons learned
-
Migrating all tenants at once, without a pilot phase, would have hidden problems until they hit full scale — where the cost of rollback would have been much higher.
-
Ignoring per-tenant resource limits creates a noisy-neighbor problem: one noisy tenant drags down the performance of others on the same node.
-
An informal rollback process for a critical service is technical debt disguised as time savings — it comes due the first time a migration goes wrong.