diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_index.md new file mode 100644 index 0000000000..414708b7bb --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_index.md @@ -0,0 +1,70 @@ +--- +title: Deploy OpenStack on Azure Cobalt 100 Arm64 Virtual Machine + +draft: true +cascade: + draft: true + +minutes_to_complete: 60 + +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. + +learning_objectives: + - Deploy OpenStack on Azure Cobalt 100 Arm64 virtual machines + - Configure core OpenStack services (Keystone, Nova, Neutron, Glance, Cinder) + - Deploy containerized OpenStack using Kolla-Ansible + - Set up networking and storage for OpenStack + - Launch and manage virtual machine instances + - Access OpenStack using CLI and Horizon dashboard + +prerequisites: + - A [Microsoft Azure account](https://azure.microsoft.com/) with access to Cobalt 100 based instances (Dpsv6) + - Basic knowledge of Linux command-line operations + - Familiarity with SSH and remote server access + - Basic understanding of cloud computing and virtualization concepts + +author: Pareena Verma + +### Tags +skilllevels: Introductory +subjects: Containers and Virtualization +cloud_service_providers: + - Microsoft Azure + +armips: + - Neoverse + +tools_software_languages: + - OpenStack + - Kolla-Ansible + - DevStack + - Python + - OpenStack CLI + +operatingsystems: + - Linux + +further_reading: + - resource: + title: OpenStack Official Website + link: https://www.openstack.org/ + type: website + - resource: + title: OpenStack Documentation + link: https://docs.openstack.org/ + type: documentation + - resource: + title: Kolla-Ansible Documentation + link: https://docs.openstack.org/kolla-ansible/latest/ + type: documentation + - resource: + title: Azure Cobalt 100 processors + link: https://techcommunity.microsoft.com/blog/azurecompute/announcing-the-preview-of-new-azure-vms-based-on-the-azure-cobalt-100-processor/4146353 + type: documentation + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 +layout: "learningpathall" +learning_path_main_page: "yes" +--- diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_next-steps.md new file mode 100644 index 0000000000..c3db0de5a2 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation. +title: "Next Steps" # Always the same, html page title. +layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/background.md b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/background.md new file mode 100644 index 0000000000..1fe682a295 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/background.md @@ -0,0 +1,81 @@ +--- +title: "Overview of Azure Cobalt 100 and OpenStack" +weight: 2 + +layout: "learningpathall" +--- + +## Azure Cobalt 100 Arm-based processor + +Azure’s Cobalt 100 is Microsoft’s first-generation, in-house Arm-based processor. Built on Arm Neoverse N2, Cobalt 100 is a 64-bit CPU that delivers strong performance and energy efficiency for cloud-native, scale-out Linux workloads such as web and application servers, data analytics, open-source databases, and caching systems. Running at 3.4 GHz, Cobalt 100 allocates a dedicated physical core for each vCPU, which helps ensure consistent and predictable performance. + +To learn more, see the Microsoft blog [Announcing the preview of new Azure VMs based on the Azure Cobalt 100 processor](https://techcommunity.microsoft.com/blog/azurecompute/announcing-the-preview-of-new-azure-vms-based-on-the-azure-cobalt-100-processor/4146353). + +## OpenStack + +OpenStack is an open-source cloud computing platform used to build and manage Infrastructure-as-a-Service (IaaS) environments. + +It enables users to provision and manage compute, storage, and networking resources via APIs and dashboards, similar to those of public cloud providers. + +OpenStack is widely used for: + +* Private cloud deployments +* Hybrid cloud environments +* Edge and telecom infrastructure +* Development and testing platforms + +OpenStack runs efficiently on Arm-based architectures such as Azure Cobalt 100, enabling cost-effective and scalable cloud environments. + +## Key services in OpenStack + +OpenStack is composed of modular services that handle different aspects of cloud infrastructure: + +* **Keystone (Identity):** Authentication and authorization service +* **Nova (Compute):** Manages virtual machine lifecycle +* **Glance (Image):** Stores and manages VM images +* **Neutron (Networking):** Provides networking and connectivity +* **Cinder (Block Storage):** Persistent block storage for instances +* **Horizon (Dashboard):** Web-based user interface for managing resources + + +## OpenStack architecture components + +A typical OpenStack deployment consists of: + +* **Controller Node:** Runs core services such as API, scheduler, and database +* **Compute Node:** Hosts virtual machines using hypervisors +* **Networking (Neutron):** Handles virtual networking, bridges, and routing +* **Storage Services:** Provide block and object storage + +In this learning path, OpenStack is deployed using **Kolla-Ansible**, which runs services as containers for easier management. + + +## Use cases + +OpenStack is widely used across industries: + +* **Private Cloud Infrastructure:** Build internal cloud platforms +* **Dev/Test Environments:** Rapid provisioning of virtual machines +* **Edge Computing:** Lightweight deployments on Arm-based hardware +* **Telco Cloud:** Network function virtualization (NFV) +* **Research and HPC:** Scalable compute environments + +## Learn more about OpenStack + +To learn more about OpenStack, see: + +- [OpenStack Official Website](https://www.openstack.org/) +- [OpenStack Documentation](https://docs.openstack.org/) +- [OpenStack GitHub Repository](https://github.com/openstack) +- [Kolla-Ansible Documentation](https://docs.openstack.org/kolla-ansible/latest/) + +## What you will learn + +In this learning path, you will: + +* Deploy OpenStack on an Azure Cobalt 100 Arm64 virtual machine +* Configure core OpenStack services (Keystone, Nova, Neutron, Glance, Cinder) +* Deploy containerized OpenStack using Kolla-Ansible +* Set up networking and storage for OpenStack +* Launch and manage virtual machine instances +* Access and manage resources using CLI and Horizon dashboard diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/devtstack-deployment.md b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/devtstack-deployment.md new file mode 100644 index 0000000000..c8d803641f --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/devtstack-deployment.md @@ -0,0 +1,335 @@ +--- +title: Deploy OpenStack on Azure Arm using DevStack (Cobalt 100) +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Deploy OpenStack on Arm using DevStack (Azure Cobalt 100) + +{{% 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 %}} + +This guide walks you through deploying OpenStack using DevStack on an Arm-based Azure virtual machine (Azure Cobalt 100). + +DevStack is a lightweight OpenStack deployment tool designed for development and testing. +It installs core OpenStack services such as Nova, Keystone, Glance, and Horizon on a single node. + +After completing this guide, your environment will: + +* Run OpenStack services locally +* Provide access to the Horizon +* Support Arm64 (`aarch64`) architecture +* Be accessible via browser and CLI + +## Objective + +In this guide, you will: + +* Deploy OpenStack on Arm using DevStack +* Fix Arm-specific compatibility issues (etcd, libvirt) +* Access Horizon dashboard via public IP +* Validate services using OpenStack CLI + +## Environment + +| Component | Value | +| --------- | -------------------- | +| Platform | Azure Cobalt (Arm64) | +| OS | Ubuntu 24.04 | +| VM Size | D4ps_v6 | +| RAM | ≥ 8 GB | +| Disk | ≥ 80 GB | + + +## Clean previous setup + +Before starting, remove any previous DevStack or etcd installation. + +```console +sudo rm -rf ~/devstack +sudo rm -rf /opt/stack +sudo rm -rf /var/lib/etcd +sudo rm -f /etc/systemd/system/etcd.service +``` + +This ensures: + +* No leftover configuration conflicts +* Clean environment for deployment +* Avoids service startup failures + +## System preparation + +Update packages and install required tools. + +```console +sudo apt update && sudo apt upgrade -y + +sudo apt install -y \ +git curl vim net-tools python3-pip +``` + +These tools are required for: + +* Cloning DevStack repository (`git`) +* Downloading dependencies (`curl`) +* Editing configuration (`vim`) +* Network debugging (`net-tools`) + +## Configure hostname + +```console +sudo hostnamectl set-hostname devstack-Arm +exec bash +``` + +Setting a consistent hostname ensures: + +* Proper service registration +* Correct identification in OpenStack services + +## Install etcd (Arm fix) + +DevStack uses etcd internally, but on Ubuntu 24.04 Arm: + + * Built-in etcd service is unstable ❌ + +So we install a stable Arm-compatible version manually. + +```console +cd /tmp +wget https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-Arm64.tar.gz +tar -xvf etcd-v3.5.13-linux-Arm64.tar.gz +cd etcd-v3.5.13-linux-Arm64 +sudo cp etcd etcdctl /usr/local/bin/ +``` + +## Configure etcd service + +```console +sudo vi /etc/systemd/system/etcd.service +``` + +```ini +[Unit] +Description=etcd +After=network.target + +[Service] +User=azureuser +ExecStart=/usr/local/bin/etcd \ + --data-dir=/var/lib/etcd +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +This configuration ensures: + +* etcd starts automatically on boot +* Data is stored persistently +* Service is managed via systemd + +## Start etcd + +```console +sudo mkdir -p /var/lib/etcd +sudo chown -R $USER:$USER /var/lib/etcd + +sudo systemctl daemon-reload +sudo systemctl enable etcd +sudo systemctl start etcd +``` +Verify: + +```console +sudo systemctl status etcd +``` + +The output is similar to: + +```output +Active: active (running) +``` + +This confirms etcd is running correctly. + + +## Install DevStack + +```console +cd ~ +git clone https://opendev.org/openstack/devstack +cd devstack +``` + +This downloads the DevStack scripts required to install OpenStack. + +## Configure DevStack + +```console +vi local.conf +``` + +### Arm-optimized configuration + +```ini +[[local|localrc]] +ADMIN_PASSWORD=admin +DATABASE_PASSWORD=admin +RABBIT_PASSWORD=admin +SERVICE_PASSWORD=admin + +HOST_IP= +SERVICE_HOST= + +enable_service horizon + +disable_service neutron +disable_service q-agt +disable_service q-dhcp +disable_service q-l3 +disable_service q-meta +disable_service q-svc +disable_service ovn-controller +disable_service ovs-vswitchd +disable_service ovsdb-server + +disable_service etcd3 + +KEYSTONE_USE_MOD_WSGI=False +ENABLE_HTTPD_MOD_WSGI_SERVICES=False + +LIBVIRT_TYPE=qemu + +disable_service tempest +``` + +### Why these changes? + +* **Disable Neutron** → avoids Arm networking issues +* **Disable etcd3** → uses our stable external etcd +* **LIBVIRT_TYPE=qemu** → avoids KVM issues on Arm +* **Enable Horizon** → provides web UI + +## Get private IP + +```console +hostname -I +``` + +Replace `` in `local.conf`. + +## Deploy OpenStack + +```console +./stack.sh | tee stack.log +``` + +This script: + +* Installs all OpenStack services +* Configures database and messaging +* Starts services + +**Deployment time: ~15–25 minutes** + +## Access Horizon dashboard + +Open in browser: + +```text +http:///dashboard +``` + +Example: + +```text +http://4.186.31.18/dashboard +``` + +![OpenStack Horizon login page alt-txt#center](images/openstack-horizon-dashboard.png "OpenStack Horizon Login Screen") + +## Login credentials + +```text +Username: admin +Password: admin +``` + +## Azure network fix (critical) + +Ensure port 80 is open: + +```text +Azure Portal → VM → Networking → Inbound Rules +``` + +| Port | Protocol | Action | +| ---- | -------- | ------ | +| 80 | TCP | Allow | + + +## Verify via CLI + +```console +source openrc admin admin + +openstack service list +openstack compute service list +``` + +## Expected output + +Services should include: + +```text +Keystone → OK +Nova → OK +Glance → OK +Placement → OK +Cinder → OK +``` + +Compute: + +```text + import eventlet ++----------------------------------+-------------+----------------+ +| ID | Name | Type | ++----------------------------------+-------------+----------------+ +| 0a0554a3a6bf45e8937fa389ab559be3 | glance | image | +| 448f4e62b7344cac969c9ec18af4048d | nova | compute | +| 5cf7336818784a4383c0a543303ab4d7 | keystone | identity | +| 6ebdc6a1d7814f138f59ac5719bb4394 | cinder | block-storage | +| b86d2058e0604db6bcc9b12f3d2b16b4 | nova_legacy | compute_legacy | +| fd998beaffe64e2191795082470d03c0 | placement | placement | ++----------------------------------+-------------+----------------+ + + import eventlet ++--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+ +| ID | Binary | Host | Zone | Status | State | Updated At | ++--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+ +| 46946541-a6c1-4b8c-92e3-5d037bb2d577 | nova-scheduler | devstack-Arm | internal | enabled | up | 2026-04-14T08:14:42.000000 | +| e1aa2f20-3f39-4d12-9702-4b144a739f56 | nova-conductor | devstack-Arm | internal | enabled | up | 2026-04-14T08:14:46.000000 | +| caeab24b-a938-420b-9ae0-e335ed8acfea | nova-conductor | devstack-Arm | internal | enabled | up | 2026-04-14T08:15:56.000000 | +| b612363d-b7ad-4c9e-93b8-afd20fb9b863 | nova-compute | devstack-Arm | nova | enabled | up | 2026-04-14T08:15:05.000000 | ++--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+ + +``` + + +## What you've learned + +You successfully deployed OpenStack using DevStack on an Arm-based Azure VM. + +You resolved Arm-specific issues, including: + +* etcd compatibility +* networking limitations +* libvirt virtualization (QEMU) + +You validated the deployment using CLI and accessed the Horizon UI. + diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/final-vm.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/final-vm.png new file mode 100644 index 0000000000..5207abfb41 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/final-vm.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance.png new file mode 100644 index 0000000000..285cd764a5 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance1.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance1.png new file mode 100644 index 0000000000..b9d22c352d Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance1.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance4.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance4.png new file mode 100644 index 0000000000..2a0ff1e3b0 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/instance4.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-data-disk.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-data-disk.png new file mode 100644 index 0000000000..a1a2da0941 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-data-disk.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic1.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic1.png new file mode 100644 index 0000000000..1c61e0341f Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic1.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic2.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic2.png new file mode 100644 index 0000000000..f425c5a744 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic2.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic3.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic3.png new file mode 100644 index 0000000000..0b4c9f08a4 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/kolla-ansible-nic3.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/openstack-horizon-dashboard.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/openstack-horizon-dashboard.png new file mode 100644 index 0000000000..19ec5ac3d8 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/openstack-horizon-dashboard.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/openstack-ui.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/openstack-ui.png new file mode 100644 index 0000000000..14e777b495 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/openstack-ui.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/ubuntu-pro.png b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/ubuntu-pro.png new file mode 100644 index 0000000000..d54bd75ca6 Binary files /dev/null and b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/images/ubuntu-pro.png differ diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/instance.md b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/instance.md new file mode 100644 index 0000000000..103c6b50bc --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/instance.md @@ -0,0 +1,96 @@ +--- +title: Create an Azure Cobalt 100 Arm64 virtual machine +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Prerequisites and setup + +There are several common ways to create an Arm-based Cobalt 100 virtual machine, and you can choose the method that best fits your workflow or requirements: + +- The Azure Portal +- The Azure CLI +- An infrastructure as code (IaC) tool + +In this section, you will launch the Azure Portal to create a virtual machine with the Arm-based Azure Cobalt 100 processor. + +This Learning Path focuses on general-purpose virtual machines in the Dpsv6 series. For more information, see the [Microsoft Azure guide for the Dpsv6 size series](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/general-purpose/dpsv6-series). + +While the steps to create this instance are included here for convenience, you can also refer to the [Deploy a Cobalt 100 virtual machine on Azure Learning Path](/learning-paths/servers-and-cloud-computing/cobalt/). + +## Create an Arm-based Azure virtual machine + +Creating a virtual machine based on Azure Cobalt 100 is no different to creating any other virtual machine in Azure. To create an Azure virtual machine: + +- Launch the Azure portal and navigate to **Virtual Machines**. +- Select **Create**, and select **Virtual Machine** from the drop-down list. +- Inside the **Basic** tab, fill in the instance details such as **Virtual machine name** and **Region**. +- Select the image for your virtual machine (for example, Ubuntu Pro 24.04 LTS) and select **Arm64** as the VM architecture. +- In the **Size** field, select **See all sizes** and select the D-Series v6 family of virtual machines. +- Select **D4ps_v6** from the list as shown in the diagram below: + +![Azure Portal VM size selection showing the D-Series v6 (Dpsv6) family highlighted with D4ps_v6 option selected for Arm64 architecture alt-txt#center](images/instance.png "Select D4ps_v6 from the D-Series v6 family") + +- For **Authentication type**, select **SSH public key**. + +{{% notice Note %}} +Azure generates an SSH key pair for you and lets you save it for future use. This method is fast, secure, and easy for connecting to your virtual machine. +{{% /notice %}} + +- Fill in the **Administrator username** for your VM. +- Select **Generate new key pair**, and select **RSA SSH Format** as the SSH Key Type. + +{{% notice Note %}} +RSA offers better security with keys longer than 3072 bits. +{{% /notice %}} + +- Give your SSH key a key pair name. +- In the **Inbound port rules**, select **HTTP (80)** and **SSH (22)** as the inbound ports, as shown below: + +![Azure Portal inbound port rules configuration showing HTTP (80) and SSH (22) selected as allowed incoming traffic alt-txt#center](images/instance1.png "Configure inbound port rules for HTTP and SSH access") + +- Now select the **Review + Create** tab and review the configuration for your virtual machine. It should look like the following: + +![Azure Portal Review + Create tab showing VM configuration summary with Ubuntu Pro 24.04 LTS image, D4ps_v6 size, and networking settings configured alt-txt#center](images/ubuntu-pro.png "Review VM configuration before creation") + +- When you are happy with your selection, select the **Create** button and then **Download Private key and Create Resource** button. + +![Azure Portal showing the Create button and Download Private key and Create Resource button to finalize VM creation alt-txt#center](images/instance4.png "Download SSH key and create the virtual machine") + +Your virtual machine should be ready and running in a few minutes. You can SSH into the virtual machine using the private key, along with the public IP details. + +![Azure Portal showing successful VM deployment with green checkmark, VM name, resource group, and public IP address displayed in the confirmation notification alt-txt#center](images/final-vm.png "Successful VM deployment confirmation") + +{{% notice Note %}}To learn more about Arm-based virtual machine in Azure, see “Getting Started with Microsoft Azure” in [Get started with Arm-based cloud instances](/learning-paths/servers-and-cloud-computing/csp/azure).{{% /notice %}} + +## What you've accomplished and what's next + +You've successfully: + +* Created an Azure Cobalt 100 Arm-based virtual machine using the D-Series v6 (Dpsv6) family +* Selected Ubuntu Pro 24.04 LTS as the operating system +* Configured SSH authentication for secure access + +## Additional setup for this learning path + +This learning path requires **two virtual machines** with the same base configuration: + +* VM 1 → Used for DevStack deployment (single NIC setup) +* VM 2 → Used for Kolla-Ansible deployment (advanced setup) + +{{% notice Note %}}Two separate VMs are recommended because running DevStack and Kolla-Ansible on the same machine can lead to service and port conflicts during deployment.{{% /notice %}} + +Both virtual machines should be created using the steps described above. + + +## What's next + +In the next section, you will prepare the second virtual machine for Kolla-Ansible by: + +* Adding an additional network interface (NIC) +* Attaching a data disk +* Configuring the system for OpenStack deployment + +This setup enables proper networking and storage configuration required for containerized OpenStack using Kolla-Ansible. diff --git a/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/kolla-ansible-deployment.md b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/kolla-ansible-deployment.md new file mode 100644 index 0000000000..e247245817 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/openstack-on-azure/kolla-ansible-deployment.md @@ -0,0 +1,297 @@ +--- +title: Deploy OpenStack using Kolla-Ansible on Azure Ubuntu Arm64 VM +weight: 6 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Deploy OpenStack on Azure Cobalt 100 VM using Kolla-Ansible + +{{% notice Note %}}Use the virtual machine prepared for Kolla-Ansible deployment (with dual NICs and a data disk). This setup is required for proper networking and storage configuration.{{% /notice %}} + +This guide walks you through deploying OpenStack using Kolla-Ansible on an Azure Ubuntu 24.04 Arm64 virtual machine. + +Kolla-Ansible deploys OpenStack services as Docker containers, making the deployment modular, reproducible, and easier to manage. + +After completing this guide, your environment will: + +* Run core OpenStack services (Nova, Neutron, Keystone, Glance) +* Support Arm64 (`aarch64`) architecture +* Provide CLI and Horizon access +* Allow launching virtual machines + + +## Prerequisites + +* Ubuntu 24.04 Arm64 VM (Azure) +* Minimum 4 vCPU, 8 GB RAM (16 GB recommended) +* Disk: 100 GB+ +* Two network interfaces: + + * `eth0` → management (with IP) + * `eth1` → external (no IP) + +## Configure external interface + +```console +sudo ip addr flush dev eth1 +sudo ip link set eth1 up +``` + +This ensures that OpenStack can use `eth1` as the external/provider network. + + +## Install system dependencies + +```console +sudo apt update + +sudo apt install -y \ +python3-venv python3-dev python3-pip \ +gcc libffi-dev libssl-dev \ +libdbus-1-dev libglib2.0-dev pkg-config \ +meson ninja-build curl +``` + +These packages are required for Python builds and OpenStack dependencies. + +## install Docker + +Docker is used to run all OpenStack services as containers. + +```console +sudo apt install -y docker.io + +sudo systemctl enable docker +sudo systemctl start docker +``` + +**Add user to Docker group:** + +```console +sudo usermod -aG docker $USER +``` + +**Apply group permissions (IMPORTANT):** + +```console +newgrp docker +``` + +**Verify Docker installation:** + +```console +docker run hello-world +``` + +This step is critical. Without applying group permissions, Docker commands will fail with a permission error. + +## Create Python virtual environment + +```console +python3 -m venv ~/kolla-venv +source ~/kolla-venv/bin/activate +``` + +A virtual environment isolates dependencies required for Kolla-Ansible. + +## Install Kolla-Ansible and dependencies + +```console +pip install -U pip + +pip install \ +'ansible-core>=2.15,<2.17' \ +kolla-ansible \ +docker \ +dbus-python +ansible-galaxy collection install openstack.kolla +kolla-ansible install-deps +``` + +These tools are required to deploy and manage OpenStack services. + +## Configure Kolla + +```console +sudo mkdir -p /etc/kolla +sudo chown $USER:$USER /etc/kolla + +cp -r ~/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla +cp ~/kolla-venv/share/kolla-ansible/ansible/inventory/all-in-one . +``` + + +## Edit globals.yml + +```console +vi /etc/kolla/globals.yml +``` + +```yaml +kolla_base_distro: "debian" +openstack_tag_suffix: "-aarch64" + +network_interface: "eth0" +neutron_external_interface: "eth1" + +kolla_internal_vip_address: "127.0.0.1" + +enable_keepalived: "no" +``` + +### Why this configuration? + +- **Debian base** → Arm images are available +- **aarch64 suffix** → ensures correct image selection +- **VIP = VM IP** → avoids Azure networking issues +- **HA disabled**→ required for single-node deployments + + +## Configure Nova (Arm fix) + + +```console +sudo mkdir -p /etc/kolla/config + +cat < +``` + +Get password: + +```console +cat /etc/kolla/passwords.yml | grep keystone_admin_password +``` + +Login: + +* Username: admin +* Domain: Default + +The following image shows a successfully launched instance in the OpenStack Horizon UI. + +![OpenStack Horizon dashboard showing running instance test-vm alt-txt#center](images/openstack-ui.png "OpenStack Horizon Instances view with ACTIVE VM") + + +## What you've learned + +You successfully validated your OpenStack deployment and confirmed that all services are operational. + +You also: + +- Created vSwitch networking specific to Arm + Azure +- Uploaded an Arm-compatible image +- Created network and compute resources +- Launched and verified a virtual machine + +Your OpenStack environment is now fully functional and ready for use.