Skip to content

Commit 3e2e83e

Browse files
authored
Merge pull request #3204 from pareenaverma/content_review
Tech review of Openstack LP
2 parents 55c44d4 + 8bd343d commit 3e2e83e

7 files changed

Lines changed: 340 additions & 266 deletions

File tree

content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
---
22
title: Deploy OpenStack on Azure Cobalt 100 Arm64 Virtual Machine
3+
description: Deploy OpenStack on Azure Cobalt 100 Arm64 virtual machines using DevStack for development and Kolla-Ansible for containerized production deployments.
34

45
draft: true
56
cascade:
67
draft: true
78

8-
minutes_to_complete: 60
9+
minutes_to_complete: 90
910

1011
who_is_this_for: This learning path is designed for developers, DevOps engineers, and platform engineers who want to deploy and manage OpenStack on Arm-based cloud environments using Kolla-Ansible and DevStack.
1112

content/learning-paths/servers-and-cloud-computing/openstack-on-azure/background.md

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -47,35 +47,36 @@ A typical OpenStack deployment consists of:
4747
* **Networking (Neutron):** Handles virtual networking, bridges, and routing
4848
* **Storage Services:** Provide block and object storage
4949

50-
In this learning path, OpenStack is deployed using **Kolla-Ansible**, which runs services as containers for easier management.
50+
## Two deployment approaches
5151

52+
This Learning Path covers two ways to deploy OpenStack on an Azure Cobalt 100 Arm64 VM. Each approach has different requirements and suits a different use case.
5253

53-
## Use cases
54+
**DevStack** is a script-based installer designed for development and testing. It runs all OpenStack services directly on the host OS and is the fastest way to get a working OpenStack environment. It is not suitable for production.
5455

55-
OpenStack is widely used across industries:
56+
**Kolla-Ansible** runs every OpenStack service as a Docker container and is the recommended approach for reproducible, production-grade deployments. It takes longer to set up but is easier to manage, upgrade, and extend.
5657

57-
* **Private Cloud Infrastructure:** Build internal cloud platforms
58-
* **Dev/Test Environments:** Rapid provisioning of virtual machines
59-
* **Edge Computing:** Lightweight deployments on Arm-based hardware
60-
* **Telco Cloud:** Network function virtualization (NFV)
61-
* **Research and HPC:** Scalable compute environments
58+
| Feature | DevStack | Kolla-Ansible |
59+
|---------|----------|---------------|
60+
| Purpose | Development and testing | Production-grade deployment |
61+
| Deployment method | Shell scripts on host OS | Docker containers via Ansible |
62+
| Setup time | ~20 minutes | ~60 minutes |
63+
| Arm64 images required | No | Yes (Debian-based) |
64+
| Networking | Simplified (Neutron disabled) | Full Neutron with OVS |
65+
| Horizon dashboard | Yes | Yes |
6266

63-
## Learn more about OpenStack
67+
Each approach runs on its own dedicated VM. Do not run both on the same virtual machine — they use the same ports and will conflict.
6468

65-
To learn more about OpenStack, see:
69+
## VM requirements for each deployment
6670

67-
- [OpenStack Official Website](https://www.openstack.org/)
68-
- [OpenStack Documentation](https://docs.openstack.org/)
69-
- [OpenStack GitHub Repository](https://github.com/openstack)
70-
- [Kolla-Ansible Documentation](https://docs.openstack.org/kolla-ansible/latest/)
71+
Because the two approaches have different infrastructure requirements, this Learning Path uses two separate Azure VMs.
7172

72-
## What you will learn
73+
| | VM 1 — DevStack | VM 2 — Kolla-Ansible |
74+
|-|-----------------|----------------------|
75+
| vCPUs | 4 | 4 (8 recommended) |
76+
| RAM | 8 GB | 16 GB recommended |
77+
| OS disk | 80 GB | 100 GB |
78+
| Data disk | None | 32 GB (for Cinder/Docker) |
79+
| NICs | 1 (`eth0` with IP) | 2 (`eth0` management + `eth1` external) |
80+
| OS | Ubuntu 24.04 | Ubuntu 24.04 |
7381

74-
In this learning path, you will:
75-
76-
* Deploy OpenStack on an Azure Cobalt 100 Arm64 virtual machine
77-
* Configure core OpenStack services (Keystone, Nova, Neutron, Glance, Cinder)
78-
* Deploy containerized OpenStack using Kolla-Ansible
79-
* Set up networking and storage for OpenStack
80-
* Launch and manage virtual machine instances
81-
* Access and manage resources using CLI and Horizon dashboard
82+
You'll create VM 1 first, complete the DevStack deployment, then create and configure VM 2 before the Kolla-Ansible deployment.

content/learning-paths/servers-and-cloud-computing/openstack-on-azure/devtstack-deployment.md

Lines changed: 105 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,26 @@
11
---
22
title: Deploy OpenStack on Azure Arm using DevStack (Cobalt 100)
3-
weight: 5
3+
weight: 4
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

99
## Deploy OpenStack on Arm using DevStack (Azure Cobalt 100)
1010

11-
{{% notice Note %}}Use the VM with a single network interface (DevStack setup). You do not need to add an extra NIC or data disk for these steps.{{% /notice %}}
11+
{{% notice Note %}}Use the VM you created in the previous step: a single-NIC D4ps_v6 instance with at least 80 GB of disk. You do not need an extra NIC or data disk for DevStack.{{% /notice %}}
1212

13-
This guide walks you through deploying OpenStack using DevStack on an Arm-based Azure virtual machine (Azure Cobalt 100).
13+
{{% notice Warning %}}DevStack and Kolla-Ansible must not run on the same VM at the same time. Use separate VMs for each approach. If you run both on the same host, port conflicts will cause deployment failures.{{% /notice %}}
1414

15-
DevStack is a lightweight OpenStack deployment tool designed for development and testing.
16-
It installs core OpenStack services such as Nova, Keystone, Glance, and Horizon on a single node.
15+
This guide walks you through deploying OpenStack using DevStack on an Arm-based Azure virtual machine running Azure Cobalt 100. DevStack is a script-based installer designed for development and testing. It runs all OpenStack services directly on the host OS and deploys Nova, Keystone, Glance, and Horizon on a single node.
1716

1817
After completing this guide, your environment will:
1918

20-
* Run OpenStack services locally
21-
* Provide access to the Horizon
19+
* Run OpenStack services on your Azure Cobalt 100 VM
20+
* Provide access to the Horizon dashboard
2221
* Support Arm64 (`aarch64`) architecture
2322
* Be accessible via browser and CLI
2423

25-
## Objective
26-
27-
In this guide, you will:
28-
29-
* Deploy OpenStack on Arm using DevStack
30-
* Fix Arm-specific compatibility issues (etcd, libvirt)
31-
* Access Horizon dashboard via public IP
32-
* Validate services using OpenStack CLI
33-
34-
## Environment
35-
36-
| Component | Value |
37-
| --------- | -------------------- |
38-
| Platform | Azure Cobalt (Arm64) |
39-
| OS | Ubuntu 24.04 |
40-
| VM Size | D4ps_v6 |
41-
| RAM | ≥ 8 GB |
42-
| Disk | ≥ 80 GB |
43-
4424

4525
## Clean previous setup
4626

@@ -79,29 +59,22 @@ These tools are required for:
7959

8060
## Configure hostname
8161

62+
Setting a hostname avoids registration issues where OpenStack services identify themselves by hostname. Run:
63+
8264
```console
83-
sudo hostnamectl set-hostname devstack-Arm
65+
sudo hostnamectl set-hostname devstack-arm
8466
exec bash
8567
```
8668

87-
Setting a consistent hostname ensures:
88-
89-
* Proper service registration
90-
* Correct identification in OpenStack services
91-
9269
## Install etcd (Arm fix)
9370

94-
DevStack uses etcd internally, but on Ubuntu 24.04 Arm:
95-
96-
* Built-in etcd service is unstable ❌
97-
98-
So we install a stable Arm-compatible version manually.
71+
DevStack uses etcd internally for service coordination. The etcd package included in Ubuntu 24.04 is not built for Arm and is unstable in this environment. Install a known-stable Arm64 binary directly from the etcd GitHub releases instead.
9972

10073
```console
10174
cd /tmp
102-
wget https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-Arm64.tar.gz
103-
tar -xvf etcd-v3.5.13-linux-Arm64.tar.gz
104-
cd etcd-v3.5.13-linux-Arm64
75+
wget https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-arm64.tar.gz
76+
tar -xvf etcd-v3.5.13-linux-arm64.tar.gz
77+
cd etcd-v3.5.13-linux-arm64
10578
sudo cp etcd etcdctl /usr/local/bin/
10679
```
10780

@@ -165,16 +138,26 @@ git clone https://opendev.org/openstack/devstack
165138
cd devstack
166139
```
167140

168-
This downloads the DevStack scripts required to install OpenStack.
141+
This clones the DevStack repository, which contains the scripts that install and configure all OpenStack services.
142+
143+
## Get private IP
144+
145+
DevStack binds OpenStack services to the VM's private IP. Run the following command to find it:
146+
147+
```console
148+
hostname -I
149+
```
150+
151+
If the output shows two addresses, use the first one. The second is typically an Azure secondary IP configuration.
169152

170153
## Configure DevStack
171154

155+
Create a `local.conf` file in the DevStack directory. This file controls which services are installed and how they are configured.
156+
172157
```console
173158
vi local.conf
174159
```
175160

176-
### Arm-optimized configuration
177-
178161
```ini
179162
[[local|localrc]]
180163
ADMIN_PASSWORD=admin
@@ -205,22 +188,19 @@ ENABLE_HTTPD_MOD_WSGI_SERVICES=False
205188
LIBVIRT_TYPE=qemu
206189

207190
disable_service tempest
208-
```
209191

210-
### Why these changes?
192+
GIT_DEPTH=1
193+
```
211194

212-
* **Disable Neutron** → avoids Arm networking issues
213-
* **Disable etcd3** → uses our stable external etcd
214-
* **LIBVIRT_TYPE=qemu** → avoids KVM issues on Arm
215-
* **Enable Horizon** → provides web UI
195+
Replace `<Private_IP>` with the IP address from the previous step.
216196

217-
## Get private IP
197+
### Key configuration choices
218198

219-
```console
220-
hostname -I
221-
```
222-
223-
Replace `<Private_IP>` in `local.conf`.
199+
* **Neutron disabled** — simplifies the deployment by removing advanced networking, which has compatibility issues on Arm Azure VMs
200+
* **etcd3 disabled** — DevStack's built-in etcd setup does not work reliably on Arm; this delegates etcd to the version you installed manually
201+
* **LIBVIRT_TYPE=qemu** — Azure Cobalt 100 VMs do not support nested KVM virtualization, so Nova uses QEMU software emulation instead
202+
* **Horizon enabled** — enables the web dashboard
203+
* **GIT_DEPTH=1** — performs shallow clones to reduce download size and avoid failures on slow or rate-limited connections
224204

225205
## Deploy OpenStack
226206

@@ -236,6 +216,27 @@ This script:
236216

237217
**Deployment time: ~15–25 minutes**
238218

219+
When the deployment completes successfully, the output is similar to:
220+
221+
```output
222+
This is your host IP address: 10.3.0.5
223+
This is your host IPv6 address: ::1
224+
Horizon is now available at http://10.3.0.5/dashboard
225+
Keystone is serving at http://10.3.0.5/identity/
226+
The default users are: admin and demo
227+
The password: admin
228+
229+
Services are running under systemd unit files.
230+
For more information see:
231+
https://docs.openstack.org/devstack/latest/systemd.html
232+
233+
DevStack Version: 2026.2
234+
Change: 03ece8f88040be9b0b14dd1cfe93076ad2419a80 Merge "[neutron] Configure ovn-bgp service-plugin" 2026-04-10 12:15:11 +0000
235+
OS Version: Ubuntu 24.04 noble
236+
237+
2026-04-23 16:30:00.225 | stack.sh completed in 464 seconds.
238+
```
239+
239240
## Access Horizon dashboard
240241

241242
Open in browser:
@@ -250,7 +251,7 @@ Example:
250251
http://4.186.31.18/dashboard
251252
```
252253

253-
![OpenStack Horizon login page alt-txt#center](images/openstack-horizon-dashboard.png "OpenStack Horizon Login Screen")
254+
![OpenStack Horizon login page showing username and password fields on the Azure Cobalt 100 VM#center](images/openstack-horizon-dashboard.png "OpenStack Horizon login screen")
254255

255256
## Login credentials
256257

@@ -274,29 +275,18 @@ Azure Portal → VM → Networking → Inbound Rules
274275

275276
## Verify via CLI
276277

278+
Activate the admin credentials, then list the registered services and compute services:
279+
277280
```console
278281
source openrc admin admin
279282

280283
openstack service list
281284
openstack compute service list
282285
```
283286

284-
## Expected output
285-
286-
Services should include:
287-
288-
```text
289-
Keystone → OK
290-
Nova → OK
291-
Glance → OK
292-
Placement → OK
293-
Cinder → OK
294-
```
295-
296-
Compute:
287+
The output is similar to:
297288

298-
```text
299-
import eventlet
289+
```output
300290
+----------------------------------+-------------+----------------+
301291
| ID | Name | Type |
302292
+----------------------------------+-------------+----------------+
@@ -308,28 +298,60 @@ Compute:
308298
| fd998beaffe64e2191795082470d03c0 | placement | placement |
309299
+----------------------------------+-------------+----------------+
310300
311-
import eventlet
312301
+--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+
313302
| ID | Binary | Host | Zone | Status | State | Updated At |
314303
+--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+
315-
| 46946541-a6c1-4b8c-92e3-5d037bb2d577 | nova-scheduler | devstack-Arm | internal | enabled | up | 2026-04-14T08:14:42.000000 |
316-
| e1aa2f20-3f39-4d12-9702-4b144a739f56 | nova-conductor | devstack-Arm | internal | enabled | up | 2026-04-14T08:14:46.000000 |
317-
| caeab24b-a938-420b-9ae0-e335ed8acfea | nova-conductor | devstack-Arm | internal | enabled | up | 2026-04-14T08:15:56.000000 |
318-
| b612363d-b7ad-4c9e-93b8-afd20fb9b863 | nova-compute | devstack-Arm | nova | enabled | up | 2026-04-14T08:15:05.000000 |
304+
| 46946541-a6c1-4b8c-92e3-5d037bb2d577 | nova-scheduler | devstack-arm | internal | enabled | up | 2026-04-14T08:14:42.000000 |
305+
| e1aa2f20-3f39-4d12-9702-4b144a739f56 | nova-conductor | devstack-arm | internal | enabled | up | 2026-04-14T08:14:46.000000 |
306+
| caeab24b-a938-420b-9ae0-e335ed8acfea | nova-conductor | devstack-arm | internal | enabled | up | 2026-04-14T08:15:56.000000 |
307+
| b612363d-b7ad-4c9e-93b8-afd20fb9b863 | nova-compute | devstack-arm | nova | enabled | up | 2026-04-14T08:15:05.000000 |
319308
+--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+
320-
321309
```
322310

311+
All services should show status `enabled` and state `up`. If you see `import eventlet` lines before the table, these are Python deprecation warnings from older OpenStack libraries and can be ignored.
312+
323313

324314
## What you've learned
325315

326-
You successfully deployed OpenStack using DevStack on an Arm-based Azure VM.
316+
You deployed OpenStack using DevStack on an Azure Cobalt 100 Arm64 VM, working through several Arm-specific issues along the way:
327317

328-
You resolved Arm-specific issues, including:
318+
* Replaced the Ubuntu etcd package with a stable Arm64 binary
319+
* Disabled Neutron to avoid networking compatibility issues on Arm
320+
* Configured Nova to use QEMU instead of KVM, because nested virtualization is not available on Azure VMs
329321

330-
* etcd compatibility
331-
* networking limitations
332-
* libvirt virtualization (QEMU)
322+
You verified the deployment using the CLI and accessed the Horizon dashboard via browser.
323+
324+
## Stop DevStack
325+
326+
Before moving on to the Kolla-Ansible deployment, stop all DevStack services to free up the ports and resources they hold:
327+
328+
```console
329+
cd /home/azureuser/devstack && ./unstack.sh 2>&1 | tail -10
330+
```
331+
332+
The Kolla-Ansible deployment runs on a separate VM, so this step is optional if you're done with DevStack. Run it if you want to reuse this VM later or clean up resources.
333+
334+
## Troubleshooting
335+
336+
### Horizon shows "Invalid service catalog: network"
337+
338+
If you see a `ServiceCatalogException: Invalid service catalog: network` error after logging in to Horizon, it means Horizon is trying to look up the Neutron network service in Keystone's service catalog. Because Neutron is disabled in this setup, the service doesn't exist.
339+
340+
To fix this, append a Horizon configuration override and restart Apache:
341+
342+
```bash
343+
sudo tee -a /opt/stack/horizon/openstack_dashboard/local/local_settings.py << 'EOF'
344+
345+
OPENSTACK_NEUTRON_NETWORK = {
346+
'enable_router': False,
347+
'enable_quotas': False,
348+
'enable_distributed_router': False,
349+
'enable_ha_router': False,
350+
'enable_fip_topology_check': False,
351+
}
352+
EOF
353+
sudo systemctl restart apache2
354+
```
333355

334-
You validated the deployment using CLI and accessed the Horizon UI.
356+
Reload the dashboard in your browser. The error should no longer appear.
335357

0 commit comments

Comments
 (0)