Deploying OpenStack using Docker Container with Kolla and Hyper-V

Deploying OpenStack using Docker with Kolla and Hyperv
This tutorial will teach you the steps to deploy OpenStack services using pre-built Docker containers with Hyper-V and Kolla.


OpenStack is a free, open-source cloud computing platform. OpenStack is a cloud Operating System used to control the deep pools of computing, networking, and storage resources within a data center. OpenStack is primarily used and implemented as an Infrastructure as a Service (IaaS) for cloud computing. OpenStack is an open-source platform that offers many options to deploy and install it through different software distributions. OpenStack provides various deployment models for their customers. OpenStack also provides pre-installed ISO images of its platform for its customers.


OpenStack is a famous technology, but it can be cumbersome to manage and deploy without the proper tools. One easy solution is to deploy OpenStack services using pre-built Docker containers with Kolla and Hyper-V.


OpenStack offers a set of deployment tools, such as Kolla, to generate OpenStack Docker projects and images to deploy the Docker containers and OpenStack. The most mature deliverable offered by Kolla is kolla-ansible. As the name implies, kolla-ansible uses Ansible playbooks to automate the deployment. 


Set up Hyper-V 

On the Windows host, we need a Virtual Machine to host the Linux OpenStack controller. In this tutorial, we have an Ubuntu 16.04 VM with 8GB of RAM, 20GB of disk, and 4 virtual cores. All the controller services run here and are deployed with Kolla in Docker containers. Also, the same Hyper-V serves as a compute host for the OpenStack deployment. This can be achieved by installing the Cloudbase OpenStack components. Additional Hyper-V computes nodes can be added later as needed.


Set up Network


Deploying OpenStack using Docker with Kolla and Hyperv 1


We will need 2 virtual switches on the Hyper-V host that will be connected to the OpenStack controller Virtual Machines. ext-net is the external network bridged to the Windows physical external interface. We will be using this network also for the management of the VM. data-net is the data network, a simple private virtual switch for now (an external one is only needed when adding more compute nodes).


On the OpenStack Controller Virtual Machine, there are three interfaces. The first two (eth1 and eth0) are connected to the external network. The former is used for management, such as SSH, and OpenStack uses the latter for external traffic. It is managed by Open vSwitch. Finally, eth2 is the data/overlay network used for tenant traffic between the Neutron components in the controller and the instances.


eth2 and eth1 do not have an IP address and are set as “manual” in the /etc/network/interfaces file. The reason for this is that OpenvSwitch manages them. Also, on these interfaces, we need to enable MAC address spoofing from the “Advanced Features” tab on the adapter.


The scripts we will be using will automatically configure the Linux network interfaces, so we do not need to bother with that. The only interface we have already configured is eth0 so that the user can SSH into the system.


OpenStack Controller Deployment 

First, clone a Git repository that contains the scripts for the Kolla OpenStack deployment from At the end of the deployment, it will also create some common flavors, a Neutron virtual router, a Cirros VHDX Cinder image, and 2 networks, one private for tenants (VLAN based) and one external (flat). For the same, execute the following commands:


git clone
cd kolla-resources


Next, configure the management and external network details by setting some variables in the script:




Add the following lines in the script file, and exit and save the file. 


# neutron external network information
# used for HAProxy


In this tutorial, we are using the same subnet for external floating IPs and management. 


Next, run the deployment script by executing the following command. Here, we are using the Linux “time” command to understand how long the deployment will take:


time sudo ./


First, this script will pull the Docker images for each OpenStack service. The great thing with Kolla is that the user needs to create the images once, sparing significant time during deployment. This will reduce potential errors due to updated dependencies as the container images already contain all the required components. The images that we are going to use during the deployment are available in the DockerHub ( Users can also create and use their images.


After the deployment is completed, we have a fully functional OpenStack controller. It will take around 13 minutes to complete the deployment.


real 12m28.716s
user 3m7.296s
sys 1m4.428s


Next, run the following command to view all the docker containers running on the server. 


sudo docker ps


Deploying OpenStack using Docker with Kolla and Hyperv 2


Finally, we can source the Admin credentials by executing the following command:


source /etc/kolla/


Nova Hyper-V Compute Node Deployment 

First, edit the Ansible inventory to add my Hyper-V host (named “hyperv-host” in this tutorial) and the credentials needed to access it:


vim hyperv_inventory


Add the following lines in the Ansible inventory file, and exit and save the file. 




After that, configure an HTTPS WinRM listener on the Hyper-V host, which users can easily create with the PowerShell script mentioned in GitHub (


Now, execute the scripts to deploy and configure Nova compute on Hyper-V fully. The first parameter is the data bridge that we configured earlier, data-net. The third and fourth parameters are the Hyper-V credentials that FreeRDP needs to access the Hyper-V host when connecting to a Nova instance console.


sudo ./ data-net Administrator Passw0rd


Next, we need to set trunk mode for the OpenStack controller. There are two reasons for doing this: first, we have a tenant network with type VLAN, and second, the controller is a Virtual Machine in Hyper-V, so the hypervisor needs to allow Virtual local area networks (VLAN) tagged packets on the controller VM data interface. For that, start an elevated PowerShell and execute the following command:


Set-VMNetworkAdapterVlan -Trunk -AllowedVlanIdList 500-2000 -NativeVlanId 0 openstack-controller


Finally, the Virtual Machine controller with the name “openstack-controller” is created in Hyper-V.


Spawning a Virtual Machine 

Now, we will boot a Virtual Machine and test its connectivity to the Internet by executing the following command.


NETID=`neutron net-show private-net | awk '{if (NR == 5) {print $4}}'`
nova boot --flavor m1.nano \
--nic net-id=$NETID \
--image cirros-gen1-vhdx hyperv-vm1


Also, we can check the same from the Horizon: 


Deploying OpenStack using Docker with Kolla and Hyperv 3


The FreeRDP console access from Horizon works as well. We can also access the Virtual Machine directly from Hyper-V if required.


Deploying OpenStack using Docker with Kolla and Hyperv 4



This tutorial presents the steps to deploy OpenStack services using pre-built Docker containers with Hyper-V and Kolla. Hope this tutorial was helpful. Do reach out to us if you have any queries or suggestions.

Share this post

Services to Explore

Stay up to date!

Stay up to date with the Web Hosting, Cloud and Server Management Industry News and Tutorials!

We will send you only the relevant emails, and we respect your privacy. Please review our privacy policy for more info.

OpenStack Management

Focus on your business, and let us take care of your OpenStack!
From what you are reading, it seems you are interested in OpenStack and related technologies. If you have a moment to spare, please take a look at our OpenStack Management plan, which might interest you even more!
OpenStack Management

Value-Added Services

We have services that can help you run a successful business. With us, you don't have to worry about these areas because our experts will take care of it for you.

ServerHealers uses cookies.