Challenge
About 30 client applications ran on a single server with a deployment panel. Deployments were manual, there was no security policy, and recovery after a failure existed only in theory. An inventory showed 49 application resources, 14 of them stopped, plus dead and duplicated services that took up memory and disk.
We wanted every application to be reproducible from the repository, isolated from the others and covered by monitoring, and for backups to be verified, not just taken.
Approach
We chose our own cluster over yet another PaaS. Every change goes through Git: GitHub Actions builds the image and signs it, and ArgoCD deploys only what is in the repository. The cluster rejects images without a valid signature.
We are migrating in waves: cleanup first, then stateless applications, then applications with a database, multi-service systems and WordPress last. For new projects there is a ready deployment path that the team copies instead of configuring from scratch.
Implementation
Security rests on several layers: image signature verification, network traffic between applications blocked by default, encryption of cluster data, audit logs, secrets in a manager with automatic reloading, and SSO login. Admin panels are reachable only on the private network, and public traffic goes exclusively through Cloudflare.
Backups have three layers in external storage: cluster state, application resources and data volumes. Weekly jobs actually restore a backup and check the result. Monitoring calculates SLOs with alerts on the error budget burn rate, and a cluster review report is produced every week.
Results
The cluster runs 32 applications, all synchronised with the repository and healthy, plus 17 databases with no restarts in the last week. Security policy check: 51 passed, 0 failed. A test restore of the databases from the old server gave data matching row for row.
In the failover exercise, restoring an application namespace took 5 s, a 5 GB volume 38 s, and the cluster state under a second. Optimisation lowered CPU reservations from 79% to 61% and cut the number of billable operations on the backup storage by 57%.











