Rack of 1U and 2U servers with yellow and orange patch cabling and blue status lights in a data centre

Docker Fleet Consolidation & Swarm Migration Plan

The current state of the DigiLAN Docker fleet is fragmented: a heavily loaded standalone host (dockerlab01), a handful of underutilized Raspberry Pis, and a critical set of public services hosted on DigitalOcean. To achieve the goals of redundancy and stability, the fleet must move from \”standalone instances\” to a managed Docker Swarm.

Rack of 1U and 2U servers with yellow and orange patch cabling and blue status lights in a data centre
Rack of like-for-like nodes with dense patch cabling — the shape a Swarm is meant to present to the network. Photo by Sergei Starostin.

The Hardware Audit: a Tale of Two Architectures

The primary challenge in consolidating these hosts is the architectural split between x86_64 (AMD64) and ARM64.

  • The AMD64 Core: dockerlab01 (i7-9800X) and the potential for new VMs on the Proxmox (Ryzen 5 2400G) and ESXi hosts. This is where the bulk of existing production services (NetBox, Authentik, etc.) must live.
  • The ARM64 Edge: A cluster of four Raspberry Pis (2x Pi 5, 2x Pi 4), each utilizing dedicated 128GB USB storage for Docker. While powerful for their size, they cannot run the legacy AMD64 images used by the core stack.

The Proposal: A High-Availability (HA) Swarm

I recommend the creation of a 3-node Manager Quorum to ensure the control plane remains available even if one host fails.

1. The Manager Quorum (AMD64)

To prevent a single point of failure, the Swarm should be anchored by three identical-tier AMD64 managers:

  • Node 1: dockerlab01 (Existing).
  • Node 2: New VM on Proxmox (10.10.7.40).
  • Node 3: New VM on ESXi (10.7.7.40) or a second Proxmox VM.

2. Network Isolation: VLAN Migration

Depending on the current network congestion and security posture, the swarm should be moved away from the 10.7.7.X subnet. I propose a dedicated Docker Management VLAN (e.g., 10.7.20.0/24). This isolates the heavy \”east-west\” swarm traffic (state synchronization, overlay networks) from the general management traffic.

3. Data Persistence: The Storage Backbone

Redundancy is meaningless if the data is trapped on a single disk. The existing storage server (10.7.7.70) should be the primary backend for all Swarm volumes via NFS. This allows any container to restart on any node in the cluster without losing its state.

4. Repatriating DigitalOcean

The public services (Wiki.js, WordPress) should be migrated back to the internal Swarm. By using a dedicated \”Edge\” node or the existing Oconto Nginx proxy, we can maintain public access while keeping the data local and reducing monthly cloud spend.

5. The Role of the Raspberry Pis

The Pis should be joined to the Swarm as Worker Nodes. Rather than trying to force the core stack onto them, they should be used for arm64-compatible \”Edge\” services: monitoring agents, lightweight scripts, and home automation controllers. This utilizes their low power draw and expanded USB storage without compromising the stability of the main application stack.

Implementation Path

  1. Provision: Create the two new AMD64 VMs on Proxmox/ESXi.
  2. Network: Configure the new VLAN and assign IPs to the three managers.
  3. Initialize: Initialize the Swarm on dockerlab01 and join the other two as managers.
  4. Migrate: Move dockerlab01 workloads into Swarm services, mapping their state to the NFS storage.
  5. Repatriate: Pull the DigitalOcean backups and deploy them as services in the new cluster.
  6. Tether the Raspberry Pis as workers.

Similar Posts