Here Comes the Swarm 01

Table of Contents
Before I start discussing the actual swarm, we need to talk about the foundation it all sits on: my Proxmox cluster.
The Physical Setup #
My Docker Swarm doesn’t just appear out of thin air—it runs on top of a Proxmox VE cluster that I’ve been perfecting. Six nodes, three playing manager, three doing the heavy lifting as workers.
┌─────────────────────────────────────────────────────────────────┐
│ Proxmox VE Cluster │
├─────────────────────────────────────────────────────────────────┤
│ Managers: Workers: │
│ dkr-srv-1 ◄──► dkr-srv-2 ◄──► dkr-srv-3 │
│ 10.0.30.21 10.0.30.22 10.0.30.23 │
│ │
│ dkr-wrkr-1 dkr-wrkr-2 dkr-wrkr-3 │
│ 10.0.30.31 10.0.30.32 10.0.30.33 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ CephFS (/mnt/cephfs) │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
And it’s not just the swarm—there also a dedicated GitHub Actions runner (10.0.30.40) for CI/CD pipelines.
Building the Foundation #
All of this lives in my Proxmox Ansible repository. It’s built on top of lae’s excellent Proxmox Ansible role, with some extra roles I cobbled together for my specific needs.
The deployment process is pleasantly dull—in a good way:
- Install Debian 12 on all nodes
- Configure networking and enable SSH
- Tweak the
.envfile if needed (I’m slowly migrating to Doppler for secrets management) - Run the Ansible playbook
And Ansible handles the magic:
- Debian packages get updated (reboots included when needed)
- Proxmox cluster formation
- CephFS cluster setup
- Storage provisioning
I also recently added Beszel for node monitoring—so I can keep an eye on everything without guesswork.
With the foundation ready, let’s finally talk about the swarm!