ceph Infrastructure automation Open Source openstack Uncategorized

How to Build an Open-Source HCI Platform with Ceph, Kubernetes & OpenStack

From Cloud Chaos to Full Control — Automating Your Open-Source HCI

You don’t realize you’ve outgrown the cloud — until you do.

The first signs? Your object storage usage hits 100+ TB. Monthly bills creep into four-digit territory. And suddenly, that “convenient” cloud setup feels more like a cage.

That’s when building your own open-source Hyper-Converged Infrastructure (HCI) starts making real sense.

This guide walks you through setting up a full open-source HCI platform — combining OpenStack, Kubernetes, and Ceph, deployed entirely on Proxmox using a fully automated Bash script.

No vendor lock-in. No manual steps. Full control.


Note: Lab-Grade Setup for Learning & Validation

This guide demonstrates a lab-grade deployment intended for testing, learning, and staging purposes. It is not meant for production use as-is — but it provides a strong foundation to understand and validate the architecture before production rollouts.


What You’ll Learn

In this hands-on tutorial, you’ll learn how to:

  • Automate VM provisioning on Proxmox
  • Deploy a Kubernetes cluster using Kubespray
  • Install a Ceph cluster via Rook (S3-compatible)
  • Prepare OpenStack-ready nodes for future workloads

The Infrastructure Setup

This lab uses 7 nested VMs inside Proxmox:

  • os0: Bootstrap / control node
  • os1–os4: Kubernetes nodes (1 control plane + 3 workers)
  • os5 & os6: OpenStack-ready nodes with 32GB RAM each

All VMs are provisioned using Proxmox CLI (qm) and configured with cloud-init and SSH key automation.


The Script — Full Automation from VM to Ceph

The main script performs the following tasks:

  • Provisions 7 VMs with static IPs and hostnames
  • Creates and distributes SSH keys for access
  • Clones the Kubespray repository
  • Builds a custom hosts.yaml inventory for Kubernetes setup
  • Deploys Kubernetes via Ansible
  • Clones Rook and installs Ceph using K8s manifests

Why Modify Rook’s hostNetwork?

The script modifies cluster.yaml to set hostNetwork: true, ensuring proper communication between pods and nodes in nested virtualized environments — where bridged networking and NAT can create routing issues.


Watch It in Action

We’ve recorded the entire automation process — from VM provisioning to Kubernetes and Ceph deployment — in a real-world nested virtualization lab.

Watch the 14-minute speed-run on YouTube
▶️ https://www.youtube.com/watch?v=zyJhgXf0pt8

You’ll see:

  • Proxmox CLI used to spin up 7 VMs
  • SSH key distribution and cloud-init usage
  • Kubespray cluster setup and Rook-Ceph installation
  • Network tuning for nested VM environments (hostNetwork)

Whether you’re evaluating open-source HCI or just want to verify the script before running it — this video is your preview window.

Try It Yourself

Clone the repository:

git clone https://github.com/senolcolak/proxmox-k8s4rook.git
cd proxmox-k8s4rook
./1-rook-ceph.sh

This will spin up your own lab-grade, fully open-source HCI stack.


What Makes This Setup Different?

Most tutorials stop at Kubernetes or Ceph. This one goes beyond:

  • Automates full stack: Proxmox → Kubernetes → Ceph
  • Cleanly integrates etcd, control plane, and kube nodes
  • Prepares nodes for OpenStack workloads
  • Fully reproducible — great for demos, staging, or training

All on your infrastructure. On your terms.


SEO Tags

open-source hci, build open-source hci platform, kubernetes ceph openstack automation, rook-ceph proxmox nested virtualization, kubespray cloud-init cluster deployment, automated kubernetes ceph hci lab, ceph s3 compatible rook setup


Need Production-Grade Help?

Kubedo helps teams transition from vendor-dependent architectures to fully managed, open-source infrastructure. We design and operate production-grade Ceph + Kubernetes + OpenStack clusters.

Let’s talk — tell us what you’re building.


Thanks for reading — and watching.

Leave a comment

Your email address will not be published. Required fields are marked *