Devstack with Octavia Load Balancing
====================================

Starting with the OpenStack Pike release, Octavia is now a standalone service
providing load balancing services for OpenStack.

This guide will show you how to create a devstack with `Octavia API`_ enabled.

.. _Octavia API: https://developer.openstack.org/api-ref/load-balancer/v2/index.html

Phase 1: Create DevStack + 2 nova instances
--------------------------------------------

First, set up a vm of your choice with at least 8 GB RAM and 16 GB disk space,
make sure it is updated. Install git and any other developer tools you find
useful.

Install devstack

::

    git clone https://git.openstack.org/openstack-dev/devstack
    cd devstack/tools
    sudo ./create-stack-user.sh
    cd ../..
    sudo mv devstack /opt/stack
    sudo chown -R stack.stack /opt/stack/devstack

This will clone the current devstack code locally, then setup the "stack"
account that devstack services will run under. Finally, it will move devstack
into its default location in /opt/stack/devstack.

Edit your ``/opt/stack/devstack/local.conf`` to look like

::

    [[local|localrc]]
    enable_plugin octavia https://git.openstack.org/openstack/octavia
    # If you are enabling horizon, include the octavia dashboard
    # enable_plugin octavia-dashboard https://git.openstack.org/openstack/octavia-dashboard.git
    # If you are enabling barbican for TLS offload in Octavia, include it here.
    # enable_plugin barbican https://github.com/openstack/barbican.git

    # If you have python3 available:
    # USE_PYTHON3=True

    # ===== BEGIN localrc =====
    DATABASE_PASSWORD=password
    ADMIN_PASSWORD=password
    SERVICE_PASSWORD=password
    SERVICE_TOKEN=password
    RABBIT_PASSWORD=password
    # Enable Logging
    LOGFILE=$DEST/logs/stack.sh.log
    VERBOSE=True
    LOG_COLOR=True
    # Pre-requisite
    ENABLED_SERVICES=rabbit,mysql,key
    # Horizon - enable for the OpenStack web GUI
    # ENABLED_SERVICES+=,horizon
    # Nova
    ENABLED_SERVICES+=,n-api,n-crt,n-obj,n-cpu,n-cond,n-sch,n-api-meta,n-sproxy
    ENABLED_SERVICES+=,placement-api,placement-client
    # Glance
    ENABLED_SERVICES+=,g-api,g-reg
    # Neutron
    ENABLED_SERVICES+=,q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron
    ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api
    # Cinder
    ENABLED_SERVICES+=,c-api,c-vol,c-sch
    # Tempest
    ENABLED_SERVICES+=,tempest
    # Barbican - Optionally used for TLS offload in Octavia
    # ENABLED_SERVICES+=,barbican
    # ===== END localrc =====

Run stack.sh and do some sanity checks

::

    sudo su - stack
    cd /opt/stack/devstack
    ./stack.sh
    . ./openrc

    openstack network list  # should show public and private networks

Create two nova instances that we can use as test http servers:

::

    #create nova instances on private network
    openstack server create --image $(openstack image list | awk '/ cirros-.*-x86_64-.* / {print $2}') --flavor 1 --nic net-id=$(openstack network list | awk '/ private / {print $2}') node1
    openstack server creeate --image $(openstack image list | awk '/ cirros-.*-x86_64-.* / {print $2}') --flavor 1 --nic net-id=$(openstack network list | awk '/ private / {print $2}') node2
    openstack server list # should show the nova instances just created

    #add secgroup rules to allow ssh etc..
    openstack security group rule create default --protocol icmp
    openstack security group rule create default --protocol tcp --dst-port 22:22
    openstack security group rule create default --protocol tcp --dst-port 80:80

Set up a simple web server on each of these instances. ssh into each instance (username 'cirros', password 'cubswin:)' or 'gocubsgo') and run

::

    MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
    while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&

Phase 2: Create your load balancer
----------------------------------

Make sure you have the 'openstack loadbalancer' commands:

::

    pip install python-octaviaclient

Create your load balancer:

::

    openstack loadbalancer create --name lb1 --vip-subnet-id private-subnet
    openstack loadbalancer show lb1  # Wait for the provisioning_status to be ACTIVE.
    openstack loadbalancer listener create --protocol HTTP --protocol-port 80 --name listener1 lb1
    openstack loadbalancer show lb1  # Wait for the provisioning_status to be ACTIVE.
    openstack loadbalancer pool create --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --name pool1
    openstack loadbalancer show lb1  # Wait for the provisioning_status to be ACTIVE.
    openstack loadbalancer healthmonitor create --delay 5 --timeout 2 --max-retries 1 --type HTTP pool1
    openstack loadbalancer show lb1  # Wait for the provisioning_status to be ACTIVE.
    openstack loadbalancer member create --subnet-id private-subnet --address <web server 1 address> --protocol-port 80 pool1
    openstack loadbalancer show lb1  # Wait for the provisioning_status to be ACTIVE.
    openstack loadbalancer member create --subnet-id private-subnet --address <web server 2 address> --protocol-port 80 pool1

Please note: The <web server # address> fields are the IP addresses of the nova
servers created in Phase 1.
Also note, using the API directly you can do all of the above commands in one
API call.

Phase 3: Test your load balancer
--------------------------------

::

    openstack loadbalancer show lb1 # Note the vip_address
    curl http://<vip_address>
    curl http://<vip_address>

This should show the "Welcome to <IP>" message from each member server.
