I’d love to see more technical details in part 2. :)
For those wanting to ask, don’t use k8s. I went down the k8s route for a home lab and after spending man, many, hours I deleted it all and went back to my compose setup. Unless you’re specifically wanting to learn k8s for professional reasons there are better ways to spend your time, in my opinion of course.
Nomad is intriguing for its simplicity over k8s but I’ve been hesitant to go down another path when what I have works and is low maintenance.
I have a similar nomad+tailscale for my homelab with two nodes, one running on an arm machine and one running on an amd64. Nomad is definitely an overkill if you want to just run containers on a single node. I guess that you would be swap docker compose files with nomad config files at that point.
What I really like about my setup is that I was able to plug in a drone CI instance into the nomad stack, so that the individual CI runners are allocated by the cluster rather than the CI instance itself.
Nomad has its quirks (OP covers some of them under the gitea setup section). What I learned is that everything works well enough until you get yourself in a weird setup hedge case then it’s difficult to make it do what you want it to do.
I’m also looking forward part 2!
Not only is it overkill, I genuinely don’t understand what a container scheduler does for a single node set-up; what exactly is the scheduling algorithm deciding? Isn’t some combination of systemd and podman better?
It still can do nice things like rolling upgrades (not available with Docker Compose AFAIK; only Swarm has that feature) and has a nice workflow for running deployments from outside that node (e.g. from a CI/CD pipeline).
About that second point about deployments, I’ve never done Docker Compose deployments from outside the node that will run the workload. It seemed not quite fit for that — but I may have just assumed that without exploring the options. Nomad allows me to render entire configuration files as part of the deployment, and I’ve been finding that very handy.
But I’d still look for simpler solutions that provide the two benefits above. Some months ago I did some research and couldn’t find anything (it’s possible that my research wasn’t deep enough).
I use docker-compose for my “homelab” (if that’s today’s appropriate title for “a bunch of self-hosted services I run at home”). I find container orchestration to be overkill for that use-case, compared to simpler reliability improvements such as setting up a UPS. Unless of course your requirements really need a fleet of servers and/or your primary goal is just learning the tools.
That aside, I have been successfully running Nomad+Consul in production as part of an open-source SaaS for a year now. I’ve found it very straightforward, easy to maintain, and upgrades have been seamless with no downtime. From what interaction I’ve had with k8s in the past, I don’t regret my choice at all.