ImageGoNord output of Persona 5, posted on Reddit
By Davide Imola
20 February, 2025
In a recent blog post, we highlighted the challenges faced with ImageGoNord, one of our most popular Open-Source projects. Today, we are thrilled to share that we have successfully migrated ImageGoNord's backend to Kubernetes!
ImageGoNord is a versatile tool that applies curated color palettes to images, transforming them into cohesive and visually stunning wallpapers, perfect for personalizing desktops. This tool has gained popularity among users who seek a consistent aesthetic for their digital environments.
Available as a standalone web application, Python package, or Python CLI, ImageGoNord offers flexibility and ease of use. As an Open-Source project, it invites collaboration, enabling anyone to view, modify, and contribute to its codebase. Users can host the application on their VPS, integrate the API into their projects, or leverage the Python package for their specific needs.
During our search for reliable hosting solutions, we have been supported by Hetzner, one of Europe’s leading web hosting providers, renowned for its dedicated servers, cloud solutions, web hosting, and storage services at competitive prices.
Hetzner generously provided us with a high-performance server free of charge for one year, becoming our first official technical sponsor. This sponsorship not only ensures reliable hosting for ImageGoNord but also supports other Open-Source projects within our organization.
Kubernetes has become the global standard for cloud-based infrastructure, offering numerous benefits such as:
Our commitment to Open-Source principles made Kubernetes an obvious choice for managing our backend infrastructure.
Deploying Kubernetes on a single server posed challenges since it typically requires at least two servers (one control plane and one node). Our solution? K3s, a lightweight Kubernetes distribution designed for IoT and edge computing, enabling a full Kubernetes instance on a single server.
To simplify deployment, we utilized k3sup, a CLI tool that installs K3s over SSH, configuring the Kubernetes client in under a minute. With a single command, we had Kubernetes up and running:
k3sup install \
--ip {insert ip here} \
--user {insert user here} \
--context {name of the context} \
--merge \
--local-path $HOME/.kube/config \
--ssh-key {path to SSH key}
With Kubernetes deployed, we needed an efficient strategy for application management. We adopted the GitOps methodology, treating infrastructure as code and managing our cluster through a Git repository. Every committed Kubernetes manifest is automatically applied to the cluster.
We chose Flux, a leading Open-Source GitOps tool, to automate our infrastructure and application lifecycle. Flux continuously monitors container registries for new versions, updating manifests automatically and ensuring rapid, efficient deployment of changes.
We prioritized simplicity in our server configuration, deploying ImageGoNord and Redis as straightforward Kubernetes deployments, using local storage as a Kubernetes volume.
An NGINX Ingress Controller manages the web interface, efficiently routing traffic and serving content securely via HTTPS. For seamless certificate management, we integrated cert-manager, which automatically issues and renews TLS certificates.
Migrating ImageGoNord to Kubernetes is a significant milestone for our project. With Hetzner’s support and the adoption of K3s, k3sup, and Flux, we have established a scalable, automated infrastructure that embodies our Open-Source mission.
Building on this success, we have also successfully migrated the backend APIs of Snackjob using the same approach.
We are excited to continue expanding our capabilities and embracing new challenges in the Open-Source ecosystem!