Running K3s on a Raspberry Pi has been one of the most rewarding projects I’ve tried in my home lab. The lightweight nature of K3s makes it perfect for a Raspberry Pi cluster, and it allows me to run applications in a way that is both resilient and easy to manage. Over time, I’ve experimented with several different workloads, and some of them have become permanent fixtures in my setup. Here are five of the most useful applications I’ve deployed.

Uptime Kuma for service monitoring

Checking the health and status of self-hosted apps

Uptime Kuma has been a perfect fit for my Raspberry Pi cluster. It monitors the availability of my self-hosted services and external endpoints and displays everything in a clean web dashboard. With K3s managing it, I can easily redeploy or update the service without worrying about losing data or breaking the configuration.

Even with checks running every minute across several services, the Pi’s hardware barely notices the load. That efficiency is part of what makes Kuma such a great monitoring solution for small clusters. I also use its notification system to send me alerts the moment something goes offline. Having that level of visibility has saved me time troubleshooting more than once.

What really makes this setup shine is how Kubernetes handles resilience. If a Kuma pod crashes or I reboot one of the nodes, K3s spins up a replacement automatically. That means I don’t need to manually intervene to get monitoring back up, which is reassuring for something so critical.

Pi-hole for DNS-level blocking

Removing ads and trackers across the whole network

Pi-hole is one of those applications I can’t imagine running without anymore. By filtering DNS requests, it blocks ads and trackers before they ever reach my devices. Deploying it on K3s gave me the flexibility to run multiple instances across the cluster, which means my network keeps working even if one node goes down.

The Raspberry Pi handles this workload effortlessly. Even when my household has several devices streaming or browsing, Pi-hole responds quickly and keeps the browsing experience clean. I also use persistent volumes in Kubernetes to make sure my blocklists and query logs survive restarts. That makes the setup both reliable and convenient.

One of the most significant benefits is how easily I can extend Pi-hole. Adding or updating blocklists is just a matter of updating the container configuration. With K3s managing everything, those changes propagate smoothly, and downtime is almost nonexistent. It’s a low-maintenance solution with a high payoff.

Gitea for self-hosted Git repos

Managing personal and project code repositories

Hosting my own Git repositories with Gitea has been another satisfying project. It’s a lightweight alternative to GitHub or GitLab and is well-suited for the limited resources of a Raspberry Pi. With K3s handling orchestration, I run Gitea alongside a database container and keep everything neatly separated.

This separation helps when it comes time for upgrades. Instead of risking the whole setup breaking, I can roll back or redeploy individual containers as needed. That kind of flexibility makes it much less stressful to maintain. The Pi may not be powerful, but Gitea doesn’t need much to run smoothly.

I mainly use it to host personal projects and configuration files, but it also gives me a place to experiment with CI/CD pipelines. While the pipelines themselves may not run directly on the Pi, managing them through Gitea lets me test workflows in a controlled environment. It’s a surprisingly capable tool for something so small.

Nginx Proxy Manager for access

Simplifying reverse proxy and SSL management

Nginx Proxy Manager has made handling external access much easier in my cluster. It provides a simple web interface for configuring reverse proxies, managing SSL certificates, and routing traffic to the right services. Deploying it with K3s means I can run it redundantly and avoid a single point of failure for my network traffic.

The interface makes it straightforward to add new services as I deploy them. Instead of editing long configuration files by hand, I just fill in a form and apply the changes. That saves time and reduces mistakes, especially when juggling multiple self-hosted apps.

Another benefit is the built-in support for Let’s Encrypt. Certificates renew automatically, and I don’t need to worry about them expiring at the worst possible time. Combined with Kubernetes orchestration, it creates a reliable and secure front door to my cluster.

Grafana and Prometheus for metrics

Visualizing performance and tracking resource usage

For deeper insight into how my cluster is performing, I run Prometheus alongside Grafana. Prometheus collects metrics from my containers and nodes, while Grafana turns that data into clear, interactive dashboards. It’s a heavier workload than some of the other apps, but K3s makes it manageable by distributing it across the cluster.

The Raspberry Pi may not have the same power as a full server, but with careful tuning, Prometheus and Grafana run reliably. I don’t keep months of historical data since that would overwhelm the storage, but for shorter retention periods, it works well. The dashboards give me a real-time view of CPU, memory, and network usage across all nodes.

This setup has been invaluable for spotting bottlenecks and planning upgrades. If a service starts consuming more resources than expected, I see it right away. That visibility helps me keep the cluster healthy and avoid surprises.

Why small clusters thrive with K3s

Running applications like these on a Raspberry Pi cluster shows just how versatile K3s can be. Even with limited resources, the combination of containerization and orchestration provides resilience, flexibility, and simplicity. These aren’t just experiments but practical services that improve my home network and workflows every day.

K3s

K3s offers a lightweight, but still versatile, way to containerize apps on your Raspberry Pi.