Private clouds are supposed to run on enterprise-grade servers.
They’re expected to cost thousands, need racks of servers, and a team of engineers to keep them running.
So I decided to break that rule.
With a single Raspberry Pi 4 and OpenNebula, I built a fully functional private cloud for under $50.

And here’s the exciting part: OpenNebula’s latest release now includes full ARM compatibility, so you can run the same enterprise-grade platform used in production on low-cost, power-efficient devices.
This isn’t just a weekend experiment, it’s a blueprint for real edge computing. From smart retail and remote IoT hubs to lightweight branch-office clouds, OpenNebula now makes it easy to extend your private cloud all the way to the edge.
Why This Matters for Edge
Edge computing isn’t just a trend, it’s a shift.
More data is being generated outside the data center than ever before. But most infrastructure still expects everything to flow back to the core.
Until now, running real cloud workloads at the edge meant choosing between platforms that were too heavy or tools that weren’t enterprise-ready.
OpenNebula 7.0 changes that.
With native ARM64 support, OpenNebula now runs natively on low-power devices like the Raspberry Pi, without losing the features you need in production.

Here’s what OpenNebula 7.0 “Phoenix” brings to the edge:
- ✅ ARM support out of the box: native packages and pre-built appliances for ARM64.
- ✅ AI-powered scheduling (OneDRS): smarter VM placement, automated migrations, and policy-based optimization.
- ✅ Hybrid and multi-cloud provisioning: deploy workloads seamlessly across edge, private data centers, and public clouds.
- ✅ Optimized for low-resource environments: smaller footprint, faster startup, and fewer dependencies, perfect for constrained edge nodes.
- ✅ Unified management at scale: manage distributed clusters from a single control plane, with built-in federation.
So what used to be a cool proof of concept, spinning up VMs on a Raspberry Pi, is now a real deployment option for edge infrastructure.
And yes, it works.
What You’ll Need
The minimal hardware and software:
- Raspberry Pi 4B (4GB or 8GB RAM recommended).
- Storage: 32GB+ microSD (or a USB SSD for better performance).
- Power supply and network connection (Ethernet preferred).
- 64‑bit OS: Ubuntu 24.04 LTS.

That’s it. A $50 board and OpenNebula. Let’s build.
Step 1: Prep Your Edge Node
- Start by flashing the OS. Download and flash Ubuntu Server 24.04 LTS (64-bit, arm64) to your microSD or SSD. You can grab it from Ubuntu’s Raspberry Pi downloads.
2. Update & install dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y qemu-system-arm libvirt-daemon-system bridge-utils cpu-checker
3. Check if KVM acceleration works
kvm-ok
You should see:
INFO: /dev/kvm exists
KVM acceleration can be used
4. Disable swap (recommended for stability)
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
Step 2: Install OpenNebula with MiniONE
The easiest way to get OpenNebula running is with MiniONE, an all-in-one installer.
wget 'https://github.com/OpenNebula/minione/releases/latest/download/minione'
chmod +x minione
sudo ./minione
It installs:
- OpenNebula frontend
- KVM hypervisor
- A NAT-based private network
- Default VM template (Alpine Linux ARM64)
After some minutes, you’ll see something like:
OpenNebula 7.0 was installed
Sunstone is running on:
http://192.168.1.130/
Use following to login:
user: oneadmin
password: vUpBGKE2rc
Open the URL in a browser and log in with those credentials:

Once we login, we’ll see the OpenNebula dashboard:

Step 3: Launch Your First VM
In Sunstone: go to Templates, then open VM Templates, choose Alpine Linux, and finally click Instantiate ▶️.

Give it a name, leave defaults, hit Finish.


Watch it appear under Instances → VMs.

Our Alpine VM has booted successfully. Let’s click on it to check its status and configuration details.


You can open a VNC console from the UI or SSH in from your terminal:

onevm ssh 1
So let’s see the whole picture of what we’ve done so far. We’re using a single Raspberry Pi as the OpenNebula Front-End and the KVM host where we’ve deployed the VMs. In order check all the hosts that are being managed by our control plane, let’s check it in Infrastructure > Hosts.
To view all the hosts managed by our control plane, head over to Infrastructure > Hosts in Sunstone.


Common ARM Issues & Fixes
1. Host shows as err in Sunstone (NUMA probe issue)
Why: Some ARM boards don’t expose NUMA topology, causing OpenNebula’s monitoring probe to fail.
To fix it, edit:
sudo nano /var/lib/one/remotes/im/kvm-probes.d/host/system/numa_host.rb
Add this before the Dir.foreach loop:
exit 0 unless Dir.exist? NUMA::NODE_PATH
And restart OpenNebula:
sudo systemctl restart opennebula
sudo -u oneadmin onehost list
2. VMs fail to boot on ARM
Why: QEMU defaults to a generic CPU type that may not match your board’s hardware.
To fix it, you have to add this line to your VM template:
onetemplate update 0
# Add:
CPU_MODEL = [ MODEL = "host-passthrough" ]
3. VMs have no internet access
To fix it, add a public DNS to your network:
onevnet update 0
# Add:
DNS = "8.8.8.8"
Where to Go Next
Now that you’ve got your first ARM-based private cloud up and running, it’s just the beginning. With OpenNebula 7.0 and native ARM support, you can deploy production-grade infrastructure anywhere — your desk, your data center, your edge. Add Tailscale or WireGuard for secure remote access, connect more Raspberry Pis to build a multi-node cluster, or start running real workloads with K3s or LXC containers.
It’s the same orchestration platform trusted in enterprise environments, now fully accessible to homelabbers, builders, and edge architects alike. If it works this well on a single Pi, imagine what you could do with a fleet.
Want more hands‑on tips about Kubernetes, Cloud, and DevOps?
👉 Follow me here on Medium and let’s connect on LinkedIn!