Phase 7 – Deploy OpenStack on the Homelab

At this point your lab should look like this:

                3 × Dell T5500

┌───────────┴───────────┐
│ │
Proxmox Cluster (HA)

├── Ceph Cluster (HEALTH_OK)

├── Ubuntu Cloud Images

└── Ansible Management VM

Ceph is now your shared storage layer.

OpenStack becomes the cloud control plane that sits above Ceph.


Overall Architecture

For your lab I recommend Kolla-Ansible.

Why?

  • Uses Docker containers
  • Easier to upgrade
  • Mirrors many production deployments
  • Very well documented
  • Easier to rebuild if something breaks

Architecture:

                    OpenStack
─────────────────────────────────────────

Keystone Identity

Nova Compute

Neutron Networking

Glance Images

Cinder Block Storage

Placement Scheduling

Horizon Dashboard

RabbitMQ Messaging

MariaDB Database

HAProxy Load Balancer

Memcached Cache

Docker Containers

Ansible Deployment

Step 1 — Build a Deployment VM

Don’t install OpenStack directly from Proxmox.

Instead create one VM.

Example:

Name:
ansible-openstack

Ubuntu 24.04

4 vCPU

8GB RAM

60GB Disk

Install:

sudo apt update

sudo apt install \
python3-pip \
git \
ansible \
docker.io \
docker-compose \
python3-venv

Step 2 — Prepare the OpenStack Nodes

Create three VMs.

Example

controller01

compute01

compute02

Suggested sizes

Controller

8 CPU

16GB RAM

100GB Disk

Compute 1

8 CPU

16GB RAM

100GB Disk

Compute 2

8 CPU

16GB RAM

100GB Disk

Later these can become real bare-metal servers.


Step 3 — Install Docker

On every OpenStack node:

apt install docker.io

Enable:

systemctl enable docker

systemctl start docker

Step 4 — Install Kolla-Ansible

On deployment VM

python3 -m venv ~/kolla

source ~/kolla/bin/activate

pip install \
ansible \
kolla-ansible

Generate configuration

cp -r \
/usr/local/share/kolla-ansible/etc_examples/kolla \
/etc/

cp \
/usr/local/share/kolla-ansible/ansible/inventory/all-in-one \
.

Step 5 — Configure Inventory

Example

controller01

compute01

compute02

Inventory

control

network

compute

storage

monitoring

Because this is only three nodes:

controller01

does

Control

Network

Monitoring

while

compute01

compute02

run Nova Compute

Step 6 — Configure globals.yml

This file controls everything.

Important settings

network_interface

api_interface

neutron_plugin_agent

enable_cinder

enable_ceph

enable_horizon

enable_heat

enable_magnum

For your first install

Enable only

Keystone

Nova

Neutron

Glance

Cinder

Placement

Horizon

Leave

Magnum

Heat

Octavia

Designate

Ironic

OFF

for now.


Step 7 — Bootstrap Servers

kolla-ansible bootstrap-servers

This installs

Docker

Packages

Dependencies

Users


Step 8 — Prechecks

Run

kolla-ansible prechecks

Fix every warning.

Do not continue until

SUCCESS

Step 9 — Deploy

Deploy

kolla-ansible deploy

This creates

Around

40-60

Docker containers

depending on enabled services.


Step 10 — Install Client

pip install python-openstackclient

Generate credentials

kolla-ansible post-deploy

Load

source /etc/kolla/admin-openrc.sh

Now

openstack server list

should work.


The Core OpenStack Services


Keystone

Identity service.

Equivalent to:

Active Directory

LDAP

Identity Provider

Responsibilities

  • Users
  • Passwords
  • Projects
  • Roles
  • Authentication
  • Service Catalog

Typical commands

openstack user list

openstack project list

openstack role list

Nova

Controls virtual machines.

Nova does not actually run VMs.

It asks:

libvirt

KVM

QEMU

to run them.

Nova contains

nova-api

nova-conductor

nova-scheduler

nova-compute

Learn

Scheduler

Cells v2

Placement

especially.


Placement

One of the most important services.

Tracks

CPU

RAM

Disk

PCI

GPU

NUMA

Scheduler asks Placement

Where should this VM go?

Without Placement

Nova cannot schedule properly.


Glance

Stores images.

Example

Ubuntu

Rocky

Windows

Typically backed by

Ceph RBD

Workflow

Upload Image



Store in Ceph



Nova Boots VM



Copies metadata



Creates VM disk

Commands

openstack image list

Neutron

Probably the hardest service.

Provides

Networks

Routers

DHCP

Floating IPs

Security Groups

Learn

Provider Networks

Tenant Networks

VXLAN

Open vSwitch

OVN

Spend time understanding packet flow.


Cinder

Block Storage

Instead of storing VM disks locally

Nova



asks



Cinder



which creates



Ceph RBD Volume

Commands

openstack volume list

Horizon

Web interface

Useful while learning.

Eventually

You’ll mostly use

CLI

Terraform

Ansible


RabbitMQ

OpenStack services communicate using queues.

Example

Nova

asks

Neutron

to create networking.

RabbitMQ transports those messages.


MariaDB

Stores

Everything.

Users

Projects

Networks

VM metadata

Volumes

Images

Never delete this database.


HAProxy

Front-end load balancer.

Provides

One API endpoint

instead of

20 different service addresses.


Memcached

Stores authentication tokens.

Reduces load on Keystone.


How Ceph Fits

Once OpenStack is running, integrate Ceph:

Glance

Ceph RBD

Cinder

Ceph RBD

Nova

Ceph RBD

This allows:

  • Boot from volume
  • Thin provisioning
  • Snapshots
  • Live migration without copying disks
  • Shared storage for all compute nodes

Practical Exercises

Work through these in order:

  1. Upload an Ubuntu cloud image to Glance.
  2. Create an external provider network and an internal tenant network.
  3. Launch your first VM from Horizon and again using the CLI.
  4. Create a Cinder volume and attach it to the VM.
  5. Assign a floating IP and SSH into the instance.
  6. Create a snapshot of the running VM.
  7. Migrate the VM between compute nodes (shared Ceph storage means no disk copy).
  8. Create separate projects and users, applying quotas and RBAC.
  9. Configure Nova to recognise a passed-through GPU and create a GPU-enabled flavor.
  10. Deploy a small Kubernetes cluster on OpenStack VMs, then later a Slurm cluster on the same cloud.

End Goal

By the end of Phase 7, your homelab should resemble this:

             Users

Horizon / CLI / API

OpenStack APIs

┌────────────────────────────────────┐
│ Keystone Nova Neutron Glance │
│ Cinder Placement RabbitMQ │
└────────────────────────────────────┘

KVM / libvirt / QEMU

Shared Ceph RBD Storage

Proxmox Virtual Machines

Three Dell T5500 Workstations

Once this foundation is stable, you’ll be ready to build Phase 8 (Kubernetes on OpenStack), followed by Phase 9 (Slurm for HPC scheduling), creating a complete AI/HPC cloud platform.