A real-world migration from Docker Compose to a 2-node k3s cluster, with zero public ports on the new node, orchestrated entirely from one machine. Built for CKA exam prep and Senior Platform Engineer portfolio positioning.
Migrate 19 self-hosted services from Docker Compose to a 2-node k3s cluster, where:
This is a Project Level Up Javid deliverable โ career dev, not just sysadmin.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ TAILNET (100.64.0.0/10, encrypted mesh) โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ THIS BOX โ โ NEW NODE โ โ โ โ (worker-1) โ โ (control-plane-1) โ โ โ โ โ โ โ โ โ โ โข 19 Docker services โ โ โข k3s control-plane โ โ โ โ โข k3s agent (worker) โโโโค โข etcd (single node) โ โ โ โ โข kubectl โ remote API โ โ โข No public ingress โ โ โ โ โข Mission control hub โ โ โข Tailscale-only access โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ Tailscale ACL: tag:k3s-worker can SSH to tag:k3s-cp โ โ Only admins can claim these tags โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Criterion | Public Contabo VPS | Tailscale-Private |
|---|---|---|
| Public exposure | Public IP + firewall rules | Zero public ports |
| Monthly cost | $5-8/mo | $0 (old laptop / Pi) |
| Orchestration | Manual SSH + remote kubectl | kubectl from this box |
| Security model | VPS provider's network policies | Tailnet ACLs + tags |
| CKA alignment | Multi-node โ | Multi-node + private-cluster patterns |
| Reversibility | Yes | Yes |
The single most important property of this plan: Docker Compose keeps running in parallel throughout.
At any point, if k3s fails:
ssh cp-1 "sudo systemctl stop k3s" # 30 seconds sudo systemctl stop k3s-agent # 10 seconds docker compose ps # all 19 services STILL HEALTHY
That's it. Zero data loss. Five minutes total.
This is what makes the plan risk-free: every k3s experiment is reversible in less time than it takes to make a coffee.
| Option | Cost | Notes |
|---|---|---|
| Old laptop (4Gi+ RAM) | $0 | Best for CKA prep |
| Raspberry Pi 5 (8Gi) | $80 one-time | Low power, realistic, fun |
| Friend's spare server | $0 | Just needs Tailscale + LAN |
| Contabo VPS (4Gi) | $5-8/mo | Real datacenter node |
My recommendation: Old laptop or Pi 5. CKA exam is 100% software โ it doesn't care about cloud vs. bare metal.
| Path | Monthly | One-time | Reversible |
|---|---|---|---|
| Contabo public VPS | $5-8/mo | $0 | Yes |
| Old laptop (Path A+) | $0 | $0 | โ |
| Raspberry Pi 5 8Gi | $0 | $80 | Yes |
| Managed k8s (EKS/GKE) | $75-150/mo | $0 | Yes (effort) |
Path A+ is the lowest-cost option that still gives production-grade multi-node k3s experience.
A hiring manager reading this case study sees:
This is the difference between "I have a homelab" and "I run a production-grade platform."
The narrative for hiring managers:
"I migrated 19 production services from Docker Compose to k3s, with multi-node HA, Tailscale CNI, Longhorn replicated storage, and a 5-minute rollback strategy โ using only Tailscale for node-to-node networking. $0 cost. Covers ~80% of CKA exam domains."
That's a senior-tier story, not a junior story.
The migration is successful when: