<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mario Ezquerro</title>
    <description>The latest articles on DEV Community by Mario Ezquerro (@marioezquerro).</description>
    <link>https://dev.to/marioezquerro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F878530%2F7288c9b0-63e5-4a85-b7a1-be9f1234dfbd.jpeg</url>
      <title>DEV Community: Mario Ezquerro</title>
      <link>https://dev.to/marioezquerro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marioezquerro"/>
    <language>en</language>
    <item>
      <title>Building a Hybrid Docker Orchestrator in Go: The Journey from Single VM to Multi-Node Cluster</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Tue, 14 Jul 2026 17:54:10 +0000</pubDate>
      <link>https://dev.to/gde/building-a-hybrid-docker-orchestrator-in-go-the-journey-from-single-vm-to-multi-node-cluster-3i7m</link>
      <guid>https://dev.to/gde/building-a-hybrid-docker-orchestrator-in-go-the-journey-from-single-vm-to-multi-node-cluster-3i7m</guid>
      <description>&lt;p&gt;What if you could combine the native simplicity of &lt;strong&gt;Docker Compose&lt;/strong&gt; with the decentralized targeting and reliability of &lt;strong&gt;HashiCorp Nomad&lt;/strong&gt;? &lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;Gubernator&lt;/strong&gt; (or &lt;code&gt;gbnt&lt;/code&gt;), a "Goldilocks" container orchestrator written in Go. In this post, I want to share how I took Gubernator from a single-node API to a fully decentralized, multi-node VM cluster with autonomous DNS resolution and local ingress routing—all co-authored alongside &lt;strong&gt;Antigravity&lt;/strong&gt;, Google DeepMind's agentic AI pair programmer.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Vision: Why Gubernator?
&lt;/h2&gt;

&lt;p&gt;Kubernetes is the undisputed king of container orchestration, but for small-to-medium projects, homelabs, or edge deployments, it represents massive operational overhead. Docker Swarm is simple but lacks fine-grained task scheduling constraints.&lt;/p&gt;

&lt;p&gt;Gubernator is designed to fill that sweet spot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single Binary Portability:&lt;/strong&gt; The same &lt;code&gt;gbnt&lt;/code&gt; binary acts as the Central Manager (holding the centralized SQLite state) and the Worker Agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Central SQLite with Local Cache:&lt;/strong&gt; Workers run a local cache so that containers keep running and resolving internal routes even if connectivity to the Manager is lost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decentralized Ingress &amp;amp; DNS:&lt;/strong&gt; The cluster leverages a distributed network of &lt;strong&gt;CoreDNS&lt;/strong&gt; and &lt;strong&gt;Caddy&lt;/strong&gt; instances.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Architecture: Multi-Node Setup
&lt;/h2&gt;

&lt;p&gt;To test the orchestrator realistically, we provisioned three Multipass Ubuntu VMs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gbnt-manager&lt;/code&gt; (&lt;code&gt;192.168.252.8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gbnt-worker1&lt;/code&gt; (&lt;code&gt;192.168.252.9&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gbnt-worker2&lt;/code&gt; (&lt;code&gt;192.168.252.10&lt;/code&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;graph TD
    Host[Mac/Laptop Host OS] --&amp;gt;|Resolves *.gbnt via local resolver| CoreDNS_Manager
    subgraph Manager VM [gbnt-manager: 192.168.252.8]
        CoreDNS_Manager[gbnt-coredns]
        Mgr[gbnt-manager API &amp;amp; DB]
        Caddy_Mgr[gbnt-caddy]
    end
    subgraph Worker 1 VM [gbnt-worker1: 192.168.252.9]
        Agent1[gbnt Agent]
        Caddy1[gbnt-caddy]
        CoreDNS1[gbnt-coredns]
        Cont1[App Containers]
    end
    subgraph Worker 2 VM [gbnt-worker2: 192.168.252.10]
        Agent2[gbnt Agent]
        Caddy2[gbnt-caddy]
        CoreDNS2[gbnt-coredns]
        Cont2[App Containers]
    end

    Mgr --&amp;gt;|Orchestrates| Agent1 &amp;amp; Agent2
    CoreDNS_Manager --&amp;gt;|Synchronizes Records| CoreDNS1 &amp;amp; CoreDNS2
    Caddy1 --&amp;gt;|Routes to local| Cont1
    Caddy2 --&amp;gt;|Routes to local| Cont2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Decentralized Ingress &amp;amp; Localized Caddy Routing
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges in multi-host networking is how to route web traffic to containers without overloading the Manager. &lt;/p&gt;

&lt;p&gt;Instead of routing all external traffic through a single ingress proxy on the Manager, we built a fully decentralized routing scheme:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Decentralized DNS (CoreDNS):&lt;/strong&gt; When a stack is deployed, Gubernator registers the domain (e.g., &lt;code&gt;hello-app.gbnt&lt;/code&gt;) pointing directly to the IP of the Worker VM hosting the container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Localized Ingress (Caddy):&lt;/strong&gt; Each VM runs its own independent Caddy Ingress container. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decentralized Caddyfiles:&lt;/strong&gt; Caddy on the Manager &lt;em&gt;only&lt;/em&gt; manages reverse-proxy rules for containers running locally on the Manager. Worker agents periodically poll the Manager for their assigned tasks and generate a local Caddyfile targeting &lt;em&gt;only&lt;/em&gt; their local containers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means if &lt;code&gt;hello-app.gbnt&lt;/code&gt; is deployed on &lt;code&gt;gbnt-worker2&lt;/code&gt; (&lt;code&gt;192.168.252.10&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The client's browser queries DNS, which resolves to &lt;code&gt;192.168.252.10&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The browser connects directly to Caddy on &lt;code&gt;gbnt-worker2&lt;/code&gt; on port 80.&lt;/li&gt;
&lt;li&gt;Caddy proxies the request to the local container IP (e.g. &lt;code&gt;172.17.0.2:80&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero transit traffic touches the Manager VM.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Co-authoring with Antigravity (Google DeepMind)
&lt;/h2&gt;

&lt;p&gt;What makes this project unique is that &lt;strong&gt;100% of the Go code, GORM integrations, Flutter dashboard widgets, and cluster setups were co-authored with Antigravity&lt;/strong&gt;, Google DeepMind's agentic AI coding assistant.&lt;/p&gt;

&lt;p&gt;Unlike simple autocomplete or chat windows, Antigravity acts as a pair programmer with agentic capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debugging Complex Network Behaviors:&lt;/strong&gt; We encountered an issue where containers connected to multiple Docker networks (like &lt;code&gt;bridge&lt;/code&gt; and &lt;code&gt;gbnt-monitor-net&lt;/code&gt;) had their IPs concatenated (e.g., &lt;code&gt;172.17.0.2172.19.0.7&lt;/code&gt;). Antigravity traced the container IP extraction logic, proposed a fix, and validated the parser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure Bootstrapping:&lt;/strong&gt; Antigravity ran Multipass commands to spin up the VMs, transfer Go binaries, configure authorization keys, and join the workers into the cluster via JWT tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Generating the Flutter Dashboard:&lt;/strong&gt; Antigravity designed and iterated on the Flutter Web UI, implementing features like a real-time cluster topology map, live task statuses, and a settings dialog containing system metadata and version tags.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cluster Observability
&lt;/h2&gt;

&lt;p&gt;Observability is built-in. By running &lt;code&gt;gbnt monitor init&lt;/code&gt;, the Manager spins up a complete telemetry stack connected via a dedicated network &lt;code&gt;gbnt-monitor-net&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cAdvisor:&lt;/strong&gt; Exposes hardware and container metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus:&lt;/strong&gt; Scrapes metrics from all nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grafana:&lt;/strong&gt; Visualizes metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loki &amp;amp; Promtail:&lt;/strong&gt; Aggregates logs across all nodes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Gubernator proves that you don't need a heavy orchestrator like Kubernetes to manage multi-host Docker deployments. By combining Go, SQLite, CoreDNS, and Caddy, we created a lightning-fast, decentralized orchestrator.&lt;/p&gt;

&lt;p&gt;Pair-programming with an agentic coder like Antigravity allowed me to focus on high-level architecture while the AI handled refactoring, cross-compilation, VM deployment, and frontend updates. &lt;/p&gt;

&lt;p&gt;If you are interested in building lightweight orchestration systems, check out the &lt;a href="https://github.com/mario-ezquerro/gubernator" rel="noopener noreferrer"&gt;Gubernator repository&lt;/a&gt; and start building!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you built or used lightweight orchestrators? Let me know in the comments below!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#devops&lt;/code&gt; &lt;code&gt;#docker&lt;/code&gt; &lt;code&gt;#golang&lt;/code&gt; &lt;code&gt;#ai&lt;/code&gt; &lt;code&gt;#pairprogramming&lt;/code&gt; &lt;code&gt;#antigravity&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>ai</category>
      <category>antigravity</category>
    </item>
    <item>
      <title>Stop Copy-Pasting `dns:` Blocks: Introducing Transparent DNS Injection in Gubernator</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Mon, 13 Jul 2026 06:21:32 +0000</pubDate>
      <link>https://dev.to/gde/stop-copy-pasting-dns-blocks-introducing-transparent-dns-injection-in-gubernator-ad4</link>
      <guid>https://dev.to/gde/stop-copy-pasting-dns-blocks-introducing-transparent-dns-injection-in-gubernator-ad4</guid>
      <description>&lt;p&gt;If you’ve ever built a containerized home lab, a multi-host cluster, or an internal development environment using Docker Compose with custom local DNS (like CoreDNS), you know this exact pain point:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
yaml
services:
  web:
    image: nginx:alpine
    dns:
      - 192.168.1.100  # Hardcoded CoreDNS IP
  api:
    image: my-api:latest
    dns:
      - 192.168.1.100  # Copied again...
  db:
    image: postgres:alpine
    dns:
      - 192.168.1.100  # And again!

It is repetitive, it litters your configuration files, and if you forget to paste that block or the DNS IP changes, your container is born blind—unable to resolve internal services or talk to the internet.

With Gubernator, we decided to eliminate this boilerplate entirely.

The Solution: Transparent DNS Injection 🪄
Starting with version v2.4.13, Gubernator implements Transparent DNS Injection.

Now, you can deploy your standard, clean, unedited docker-compose.yml file. No custom network configurations, no hardcoded IPs.

yaml
# Standard, clean Compose file. No "dns:" blocks required!
services:
  web:
    image: nginx:alpine
  api:
    image: my-api:latest
  db:
    image: postgres:alpine

Behind the scenes, Gubernator's deployment executor intercepts container creation and dynamically injects the cluster's CoreDNS host IP directly into the container's runtime configuration.

How It Works Under the Hood 
Host IP Auto-Detection: Gubernator automatically detects the Manager Node IP at startup (either via GBNT_HOST_IP or by testing outbound gateway paths).

Dynamic Templating: CoreDNS templates are updated on the fly to handle custom local routing domains (like *.gbnt and *.gbnt.test).
Runtime Interception: During scheduling and task execution, Gubernator intercepts the container host configuration and populates the DNS servers parameter with the dynamically resolved CoreDNS address.

The Result: 0% Boilerplate, 100% Magic 
Your containers are deployed instantly and gain immediate out-of-the-box support to:

Resolve internal service domains seamlessly.
Communicate with the outer internet through your configured upstream forwarders.
Adapt automatically even if the physical IP of your manager host changes.

Get Started 
Gubernator is designed to combine the simplicity of Docker Compose with the scheduling power of Nomad. You can inspect the code, read the documentation, and launch your first cluster today on GitHub:

Gubernator GitHub Repository https://github.com/mario-ezquerro/gubernator

If you find this feature useful, don't forget to drop a ⭐️ on GitHub! What are your thoughts on container DNS management? Let me know in the comments!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>docker</category>
      <category>go</category>
      <category>coredns</category>
      <category>antigravity</category>
    </item>
    <item>
      <title>Gubernator visual schema.</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Tue, 09 Jun 2026 09:42:18 +0000</pubDate>
      <link>https://dev.to/gde/gubernator-visual-schema-1dfc</link>
      <guid>https://dev.to/gde/gubernator-visual-schema-1dfc</guid>
      <description>&lt;h1&gt;
  
  
  Excited to share the latest feature built for Gubernator (gbnt): Visual Stack Topology &amp;amp; Network Schema!
&lt;/h1&gt;

&lt;p&gt;Gubernator is designed as a "Goldilocks" orchestrator—combining the raw simplicity of Docker Compose with Nomad-inspired scheduling and hardware/AI targeting. But deploying complex multi-container stacks means visualization is key to maintaining control.&lt;/p&gt;

&lt;p&gt;To bridge this gap, I’ve just integrated a native Web Network Schema &amp;amp; Container Topology Viewer directly into the Gubernator dashboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvhwdywnophnli5xinr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvhwdywnophnli5xinr8.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes it unique?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auto-discovered Ingress &amp;amp; Routing:&lt;/strong&gt; The scheduler parses docker-compose.yml to automatically place a virtual Caddy Ingress node in  web-facing services (e.g. n8n, WordPress, Jupyter)  and internal sinks/databases (e.g. MySQL, PostgreSQL).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Network Context&lt;/strong&gt;: Every container card details live telemetry—including internal container IPs, host port mappings, and active domains (e.g.ingress.host).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual Dependency Mapping:&lt;/strong&gt; Custom Bézier-curve connection lines are dynamically drawn in yellow/amber to highlight container network relationships and dependencies (like depends_on).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnmadeu9c3nfen9ehuao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnmadeu9c3nfen9ehuao.png" alt=" " width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-Click Multi-Format Export:&lt;/strong&gt; Perfect for team architecture syncs or DevOps documentation! Diagrams can be instantly exported and downloaded as PNG, JPEG, PDF, or native SVG (automatically adapting to light/dark system themes).&lt;/p&gt;

&lt;p&gt;Gubernator continues its journey to simplify local and edge container orchestration. Let me know what you think of this visualization layer! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mario-ezquerro/gubernator/" rel="noopener noreferrer"&gt;https://github.com/mario-ezquerro/gubernator/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;_ #Docker #Golang #Flutter #DevOps #Nomad #Orchestration #WebDevelopment #SystemArchitecture #Containers&lt;/p&gt;

</description>
      <category>docker</category>
      <category>gubernator</category>
      <category>antigravity</category>
      <category>agenticarchitect</category>
    </item>
    <item>
      <title>Gubernator E101 examples examples examplesss....</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Mon, 08 Jun 2026 12:30:01 +0000</pubDate>
      <link>https://dev.to/gde/gubernator-e101-examples-examples-exampesss-5akn</link>
      <guid>https://dev.to/gde/gubernator-e101-examples-examples-exampesss-5akn</guid>
      <description>&lt;p&gt;Gubernator Examples: Hands-On Tutorials&lt;/p&gt;

&lt;p&gt;Gubernator features four progressive developer examples designed to walk you from basic container orchestration to advanced AI workloads:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Example 101 — Getting Started (WordPress &amp;amp; MySQL)&lt;br&gt;
Goal: Understand the basics of single-node orchestration.&lt;br&gt;
Stack: A classic multi-container application consisting of a WordPress front-end and a MySQL database backend.&lt;br&gt;
Key Concepts: Persistent Docker named volumes, basic container scheduling, internal CoreDNS resolution (db.wp.gbnt), and initial Caddy Ingress routing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example 102 — Load Balancing (Round-Robin Routing)&lt;br&gt;
Goal: Learn how Gubernator handles horizontal scaling and high availability.&lt;br&gt;
Stack: A scaled deployment featuring multiple BusyBox HTTP replicas serving their individual container hostnames.&lt;br&gt;
Key Concepts: Scaling up replicas, automatic target grouping under a single DNS record, and Caddy Ingress configuring native round-robin load balancing across the running replicas under hello.gbnt.local.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example n8n — AI Automation Stack (RAG &amp;amp; Local LLMs)&lt;br&gt;
Goal: Orchestrate a modern, automated AI agent workflow.&lt;br&gt;
Stack: An automation workspace integrating n8n (workflows), PostgreSQL (backend database), Ollama (local LLM runtime running llama3.2), and Qdrant (vector database for RAG).&lt;br&gt;
Key Concepts: Inter-container communication using CoreDNS, complex service dependencies, transient automated setup tasks (auto-pulling LLM models on startup), and multi-domain Caddy Ingress routing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Example Jupyter — AI Development Stack (JupyterLab with PyTorch)&lt;br&gt;
Goal: Spin up a fully-equipped machine learning and data science environment.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stack: A specialized developer workspace running JupyterLab powered by the comprehensive quay.io/jupyter/pytorch-notebook image.&lt;br&gt;
Key Concepts: Managing large Docker image downloads, mounting persistent data scientist workspace volumes, and setting up Ingress reverse proxying for custom/non-standard container ports (port 8888).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;https://github.com/mario-ezquerro/gubernator/tree/main/examples&lt;/a&gt;&lt;a href="https://github.com/mario-ezquerro/gubernator/tree/main/examples" rel="noopener noreferrer"&gt;https://github.com/mario-ezquerro/gubernator/tree/main/examples&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  docker #gubernator #examples #orchestration
&lt;/h1&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>gubernator</category>
      <category>containers</category>
    </item>
    <item>
      <title>Examples Gubernator</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Sat, 06 Jun 2026 09:18:33 +0000</pubDate>
      <link>https://dev.to/gde/examples-gubernator-3pk9</link>
      <guid>https://dev.to/gde/examples-gubernator-3pk9</guid>
      <description>&lt;p&gt;Gubernator Orchestrator Update!&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbl5vy2wvofq7041ooyy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbl5vy2wvofq7041ooyy.jpg" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just shipped some major improvements examples to Gubernator (the lightweight Go container orchestrator):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Premium Data Grid UI: Upgraded the Tasks Dashboard to PlutoGrid for interactive column resizing, filtering, and custom actions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Ingress Routing: Fixed port mapping to auto-detect and route traffic to custom container ports (like n8n, Qdrant, Ollama) instead of hardcoding port 80.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI Automation Stack (n8n + Ollama + Qdrant): Added a complete RAG workflow example with automated LLM pulling and CoreDNS service discovery.&lt;br&gt;
Simplicity of Docker Swarm meets the flexibility of Nomad!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check it out: &lt;a href="https://github.com/mario-ezquerro/gubernator" rel="noopener noreferrer"&gt;https://github.com/mario-ezquerro/gubernator&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>gubernator</category>
      <category>docker</category>
      <category>containers</category>
    </item>
    <item>
      <title>Gubernator [the kill k8s]</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Tue, 02 Jun 2026 12:55:56 +0000</pubDate>
      <link>https://dev.to/gde/gubernator-the-kill-ku8s-2g0e</link>
      <guid>https://dev.to/gde/gubernator-the-kill-ku8s-2g0e</guid>
      <description>&lt;p&gt;Why I built an alternative to Kubernetes overkill.&lt;/p&gt;

&lt;p&gt;Let’s talk about infrastructure efficiency.&lt;/p&gt;

&lt;p&gt;Kubernetes is the undisputed industry standard for container orchestration, and for massive, complex enterprises, it’s irreplaceable. But for small-to-medium deployments or distributed multi-host edge environments, it often feels like an operational nightmare.&lt;/p&gt;

&lt;p&gt;You install a massive orchestration layer, only to realize it's still missing the basics for actual operations. To get it production-ready, you have to layer on external tools for Ingress routing, plus a heavy stack for observability, health metrics, and SLOs. Suddenly, your infrastructure consumes more resources than your actual applications.&lt;/p&gt;

&lt;p&gt;I believe in radical software minimalism. That’s why I’ve been developing Gubernator (gbnt), an open-source, lightweight distributed container orchestrator written entirely in Go.&lt;/p&gt;

&lt;p&gt;Unlike traditional platforms, Gubernator bakes essential Site Reliability Engineering (SRE) and traffic management right into its core architecture:&lt;/p&gt;

&lt;p&gt;Native Reverse Proxy: No complex third-party Ingress controllers. Gubernator automatically manages routing—like dynamically hooking up web containers to an Ingress layer (e.g., Caddy)—making exposure seamless and native.&lt;/p&gt;

&lt;p&gt;Built-in SRE &amp;amp; Observability: Out-of-the-box support for health monitoring, metrics, and SLO tracking natively leveraging OpenTelemetry and Prometheus.&lt;/p&gt;

&lt;p&gt;Zero-Bloat State Management: It swaps out heavy external key-value stores for an embedded, rock-solid SQLite architecture, ensuring multi-host consistency with a near-zero footprint.&lt;/p&gt;

&lt;p&gt;Gubernator is designed for engineers who want robust, predictable, and resilient orchestration without the overhead and cognitive load of K8s.&lt;/p&gt;

&lt;p&gt;If you are passionate about minimalist backend architecture, systems engineering, or streamlined DevOps, I’d love for you to take a look at the blueprint and documentation:&lt;/p&gt;

&lt;p&gt;Explore the project: &lt;a href="https://mario-ezquerro.github.io/gubernator/" rel="noopener noreferrer"&gt;https://mario-ezquerro.github.io/gubernator/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How do you handle container orchestration for smaller setups? Let’s connect and discuss in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  SoftwareEngineering #GoLang #SRE #DevOps #ContainerOrchestration #OpenSource #SystemsArchitecture #Minimalism
&lt;/h1&gt;

</description>
      <category>architecture</category>
      <category>infrastructure</category>
      <category>kubernetes</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The Kubernetes Overkill: Why I Built a "K8s Killer" for Small Environments</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Fri, 29 May 2026 09:48:30 +0000</pubDate>
      <link>https://dev.to/gde/the-kubernetes-overkill-why-i-built-a-k8s-killer-for-small-environments-m9k</link>
      <guid>https://dev.to/gde/the-kubernetes-overkill-why-i-built-a-k8s-killer-for-small-environments-m9k</guid>
      <description>&lt;p&gt;Let’s be honest: Kubernetes is the undisputed king of orchestration. But if you are running a small to medium-sized environment, deploying K8s is often like using a sledgehammer to crack a nut. It brings massive resource overhead and operational complexity that most projects simply do not need.&lt;/p&gt;

&lt;p&gt;Worse yet, despite its size, Kubernetes isn't actually a complete solution out of the box.&lt;/p&gt;

&lt;p&gt;If you want proper SRE management—like native observability, health checks, and Service Level Objectives (SLOs)—you have to bolt on a complex stack of external tools. Need Ingress management to expose your services? You'll have to configure and maintain third-party Ingress controllers just to get traffic flowing.&lt;/p&gt;

&lt;p&gt;That architectural bloat led me to advocate for a more minimalist approach. I wanted an orchestrator that provided everything necessary for robust deployments without the massive footprint.&lt;/p&gt;

&lt;p&gt;Enter Gubernator: built to be the Kubernetes killer for small environments.&lt;/p&gt;

&lt;p&gt;What Makes &lt;a href="https://mario-ezquerro.github.io/gubernator/" rel="noopener noreferrer"&gt;Gubernator&lt;/a&gt; Different?&lt;br&gt;
Gubernator (gbnt) is a lightweight, distributed container orchestrator written entirely in Go. It strips away the unnecessary layers of traditional orchestration and bakes the essential operational requirements directly into its core:&lt;/p&gt;

&lt;p&gt;Native SRE &amp;amp; Observability: Instead of treating SRE as an afterthought, Gubernator integrates robust health checks and observability (leveraging OpenTelemetry and Prometheus) directly into the orchestrator.&lt;/p&gt;

&lt;p&gt;Built-in Ingress Management: No need to wrestle with external controllers. Gubernator handles your ingress routing natively, simplifying how you expose and manage your services.&lt;/p&gt;

&lt;p&gt;True Software Minimalism: By using SQLite for data consistency rather than heavy key-value stores, Gubernator maintains a tiny resource footprint while ensuring reliable state management across multiple hosts.&lt;/p&gt;

&lt;p&gt;Developer-Friendly Interface: A clean REST API and an intuitive CLI tool get your containers running securely and efficiently.&lt;/p&gt;

&lt;p&gt;If you are tired of the Kubernetes learning curve and the overhead of maintaining tools you barely use, it's time to look at alternatives that prioritize simplicity and reliability.&lt;/p&gt;

&lt;p&gt;Check out the repository, documentation, and architecture here: Gubernator on GitHub Pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mario-ezquerro.github.io/gubernator/" rel="noopener noreferrer"&gt;https://mario-ezquerro.github.io/gubernator/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d love to hear from the community: at what point do you think Kubernetes becomes too big for its own good? Drop your thoughts in the comments!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Introducing Gubernator: A Minimalist Container Orchestrator Alternative</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Wed, 27 May 2026 06:11:16 +0000</pubDate>
      <link>https://dev.to/gde/introducing-gubernator-a-minimalist-container-orchestrator-alternative-3pf9</link>
      <guid>https://dev.to/gde/introducing-gubernator-a-minimalist-container-orchestrator-alternative-3pf9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa47dnujt6r8lav52uwfj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa47dnujt6r8lav52uwfj.jpg" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey everyone, I'm Mario. Over the past few months, I've been working on a project that I'm really excited to share with the community.&lt;/p&gt;

&lt;p&gt;If you've ever felt that Kubernetes (K8s) is a bit too heavy or overwhelming for certain deployments, you're not alone. While K8s is a powerhouse, it isn't always the right tool when you need a streamlined, minimalist approach. That’s exactly why I built Gubernator (gbnt).&lt;/p&gt;

&lt;p&gt;What is Gubernator?&lt;br&gt;
Inspired by the efficiency of Roman governance, Gubernator is a lightweight, distributed container orchestrator written entirely in Go. It’s designed to manage containers across multiple hosts efficiently, without the massive resource footprint and complexity of traditional orchestration systems.&lt;/p&gt;

&lt;p&gt;Key Highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplicity by Design: It features a clean REST API and an intuitive CLI tool (gbnt) to get your containers up and running quickly.&lt;/li&gt;
&lt;li&gt;Built for Reliability: SRE principles are a core focus. Gubernator natively integrates robust observability, health checks, and Service Level Objectives (SLOs) leveraging OpenTelemetry and Prometheus.&lt;/li&gt;
&lt;li&gt;Efficient State Management: Instead of requiring heavy external key-value stores, it utilizes SQLite to maintain rock-solid data consistency within a minimalist architecture.&lt;/li&gt;
&lt;li&gt;Performance-Oriented: Being Go-native, it’s fast, reliable, and perfectly suited for distributed environments or unikernel-inspired deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gubernator is an exploration into rethinking container management for modern, lightweight infrastructure. It's built for those who advocate for software minimalism and want just the right amount of orchestration without the overhead.&lt;/p&gt;

&lt;p&gt;You can check out the documentation and the repository here: Gubernator Docs &amp;amp; Repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mario-ezquerro.github.io/gubernator/" rel="noopener noreferrer"&gt;https://mario-ezquerro.github.io/gubernator/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts, feedback, or any questions you might have in the comments. Let's talk about minimalist backend architecture!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>gubernator</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>The Loading Screen</title>
      <dc:creator>Mario Ezquerro</dc:creator>
      <pubDate>Fri, 15 May 2026 08:46:20 +0000</pubDate>
      <link>https://dev.to/gde/the-loading-screen-1ka8</link>
      <guid>https://dev.to/gde/the-loading-screen-1ka8</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmx9pm31qa6mrzuwg4p7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmx9pm31qa6mrzuwg4p7.webp" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BUILD WITH AI [Antigravity]&lt;/p&gt;

&lt;p&gt;Building “&lt;strong&gt;The Loading Screen&lt;/strong&gt;”: A Real-Time Interactive Experience with Google Cloud Run and Anti-Gravity&lt;br&gt;
How we turned pre-event waiting time into a high-bandwidth, 100% stateless interactive game.&lt;/p&gt;

&lt;p&gt;The Concept: “Don’t Panic, We’re Caching the Awesome”&lt;br&gt;
We’ve all been there: waiting for a conference talk to start, staring at a static slide. We decided to change that. The Loading Screen is an interactive, real-time web application designed to turn pre-event “lag” into an analog networking experience.&lt;/p&gt;

&lt;p&gt;It consists of a massive “Stage View” (projected on the main screen) and a “Mobile Interface” that turns every attendee’s smartphone into a remote controller.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architecture:&lt;/strong&gt; 100% Stateless &amp;amp; Cloud-Native&lt;br&gt;
When building for live events, the two biggest fears are latency and sudden traffic spikes. To solve this, we designed the system to be completely stateless, optimized for the serverless nature of Google Cloud Run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Tech Stack:&lt;/strong&gt;&lt;br&gt;
Backend: Node.js 20+ with Express.&lt;br&gt;
Real-Time: WebSockets via Socket.io for sub-millisecond interaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment:&lt;/strong&gt; Dockerized containers on Google Cloud Run.&lt;br&gt;
Scaling: Designed to scale horizontally. Since it operates entirely in memory, it eliminates database bottlenecks during the high-intensity “shaking” phase of the game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Components&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Stage View (The Visual Centerpiece)
The Stage View is a retro-futuristic canvas inspired by 8-bit hacker culture and circuit board aesthetics.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The I/O Portal: A moving digital gateway acting as a 3D vanishing point.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://loading-screen.fiware.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;loading-screen.fiware.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The “Muggle March”: When a user launches a “Muggle” (a pixel-art character) from their phone, it appears on the big screen and marches toward the portal, shrinking in size to create a depth effect.&lt;/p&gt;

&lt;p&gt;Dynamic QR Integration: The screen automatically generates a QR code so attendees can jump into the action instantly without typing a URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Mobile Interface (Launch Control)&lt;/strong&gt;&lt;br&gt;
We wanted a “zero-install” experience. No App Store, just the browser.&lt;/p&gt;

&lt;p&gt;Shake-to-Launch: Leveraging the HTML5 DeviceMotion API, users physically shake their phones to "throw" their character onto the big screen.&lt;br&gt;
Anti-Gravity Feel: The integration with motion sensors provides a tactile, “anti-gravity” sensation as if the phone is pushing the character into the digital space.&lt;br&gt;
Customization: Users can add a 25-character message that floats above their character, creating a real-time, anonymous chat-bubble parade.&lt;/p&gt;

&lt;p&gt;Deployment &amp;amp; Scalability on Google Cloud&lt;br&gt;
By using Google Cloud Run, we achieved a “Pay-as-you-go” model that is perfect for events. The application stays at zero cost until the event starts, then scales instantly as hundreds of attendees scan the QR code.&lt;/p&gt;

&lt;p&gt;Become a Medium member&lt;br&gt;
The container is bound to the $PORT environment variable, making it fully compatible with Cloud Run’s managed runtime.&lt;/p&gt;

&lt;p&gt;Running it locally&lt;br&gt;
If you want to experiment with this setup, you can run the Dockerized version in seconds:&lt;/p&gt;

&lt;p&gt;Bash&lt;/p&gt;
&lt;h1&gt;
  
  
  Build the lightweight Alpine image
&lt;/h1&gt;

&lt;p&gt;docker build -t loading-screen .&lt;/p&gt;
&lt;h1&gt;
  
  
  Run the container
&lt;/h1&gt;

&lt;p&gt;docker run -d -p 8080:8080 -e PORT=8080 --name loading-screen-app loading-screen&lt;/p&gt;

&lt;p&gt;Lessons Learned&lt;br&gt;
Building The Loading Screen taught us that:&lt;/p&gt;

&lt;p&gt;State is the Enemy of Scale: Keeping the app in-memory and stateless allowed us to handle connections without worrying about DB latency.&lt;/p&gt;

&lt;p&gt;Permissions Matter: Modern mobile browsers (especially iOS 13+) require explicit user consent for motion sensors. A “Ready to Launch” button is essential for the UX.&lt;/p&gt;

&lt;p&gt;Visual Feedback is King: In a crowded room, seeing your specific character appear instantly on a 20-foot screen creates a powerful “wow” moment.&lt;/p&gt;

&lt;p&gt;Check out the Project&lt;br&gt;
The project is fully open-source. We encourage you to fork it, add new “Muggle” characters, or adapt it for your own tech meetups!&lt;/p&gt;

&lt;p&gt;to probe: &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://loading-screen.fiware.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;loading-screen.fiware.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Repository: &lt;a href="https://github.com/mario-ezquerro/loading-screen" rel="noopener noreferrer"&gt;https://github.com/mario-ezquerro/loading-screen&lt;/a&gt;&lt;br&gt;
Keywords: #GoogleCloud #NodeJS #WebSockets #GameDev #CloudRun #Serverless&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gamedev</category>
      <category>google</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
