Install OpenStack yourself
If you run into issues, or if you want support, training or architecture design consulting, please do contact Canonical — we help the world’s largest OpenStack users keep their clouds running smoothly.
Developer or Cluster Edition?
These instructions cover two scenarios — developers who have a beefy workstation and want to setup a simulated OpenStack cluster on that workstation, and real cloud deployments, on a bare metal server cluster.
- Bare metal servers
- At least 4 servers required, each with 8 GB RAM, IPMI BMCs, dual NICs
- Network switch
- Router port, gateway to Internet
- Simple HA architecture supported
- Scalable from 12 to 200 nodes
This is a starting point for your production cloud. You’ll step through the deployment of OpenStack services across machines in the cluster. A simple HA configuration is supported. For more sophisticated architectures, ongoing operations insight, alternative approaches to HA, or specialized telco, compliance, regulatory or HPC requirements, contact Canonical for consulting and support.
- Single machine needed
- 16GB RAM or more
- Ubuntu 16.04 LTS or later
- Uses LXD machine containers
- Full HA cluster simulation possible
- Supports development iteration
- Enables testing of HA and upgrades
This is the recommended approach if you want to be an OpenStack developer. You will be able to work on OpenStack code and test it running in a simulated cluster, so distributed systems behaviour is immediately evident. It takes about an hour to install and it uses quite a bit of disk space and I/O because you are running all the processes for all the cluster nodes in containers on your machine.
Physical server cluster installation instructions
This is the simplest Ubuntu OpenStack deployment process across a small cluster of servers. It doesn’t try to do anything complicated with storage or networking, but it can expand to high availability configurations. We would recommend that this deployment process be followed for any small team looking to deploy their first OpenStack on a single rack. For more complex requirements or larger scale, please contact us for a workshop and architecture design session.
4 x Intel, POWER or ARM servers each with:
- 8GB RAM
- IPMI BMC
- 2 ethernet network interfaces
You will also need a switch and router. The cluster must be on an isolated /24 network with a route to the internet. There must not be a DHCP server on this /24 network.
High availability clouds require 12 nodes for service isolation, and you will need to setup an HA Postgres too.
2Set up your MAAS hardware
Connect the both NICs of the servers to the same network switch.
Identify the smallest server, if they are not identical. You will use this for MAAS, the ‘Metal as a Service’ provisioning system which will drive automated installation of the OS on the rest of the cluster.
Install Ubuntu Server 18.04 LTS on the MAAS server. Give it an IP address on the /24 and static default route to the gateway router, so it can see the Internet. You might want to bond the two NICs for resilience and/or bandwidth aggregation.
On your Ubuntu Server 16.04 LTS machine:
Create your admin credentials:
Login to the MAAS UI at
Complete the setup wizard for MAAS and import images for Ubuntu. Importing images may take a while, but you can ‘continue’ as soon as it’s started and work on other aspects of MAAS setup while the import happens.
Add or import your SSH public keys. MAAS will ensure you can login with your normal SSH keys to any of the machines you deploy.
4Configure the subnet and DHCP
Go to the “Subnets” tab and verify that “gateway” and “DNS” are correct for your subnet.
MAAS will provide DHCP and DNS for the /24 network on your isolated LAN switch.
For the DHCP dynamic range, we recommend at least two IPs per NIC in the cluster (and remember you have at least two NICs per server, so probably 50 IPs in the range if you have 10 servers). Don’t use the entire /24 for DHCP though since you will need IP addresses for various OpenStack services and guests.
Go back to the “subnets” tab and this time click on the “untagged” VLAN. Select ‘Take action’ and then ‘Provide dhcp’ with your dynamic range.
5Verify image syncing
Go to the “Images” tab and check if the Ubuntu images have all been downloaded and are in a “Synced” state. Depending on your bandwidth it may take a while for it to finish. You can only proceed with the next steps if the images are synced.
6Register your hardware with
For the rest of the machines in the cluster:
- These are your OpenStack hosts
- Set them to PXE boot by default
- Connect both NICs to the ethernet switch
We suggest you disable all other boot options in the BIOS for the OpenStack hosts in the cluster, including local disk. MAAS will provide PXE so these servers boot successfully.
Power the machines on. You should see them PXE boot ‘under MAAS control’ if they have monitors attached to them. They will all appear in the “Nodes” tab of MAAS after a while once the initial PXE boot ‘enlistment’ process is done.
Edit each machine, filling in the power type and other parameters, if they are not automatically set and correct already.
Select all the machines and then ‘Take action’ and ‘Commission’ them.
Wait until all machines have a “Ready” status
Verify the networking on each server. Look at the interfaces tab for every server. The first NIC should be the PXE one and be on the /24 subnet with the IP address set to ‘Auto assign’. The second NIC (the non-PXE one) must be connected to the subnet with the IP address set to ‘Unconfigured’.
You might want to test all the hardware by again selecting all the servers and ‘Take action’ then ‘Test hardware’ with whichever tests you care to run. Some tests are deep soak tests which will take a long time, others will comprehensively write all over the disks, so be thoughtful about which tests you run, although you are about to format these disks anyway.
7Install and launch conjure-up
8Select OpenStack hypervisor
conjure-up offers two options with OpenStack:
1. OpenStack with NovaLXD
This installs OpenStack configured to use the LXC ‘machine container’ hypervisor — containers that behave like ultra-fast VMs. Choose this option to run Linux workloads in LXD containers, for higher density and for evaluation of OpenStack.
2. OpenStack with NovaKVM
This installs OpenStack configured to use the KVM hypervisor ready to launch full virtual machines. We recommend this option for production clouds.
9Configure a new cloud
10Add MAAS endpoint and credentials
11Configure and deploy the OpenStack services
Single-node OpenStack installation instructions
These instructions use LXD, the Linux Container Daemon, to create multiple machine containers on your machine for the various OpenStack services, mimicking a real Openstack cluster.
- Single machine with 16GB RAM running Ubuntu 16.04 LTS or later and at least 40GB of free disk space
- Approximately one hour to complete the process
conjure-upprovides a text-based wizard to walk you through the process of setting up OpenStack. It can be used with full bare metal clusters, or on your workstation with LXD. We’ll be using LXD to create a set of container machines for the OpenStack services.
Follow these step-by-step instructions.
conjure-up requires a minimum version of LXD of 3.0.0. Additionally, LXD should be configured prior to running.
To install LXD run the following:
Snaps are the recommended installation method for LXD, If you need to enable snap packages:
For the best experience, it is recommended to migrate from the deb LXD packaging. This will move all container specific data to the snap version and clean up the unused debian packages. So, if you already had the the lxd package installed, run lxd.migrate. When prompted, uninstall the old LXD version so that only the snap version is available.
Now that lxd has been installed it needs to be initialised to set up, among other things, a network bridge and a storage pool. While mostly default options can be used, check the table below and ensure your answers match.
$ sudo lxd init Would you like to use LXD clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: Name of the new storage pool [default=default]: Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: Create a new ZFS pool? (yes/no) [default=yes]: Would you like to use an existing block device? (yes/no) [default=no]: Size in GB of the new loop device (1GB minimum) [default=40GB]: Would you like to connect to a MAAS server? (yes/no) [default=no]: Would you like to create a new local network bridge? (yes/no) [default=yes]: What should the new bridge be called? [default=lxdbr0]: What IPv4 address should be used? (CIDR subnet notation, "auto"; or "none") [default=auto]: 10.8.8.1/24 What IPv6 address should be used? [default=none]: What IPv6 address should be used? (CIDR subnet notation, "auto" or "none") [default=auto]: none Would you like LXD to be available over the network? (yes/no) [default=no]: Would you like stale cached images to be updated automatically? (yes/no) [default=yes] Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Then install conjure-up:
Now you are ready to start the OpenStack deployment process on your workstation.
You will see a menu of 'spells' which are descriptions of distributed software systems that conjure-up can deploy for you. Choose ‘OpenStack with NovaLXD’.
4Follow the on-screen instructions
The conjure-up wizard will now prompt you for:
- A selection from a list of recommended spells — Here we’re using “OpenStack with Nova-LXD”.
- A cloud for the deployment — Here we’re going to “Configure a New Cloud” to live on “localhost”.
- A network bridge and storage pool — Here we’ll use “lxdbr0” and “default” as created prior to installing conjure-up in Step 2 of this guide.
- An SSH public key path — Here we’ll use the default location of “
- Any other configurations for the applications being deployed — Here we’ll be using the default values for the applications, but you can configure based on your needs.
When ready, hit “Deploy”, and conjure-up will begin the deployment. This will take on the order of one hour to run to completion.
When the deployment is completed, go to the URL displayed in the summary screen and login with the provided credentials.
Make sure that "Create New Volume" is set to "no" when creating an instance.
5Launch an instance
Conjure-up will have created the basic building blocks for launching an instance . To launch an instance on the new cloud using the Openstack Dashboard, Horizon:
- Projects -> Compute -> Instances -> Launch Instance
- Instance name: test
- Select Boot Source: Image
- Create New Volume: No
- Available: bionic-lxd ⬆
- Flavor: m1.tiny ⬆
- Networks: internal ⬆
- Launch instance
To learn more about conjure-up visit conjure-up.io