* OpenStack variables for the AIO node (known in site.pp file as the 'controller). Ensure that the node_address value and the hostname values are consistent throughout the site.pp file:

+

* OpenStack variables for the AIO node (known in site.pp file as the 'controller'). Ensure that the '''$controller_node_address''' value and the '''$controller_hostname''' values are consistent throughout the site.pp file:

Overview

The OpenStack Grizzly Release All-In-One (AIO) model builds off of the Cisco OpenStack Installer (COI) Multinode instructions. The primary difference is in how the Puppet site.pp manifest is defined and, of course, the number of OpenStack nodes. This document is not meant to be a full replacement of the COI instructions, so you should begin with that documentation to get a better understanding of the components used in the COI.

This document will cover the deployment of several AIO scenarios to include:

Model 1: All-In-One (Control/Compute/Storage/Network) node using the local file system for Glance and the Provider Router with Private Networks model (FlatDHCP + FloatingIPs using Quantum Router)

Building the environment

This section describes the process for deploying OpenStack with the Cisco OpenStack Installer in an All-In-One node configuration. In this document a build server will be deployed and used as the launching point for the AIO node.

Assumptions

Although other configurations are supported, the following instructions target an environment with a build node and an AIO node that is operating the OpenStack controller, compute, storage (Glance/Ceph) and network roles. Additional compute nodes may optionally be added.

Also, these instructions primarily target deployment of OpenStack onto UCS servers (either blades or rack-mount form factors). Several steps in the automation leverage the UCS manager or CIMC to execute system tasks. Deployment on non-UCS gear may well work, particularly if the gear has functional IPMI, but may require additional configuration or additional manual steps to manage systems.

Cisco OpenStack Installer Grizzly requires that you have two physically or logically (VLAN) separated IP networks. You must have an external router or layer-3 switch that provides connectivity between these two networks. This is required in order to support Quantum and the Cloud-Init metadata server for Provider Router based deployments (similar to FlatDHCP + Floating IP support in the nova-network model).

One network is used to provide connectivity for OpenStack API endpoints, Open vSwitch (OVS) GRE endpoints (especially important if multiple compute nodes are aded to the AIO deployment), and OpenStack/UCS management. The second network is used by OVS as the physical bridge interface and by Quantum as the public network

Creating a build server

To deploy OpenStack with COI, first configure a build server. This server has relatively modest hardware requirements: 2 GB RAM, 20 GB storage, Internet connectivity, and a network interface on the same network as the eventual management interfaces of the OpenStack cluster machines are the minimal requirements. This machine can be physical or virtual though validation testing is done only using physical hardware.

Install Ubuntu 12.04 LTS onto this build server. A minimal install with openssh-server is sufficient. Configure the network interface on the OpenStack cluster management segment with a static IP. When partitioning the storage, choose a partitioning scheme which provides at least 15 GB free space under /var, as installation packages and ISO images used to deploy OpenStack will eventually be cached there.When the installation finishes, log in and become root:

sudo -H bash

NOTE: If you have proxies, or your control and compute nodes do not have internet access, please read the following:

If you require a proxy server to access the internet, be aware that proxy users have occasionally reported problems during the phases of the installation process that download and install software packages. A common symptom of proxy trouble is that apt will complain about hash mismatches or file corruptions when verifying downloaded files. A few known scenarios and workarounds include:

If the apt-get process reports a "HASH mismatch", you may be facing an issue with a caching engine. If it's possible to do so, bypassing the caching engine may resolve the problem.

If you do have a proxy, you will want, at a minimum, to export the two types of proxies needed in your root shell when running fetch commands, as noted in the relevant sections.

You will also want to change the $proxy setting in site.pp to reflect your local proxy.

Another possible change is if you don't have "public" Internet accessible IPs for all of your machines (build, AIO) and are building this in a controlled environment. If this is the case, ensure that $default_gateway is *not* set in site.pp and all of the files required for installing the AIO node will be fetched from the boot server.

IMPORTANT: If you have proxies, and you set your proxy information in either your .profile or in a file like /etc/environment, you will need to set both http_proxy and https_proxy. You will also need to set a no_proxy command at least for the build node. An example might look like:

You have two choices for setting up the build server. You can follow the manual steps below, or you can run a one line script that tries to automate this process. In either case, you should end up with the puppet modules installed, and a set of template site manifests in /etc/puppet/manifests.

Method 1: Run the Script

To run the install script, copy and paste the following on your command line (as root with your proxy set if necessary as above):

Get the COI example manifests. Under the grizzly-manifests GitHub repository you will find different branches, so select the one that matches your topology plans most closely. In the following examples the multi-node branch will be used, which is likely the most common topology:

Customizing the Build Server

At a high level, cobbler-node.pp manages the deployment of cobbler to support booting of additional servers into your environment. The core.pp manifest defines the core definitions for OpenStack service deployment. The site.pp.example manifest captures the user modifiable components and defines the various parameters that must be set to configure the OpenStack cluster, including the puppetmaster and cobbler setup on the build server. clean_node.sh is a shell script provided as a convenience to deployment users; it wraps several cobbler and puppet commands for ease of use when building and rebuilding the nodes of the OpenStack cluster. reset_nodes.sh is a wrapper around clean_node.sh to rebuild your entire cluster quickly with one command.

IMPORTANT! You must copy site.pp.example to site.pp and then edit it as appropriate for your installation. It is internally documented. See the sections below for information on how the site.pp was modified for each model discussed in this document.

When the puppet apply command runs, the puppet client on the build server will follow the instructions in the site.pp and cobbler-node.pp manifests and will configure several programs on the build server:

ntpd -- a time synchronization server used on all OpenStack cluster nodes to ensure time throughout the cluster is correct

tftpd-hpa -- a TFTP server used as part of the PXE boot process when OpenStack nodes boot up

dnsmasq -- a DNS and DHCP server used as part of the PXE boot process when OpenStack nodes boot up

cobbler -- an installation and boot management daemon which manages the installation and booting of OpenStack nodes

apt-cacher-ng -- a caching proxy for package installations, used to speed up package installation on the OpenStack nodes

nagios -- a infrastructure monitoring application, used to monitor the servers and processes of the OpenStack cluster

collectd --a statistics collection application, used to gather performance and other metrics from the components of the OpenStack cluster

graphite and carbon -- a real-time graphing system for parsing and displaying metrics and statistics about OpenStack

Model 1: AIO with Filesystem as Backend to Glance using Provider Router with Private Networks

Figure 1 from the diagrams section shows the topology of Model 1. In the example site.pp file for Model 1 there are a few things that need to be highlighted that set this example apart from the Ceph/RBD backend example. Not all lines of the site.pp are discussed in this document as the site.pp file is internally documented but there are a few settings that need to be called out so you understand what defaults have been changed in the file:

In all of the site.pp examples listed above, no proxy configuration is set. Pay close attention to the instructions in the document if you do use a proxy.

OpenStack variables for the AIO node (known in site.pp file as the 'controller'). Ensure that the $controller_node_address value and the $controller_hostname values are consistent throughout the site.pp file:

The COI default site.pp (site.pp.example) uses the filesystem as the backend for Glance. In Model 1, this is left at its default:

$glance_backend = 'file'

Once the site.pp manifest has been applied to your system, you need to stage puppet plugins so they can be accessed by the managed nodes:

puppet plugin download

After the build server is configured, the systems listed in site.pp should be defined in cobbler on the build server:

# cobbler system list
aio-server

And now, you should be able to use cobbler to build your AIO node:

/etc/puppet/manifests/clean_node.sh {node_name}

NOTE: Replace node_name with the name of your AIO.

clean_node.sh is a script which does several things:

Configures Cobbler to PXE boot the specified node with appropriate PXE options to do an automated install of Ubuntu

Uses Cobbler to power-cycle the node

Removes any existing client registrations for the node from Puppet, so Puppet will treat it as a new install

Removes any existing key entries for the node from the SSH known hosts database

You can watch the progress on the console of your AIO node as cobbler completes the automated install of Ubuntu. Once the installation finishes, the AIO node will reboot and then will run puppet after it boots up. Puppet will pull and apply the AIO node configuration defined in the puppet manifests on the build server.

This step will take several minutes, as puppet downloads, installs, and configures the various OpenStack components and support applications needed on the AIO node. /var/log/syslog on the AIO node will display the progress of the puppet configuration run.

NOTE: It may take more than one puppet run for the AIO node to be set up completely, especially if there are proxies in the path as some proxies can have issues with apt-get installs and updates. Observe the log files (/var/log/syslog on the controller node) to verify that the AIO configuration has converged completely to the configuration defined in puppet. If you use the Ceph/RBD backend configuration then you will need to re-run the puppet agent a minimum of three times in order for the drives and relevant Ceph configuration to be completed. You can re-run the puppet agent manually by using the following command:

puppet agent -t

Once the OpenStack AIO node has been built using cobbler, run puppet on the build node a second time:

puppet agent -t

This second puppet run will gather information about the individual OpenStack nodes collected by puppet when they were being built, and use that information to set up status monitoring of the OpenStack cluster on the build server.

Testing OpenStack

Once the nodes are built, and once puppet runs have completed on all nodes (watch /var/log/syslog on the cobbler node), you should be able to log into the OpenStack Horizon interface:

You will still need to log into the console of the control node to load in an image using user: localadmin, password: ubuntu. If you SU to root, you will need to source the openrc auth file which is in the root’s home directory (run "source openrc" in /root/), and you can launch a test file in /tmp/nova_test.sh.

Deploy Your First VM

The following deployment steps should be used after completing clean puppet runs on OpenStack Nodes and restarting quantum-server and quantum-plugin-openvswitch-agent services.

Manual Process

1. Create quantum public network.

quantum net-create public --router:external=True

2. We are using 192.168.221.0/24 as our external network. Note: The eth settings on the Controller Node associated to this network should not have an IP address assigned to it as it will function in bridged mode.

quantum subnet-create public 192.168.221.0/24

NOTE: If there are upstream routers/L3 switches that use HSRP/GLBP/VRRP that use low-order IP addresses such as .2 and .3 then the default subnet address assignments used by Quantum for this subnet (such as floating IP addresses and the Qrouter interface [default is .3]) will directly conflict with these real IP addresses on the upstream first hop routers. You can alter these default address assignments for the Quantum subnet by using the the "--allocation-pool" range when creating the Quantum subnet. The example that follows will use the default upstream router address of .1 (in this example the upstream HSRP address would be 192.168.221.1) and the first addresses for floating-IPs will begin at .10:

3. Create the internal (data) network used for Tenants. Create additional networks and associated subnets as needed. In the example below, we are assigning specific DNS servers that will be used by the instances.

9. Verify connectivity to Instance from the node running Quantum L3 Agent (Controller Node). Since we are using namespaces, we run the commands from the context of the qrouter using the "ip netns exec qrouter" syntax. Below, we list the qrouter to get its router-id, we connect to the qrouter and get a list of its addresses, we ping the instance from the qrouter and then we SSH into the instance from the qrouter:

Using Scripts to Setup a Test Quantum Network and Launch Instances

A "quick" way to get a similar environment to the one listed above running is to use the scripted quantum tests.

Clone the test repository:

git clone https://github.com/CiscoSystems/quantum-l3-test

Then follow the instructions in the README.md or follow these steps:

AssumptionsThere are a few assumptions being made in this script:

The script creates keys and places them in the /root/.ssh/ path therefore we are assuming you are running this script as root. If you are not running as 'root' then you need to change the path in the 'create_vm' file for the ssh-keygen line.

If you have existing files in the /root/.ssh/ path then the script will see them and prompt you to overwrite. If you do not select to overwrite the existing keys then you may encounter a "permissions denied" error when SSH'ing into the test instance. If this happens then ensure that the key being referenced during the nova keypair-add step in the 'create_vm' script is correct.

Instructions1. cd into the quantum-l3-test directory you just cloned:

cd quantum-l3-test

2) Run: ./create_vm this will run net_setup on its own

./create_vm

3) You will be prompted to enter your specific network values for the public/private networks as well as altering the default path where the Ubuntu Precise image is downloaded from (i.e. your own local mirror).

4) You should be able to log into the instance:

ssh ubuntu@{fixed or floating ip of instance}

To reset the Quantum settings created by the script and relaunch the test VM from scratch:

./reset
./create_vm

Deploying Swift

Cisco OpenStack Installer's Grizzly release also includes support for Swift. To deploy Swift, simply uncomment and adjust the swift-proxy and swift-storage node definitions in your site.pp file. In general, you will want at least 3 Swift storage nodes, each in a different zone. Once you've configured your site.pp file, you'll need to bring the Swift nodes online in a particular order.

First, bring up the storage nodes by running "clean_node.sh [storage node name]" for each storage node. Allow the operating system to be installed and for the puppet agent to complete it's first catalog run.

Next, bring up the Swift proxy node by running "clean_node.sh [proxy node name]". Allow the operating system to be installed and for the puppet agent to complete it's first catalog run.

Finally, allow puppet to make another catalog run on each storage node.

Deploying Ceph

As of the g.1 release or later, Cisco OpenStack Installer supports provisioning of Ceph, a distributed storage system. You can choose to enable Ceph RBD as a backend for Glance and/or use it for persistent Cinder volumes. For instructions on setting up Ceph with COI, please click here. Please review the release notes for the version of Cisco OpenStack Installer carefully for any caveats.

Congratulations

Congratulations! You have now completed a basic setup and should have a functional environment.

Next Steps

System and service health monitoring of your OpenStack cluster is set up as part of the puppet deployment process. Once you have created your first VM, you should start seeing OpenStack status information show up in the health monitoring. To view Nagios health monitoring, log into the web page at:

Need help?

Cisco does not currently provide TAC support for Cisco OpenStack Installer. However, you may contact our developers at openstack-support@cisco.com for best-effort technical help. For general OpenStack questions, you may also wish to peruse http://ask.openstack.org and ask your question there to solicit a wider audience.