๐Ÿ“– Case Study ยท Project Level Up Javid

Migrating 19 Services to a
Tailscale-Private K3s Cluster

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.

๐Ÿ“… Started 2026-08-17 ๐ŸŽฏ 5-week timeline ๐Ÿ’ฐ $0 cost ๐ŸŽ“ CKA exam alignment
WEEK 1 โ€” Pre-migration prep ยท Provisioning 2nd node ยท Installing k3s ยท Applying Tailscale ACL
19
Docker services to migrate
0
Public ports on new node
5 min
Full rollback time
$0
Total monthly cost

The Objective

Migrate 19 self-hosted services from Docker Compose to a 2-node k3s cluster, where:

  1. Both nodes are Tailscale-only โ€” zero public ports on the new node
  2. Orchestration happens from one box โ€” this server is the mission control
  3. The cluster doubles as a CKA exam lab โ€” covers ~80% of exam domains
  4. Risk is minimized โ€” Docker Compose keeps running in parallel throughout

This is a Project Level Up Javid deliverable โ€” career dev, not just sysadmin.

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                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                                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Why This Wins

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

Timeline

WEEK 1โ— IN PROGRESS
Pre-migration prep โ€” Provision 2nd node, install Tailscale, install k3s on both, apply ACL
Setup
WEEK 2โ—‹ Pending
5 admin UIs to k3s โ€” homarr, portainer, pocket-id, glances, redisinsight (~800Mi)
Stateless
WEEK 3โ—‹ Pending
4 stateful services โ€” redis, gitea, postgres, authentik-redis (Longhorn snapshots)
Stateful
WEEK 4โ—‹ Pending
4 critical services โ€” authentik, open_notebook, n8n, vectordb (30-60min downtime each)
Critical
WEEK 5โ—‹ Pending
Long-tail cleanup โ€” audiobookshelf, ignis, agent-vault (crowdsec stays on host)
Cleanup
WEEK 6+โ—‹ Pending
CKA exam study โ€” Use the live cluster as your exam lab
Career

The 5-Minute Rollback

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.

CKA Exam Alignment

15%
Cluster Architecture ยท Multi-node k3s + HA
20%
Workloads & Scheduling ยท Deployments, StatefulSets
20%
Services & Networking ยท Tailscale CNI, NetworkPolicy
10%
Storage ยท Longhorn PVs/PVCs/StorageClasses
30%
Troubleshooting ยท kubectl logs, debug, exec

Hardware Options

OptionCostNotes
Old laptop (4Gi+ RAM)$0Best for CKA prep
Raspberry Pi 5 (8Gi)$80 one-timeLow power, realistic, fun
Friend's spare server$0Just needs Tailscale + LAN
Contabo VPS (4Gi)$5-8/moReal datacenter node

My recommendation: Old laptop or Pi 5. CKA exam is 100% software โ€” it doesn't care about cloud vs. bare metal.

Cost Analysis

PathMonthlyOne-timeReversible
Contabo public VPS$5-8/mo$0Yes
Old laptop (Path A+) $0 $0 โœ“
Raspberry Pi 5 8Gi$0$80Yes
Managed k8s (EKS/GKE)$75-150/mo$0Yes (effort)

Path A+ is the lowest-cost option that still gives production-grade multi-node k3s experience.

Why This Works as a Portfolio Piece

A hiring manager reading this case study sees:

  1. Real migration experience โ€” not a tutorial, actual production code
  2. Risk management thinking โ€” rollback strategy, parallel run, phased rollout
  3. Modern infrastructure choices โ€” Tailscale mesh, Longhorn storage, GitOps-ready
  4. Cost-conscious engineering โ€” Path A+ beats Contabo + EKS by ~90%
  5. Career alignment โ€” directly maps to CKA cert + Senior PE job tier

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.

Success Metrics

The migration is successful when:

๐Ÿ“„ Download case-study.md ๐Ÿ“‹ Migration plan (with all bash commands) ๐Ÿ“Š Job Market Dashboard ๐ŸŽ“ Study Plan + Skill Tracker