Install OpenStack yourself

Deploy your production Ubuntu OpenStack cloud across a rack of physical servers. You’ll use MAAS for physical server provisioning and conjure-up to guide you through the process.

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.

OpenStack logo

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.

Cluster deployment

  • 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.

Deploy OpenStack on cluster ›

Workstation deployment

  • 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.

Let me try OpenStack on my workstation ›

Cluster deployment

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.

  1. Minimum requirements

    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.

  2. Set 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.

  3. Install MAAS

    On your Ubuntu Server 18.04 LTS machine:

    Create your admin credentials:

    Login to the MAAS UI at http://<serverip>/MAAS/

    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.

  4. Configure 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.

  5. Verify 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.

  6. Register 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.

  7. Install and launch conjure-up

    Install conjure-up on the MAAS server:

    If successful you should see a screen as below:

    conjure-up's opening wizard in command line

  8. Select 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.

    conjure-up's wizard with OpenStack with NovaKVM selected

  9. Configure a new cloud

    Once you have selected ‘OpenStack with ‘NovaKVM’, you will be prompted to create a new cloud with MAAS.

    conjure-up's wizard asking where to deploy the new cloud

  10. 10Add MAAS endpoint and credentials

    The MAAS REST API endpoint will be of the form: http://<maas.ip>/MAAS/.

    The api key is found under the MAAS ‘admin’ acouunt page as shown below.

    conjure-up's wizard asking for your MAAS credentials

    User preferences for admin interface on MAAS

    Next, you will have the opportunity to configure the individual OpenStack services.

    Review and configure applications screen on conjure-up

  11. 11Configure and deploy the OpenStack services

    Choose Configure to change the default configuration of any component. When all components are configured to your liking, choose Deploy.

    conjure-up's status screens, showing a number of applications status

    OpenStack deploying

Workstation deployment

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.

Installation instructions

  1. Minimum requirements

    • 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
  2. Install conjure-up

    conjure-up provides 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]:
    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:

  3. Deploy OpenStack

    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’.

    screenshot of the conjure-up interface with the 'OpenStack with NovaLXD' option selected
  4. Follow the on-screen instructions

    The conjure-up wizard will now prompt you for:

    1. A selection from a list of recommended spells — Here we’re using “OpenStack with Nova-LXD”.
    2. A cloud for the deployment — Here we’re going to “Configure a New Cloud” to live on “localhost”.
    3. 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.
    4. An SSH public key path — Here we’ll use the default location of “~/.ssh/”.
    5. 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.

    screenshot of the conjure-up interface with the 'OpenStack with NovaLXD' option selected

    Make sure that "Create New Volume" is set to "no" when creating an instance.

  5. Launch 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:

    1. Projects -> Compute -> Instances -> Launch Instance
    2. Details:
      1. Instance name: test
    3. Source:
      1. Select Boot Source: Image
      2. Create New Volume: No
      3. Available: bionic-lxd ⬆
    4. Flavor: m1.tiny ⬆
    5. Networks: internal ⬆
    6. Launch instance

To learn more about conjure-up visit

Need more help?

Let our cloud experts help you take the next step.

Contact us