How I installed OpenStack Juno on Ubuntu 14.04
6forester
Last year, I and David D. were dreaming about moving our product to cloud. We were constantly discussing pros and cons of having private data center based on OpenStack vs public cloud solution implemented on Amazon WS. There are so many nuances to be taken into account, for example, initial setup cost and cost over the time (security patching, upgrades, reliability, etc.). It is really hard to say what is the best until you try it by your own hands. Finally, I found enough free time to elaborate OpenStack solution.

First attempt was made few months ago. I installed DevStack and immediately run into multiple problems. Basically, it did not work. It was also annoying that it used to take about 5+ minutes to start and never persisted its own state, so I did want to spend time playing with it. I wanted to see the real OpenStack in action.

I began reading official documentation and quickly realized that it is not written for beginners. Then I found the brilliant article “Installing OpenStack Icehouse on Ubuntu in 10 minutes”. This was the first glimpse on what is really OpenStack. I managed to install it, add new images and even start a new instance via console. It was so easy except network did not work. I played a day or two and then switched to something else until the last week.

The last week was a good time try it again, so I followed the same steps and it did not work. I experienced at least three known issues and realized that the installation script was designed for Icehouse release. It was a nice chance to understand the whole process step by step process and try to install Juno from the scratch manually.

After reading multiple blog and articles, watching youtube videos, the BEST blog “OpenStack Juno on Ubuntu 14.04 LTS and 14.10 - Single Machine Setup” came to my sight.

Basically, OpenStack consists of the few main components: Keystone - authentication, Glance - image store, Nova - compute, or I would call it a heart, Cinder - volume manager, Horizon - dashboard, and the most complicated component Neutron - networking service. 95% of all difficulties will be related to it because it is not very trivial and very flexible in network modelling. You can do simple networking just using Nova, but it is limited and outdated way.

The main problem when installing OpenStack on a single machine is that Neutron requires three networks. Internal network where interprocess communication happens, Data network where instances talk to each other and External network - to expose services to consumers. Internal and Data networks have to be isolated and secured, so I will explain few basic things which I done to run Juno on my computer with a single network card. (You can skip these steps and go straight to conclusion).

Disable IPv6

I think Ubuntu is not ready for IPv6. I tried to run it with two internet providers - Time Warner and ATT. As well on two different computers with different Ubuntu released and network card drivers. Network is not reliable when IPv6 is enabled. Hope it is just my problem and you will not experience it, but I have to mention it.

To disable add the following line to /etc/sysctl.conf and run “sudo sysctl -p” to apply the changes.

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1

Install Open vSwitch

Required to create network bridges.
   agt-get openvswitch-switch

Design the network

This picture show what we are going to do.

openstack-single-machine-single-nic.png

eth0 is your primary network interface, br-ex and br-eth1 are virtual bridges for Internal and Data networks.

   ovs-vsctl add-br br-eth0
NEXT STEP WILL DROP YOUR SSH CONNECTION, DO NOT DO IT IF YOU DO NOT HAVE DIRECT KEYBOARD CONNECTION TO THE COMPUTER
    ovs-vsctl add-port br-eth0 eth0
    ifconfig br-eth0 up
    ip link set br-eth0 promisc on
    ip link add proxy-br-eth1 type veth peer name eth1-br-proxy
    ip link add proxy-br-ex type veth peer name ex-br-proxy
    ovs-vsctl add-br br-eth1
    ovs-vsctl add-br br-ex
    ovs-vsctl add-port br-eth1 eth1-br-proxy
    ovs-vsctl add-port br-ex ex-br-proxy
    ovs-vsctl add-port br-eth0 proxy-br-eth1
    ovs-vsctl add-port br-eth0 proxy-br-ex
    ip link set eth1-br-proxy up promisc on
    ip link set ex-br-proxy up promisc on
    ip link set proxy-br-eth1 up promisc on
    ip link set proxy-br-ex up promisc on

As a result you should get something like this: sudo ovs-vsctl show

Bridge "br-eth1"
Port "br-eth1"
Interface "br-eth1"
type: internal
Port "eth1-br-proxy"
Interface "eth1-br-proxy"
Port "phy-br-eth1"
Interface "phy-br-eth1"
type: patch
options: {peer="int-br-eth1"}
Bridge "br-eth0"
Port "br-eth0"
Interface "br-eth0"
type: internal
Port proxy-br-ex
Interface proxy-br-ex
Port "proxy-br-eth1"
Interface "proxy-br-eth1"
Port "eth0"
Interface "eth0"
Bridge br-int
fail_mode: secure
Port "int-br-eth1"
Interface "int-br-eth1"
type: patch
options: {peer="phy-br-eth1"}
Port int-br-ex
Interface int-br-ex
type: patch
options: {peer=phy-br-ex}
Port br-int
Interface br-int
type: internal
Bridge br-ex
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port br-ex
Interface br-ex
type: internal
Port ex-br-proxy
Interface ex-br-proxy
ovs_version: "2.0.2"

Update network interfaces
Edit /etc/network/interfaces file to set the static IP. It simply does not work with floating IP. Here is example of my config file:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual
ovs_bridge br-eth0
ovs_type OVSPort
adress 0.0.0.0

auto br-eth0
iface br-eth0 inet static
address 192.168.122.198
netmask 255.255.255.0
network 192.168.122.0
broadcast 192.168.122.255
gateway 192.168.122.1
dns-nameservers 8.8.8.8
ovs_tpe OVSBridge
ovs_port br-eth0
bridge_port eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Reboot
Now you are ready to follow regular OpenStack installation steps.

Update Neutron
Skip this step for now until you install Neutron. Then update /etc/neutron/plugins/ml2/ml2_conf.ini file and set

    bridge_mappings=Physnet1:br-eth1,External_network:br-ex
    network_vlan_ranges=Physnet1:100:200
    flat_networks=External_network


Links:
http://www.stackgeek.com/guides/gettingstarted.html
https://fosskb.wordpress.com/2014/10/18/openstack-juno-on-ubuntu-14-10/
I recommend to read the book “OpenStack beginner’s guide for Ubuntu” http://blog.pinlabs.in/wp-content/uploads/2014/10/OpenStackBookV4-2.pdf

Conclusion:
In general, I like OpenStack. It is logical, reliable product. It survived my many attempts to kill it even by sudden computer shutdown (tried at least 10 times). It always restores state successfully and quickly - less than 30 seconds. I have to mention also that Neutron is very advance and powerful tool for network modelling as soon as you are become familiar with it.

What I do not like is error messages. They are not always clear. I spent numerous hours to figure out the root cause of instance startup failure. Horizon was showing error but the logs even in debug mode were completely fine. Not a single footprint of error.

Also it requires advance networking knowledge. It is not the product “click and go”. You have to understand what you are doing.

IMHO I afraid that if you set up OpenStack and that decide to upgrade it year later, it will be painful. Hope is not a true because I am saying it just on my limited personal experience.

PS: Not sure whether it is bug or feature but if you add virtual partition and then map Cinder volume on it, then if the partition is removed, you cannot delete the volume from console. Juno throws an error.

?

Log in