Skip to main content
  1. Posts/

Here Comes the Swarm 01

·2 mins·

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:

  1. Install Debian 12 on all nodes
  2. Configure networking and enable SSH
  3. Tweak the .env file if needed (I’m slowly migrating to Doppler for secrets management)
  4. 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!