K3s by itself is single-node-by-default but not single-point-of-failure-locked: you can add server nodes with k3s server --server https://<first>:6443 plus the shared token and it switches to HA etcd (needs an odd number, 3 minimum for real quorum). Two things people hit early:
- a single-node k3s uses SQLite; once you add the second server it migrates to embedded etcd automatically, but plan disk I/O accordingly
- keep an external backup of /var/lib/rancher/k3s/server/db regardless — etcd quorum loss with no snapshot is a rebuild, not a repair
If the workload is just a handful of services, plain Docker Compose with a second box and a simple DNS failover is honestly less machinery to babysit. HA k3s earns its complexity once you have operators or long-running stateful workloads that depend on reconciliations.