How I set up a GitOps pipeline with ArgoCD in my homelab
From bare-metal k3s to application sync — what a practical GitOps loop looks like when everything lives in one repository.
My homelab started as a small k3s cluster and gradually accumulated enough services that manual deployments stopped being reliable. ArgoCD gave me a simple rule: Git describes the desired state, and the cluster continuously reconciles toward it.
Repository layout
I keep cluster infrastructure and applications in one repository. Each application has its Kubernetes manifests, while environment-specific values live in separate overlays.
clusters/
homelab/
apps/
monitoring/
media/
internal-tools/ArgoCD watches the homelab path and applies changes after they land on the main branch. Pull requests remain the review boundary; the cluster never depends on a developer laptop.
The practical sync loop
Every change follows the same short path:
- Update an image tag or manifest.
- Review the generated diff in a pull request.
- Merge the change.
- Let ArgoCD sync and report health.
Automatic sync works well for routine application updates. I still keep pruning and destructive infrastructure changes behind an explicit review because a green YAML diff is not a guarantee of a safe rollout.
What made it dependable
The useful part was not installing ArgoCD; it was making drift visible. Health checks, pinned image versions, and small application boundaries make failures easier to understand. When something goes wrong, I can compare the live cluster with Git and roll back with a revert instead of reconstructing the last working command.