Deploying OpenStack with Kolla-Ansible: A Practical Guide
Kolla-Ansible packages OpenStack as containers deployed by Ansible. Here's a practical walkthrough of a clean deployment, the config that matters, and where it bites.
- #openstack
- #kolla-ansible
- #deployment
- #ansible
- #containers
- #iac
If you’ve ever hand-installed OpenStack from packages, you know the special despair of getting twelve services, their databases, message queues, and config files to agree with each other. Kolla-Ansible exists to end that. It ships every OpenStack service as a container image and uses Ansible to deploy and configure the whole cloud from a handful of YAML files.
I’ve stood up production clouds both ways, and Kolla-Ansible is how I’d do it today. Here’s a practical walkthrough — the parts that matter and the parts that bite.
What Kolla-Ansible actually gives you
Two things: Kolla builds (or pulls) Docker images for each OpenStack service, and Kolla-Ansible orchestrates deploying those containers and rendering their configs. The payoff is repeatability — your entire cloud is described in globals.yml, an inventory, and an optional passwords.yml. Rebuild a controller and you get a byte-identical deployment.
The mental shift: you no longer edit /etc/nova/nova.conf on a host. You edit config templates and re-run the deploy. Hand-edits get wiped on the next run. Embrace it.
Step 1: Prepare the deploy host and nodes
On a clean Ubuntu/Rocky deploy host:
python3 -m venv /opt/kolla && source /opt/kolla/bin/activate
pip install 'ansible-core>=2.16'
pip install git+https://opendev.org/openstack/kolla-ansible@stable/2024.1
kolla-ansible install-deps
Copy the example config into place:
mkdir -p /etc/kolla
cp -r /opt/kolla/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
cp /opt/kolla/share/kolla-ansible/ansible/inventory/multinode .
Every target node needs SSH access, a second NIC (or VLAN) for the OpenStack network, and Python. That’s it — no pre-installed OpenStack packages.
Step 2: The config that actually matters in globals.yml
globals.yml is where 90% of your decisions live. The non-negotiables:
kolla_base_distro: "ubuntu"
openstack_release: "2024.1"
# The two networks that trip everyone up:
network_interface: "eth0" # internal API / management
neutron_external_interface: "eth1" # bare, no IP — Neutron owns it
kolla_internal_vip_address: "10.0.0.250" # a free IP, becomes the VIP
enable_haproxy: "yes"
enable_neutron_provider_networks: "yes"
The two mistakes I see most:
neutron_external_interfacehas an IP configured. It must be a bare L2 interface — Neutron takes it over. If it has an IP, external networking won’t work.kolla_internal_vip_addressis already in use. It must be a free IP on the management network; HAProxy/keepalived claims it as the VIP. Pick an address outside your DHCP range.
Step 3: Generate passwords and run the bootstrap
kolla-genpwd # fills /etc/kolla/passwords.yml
kolla-ansible bootstrap-servers -i ./multinode
kolla-ansible prechecks -i ./multinode
Never skip prechecks. They catch the bare-interface mistake, insufficient RAM, kernel modules missing, and time skew before you’ve deployed anything. A clean prechecks run is the single best predictor of a clean deploy.
Step 4: Deploy and bootstrap the cloud
kolla-ansible deploy -i ./multinode
kolla-ansible post-deploy -i ./multinode
post-deploy writes /etc/kolla/admin-openrc.sh. Source it and verify:
source /etc/kolla/admin-openrc.sh
openstack service list
openstack network agent list
docker ps --format '{{.Names}}\t{{.Status}}' | grep -i unhealthy
That last command is your health bellwether — any container marked unhealthy is where to start digging in /var/log/kolla/<service>/.
Step 5: Day-two operations
The same tooling runs your whole lifecycle:
- Add a compute node: add it to the inventory, run
kolla-ansible deploy --limit <newhost>. - Change a config: edit
/etc/kolla/config/<service>.conf, runkolla-ansible reconfigure. - Upgrade: bump
openstack_release, pull new images, runkolla-ansible upgrade.
The custom-config mechanism is the key day-two skill. Drop a file in /etc/kolla/config/nova.conf and Kolla merges it into the rendered config — that’s how you make persistent changes the supported way instead of hand-editing inside containers.
Where AI fits in the workflow
Kolla-Ansible failures are usually buried in long Ansible output. I pipe the failed task’s output into an LLM and ask:
“Here is the failing Ansible task and error from a kolla-ansible deploy. Tell me the most likely root cause, which globals.yml or inventory setting is implicated, and the read-only command to confirm it before I change anything.”
It’s quick at spotting “this is a VIP-already-in-use error” or “this container can’t reach RabbitMQ” from the noise. I also use it to draft the initial globals.yml for a new topology and then review every line myself. I keep these deploy-debugging prompts with my other OpenStack prompts.
What bites in production
A few hard-won lessons:
- Container images and config drift. Pin
openstack_releaseand your image registry. “Latest” in production is how you get a surprise mid-incident. - HAProxy VIP failover. Test keepalived failover deliberately before go-live, not during an outage.
- Logs live in containers. Get comfortable with
/var/log/kolla/anddocker logs <service>early. - Reconfigure is not free. It restarts services. Plan reconfigures like any change with downtime.
Kolla-Ansible turns OpenStack from a multi-day artisanal install into a repeatable, version-controlled deployment. Treat globals.yml as code, never hand-edit inside containers, and run prechecks every time. For more deployment and upgrade prompts, see our prompt library.
AI-suggested configs are assistive, not authoritative. Run prechecks and review every generated value before deploying.
Download the Free 500-Prompt DevOps AI Toolkit
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.