Openstack

Discovering more about OpenStack and showing the various ways to install and use it on Packet infrastructure.


OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.

OpenStack is made up of many different moving parts. Because of its open nature, anyone can add additional components to OpenStack to help it to meet their needs. 


But the “core” of OpenStack is made up of the following projects:

  • NOVA - Compute Service: To implement services and associated libraries to provide massively scalable, on-demand, self-service access to computing resources, including bare metal, virtual machines, and containers.
  • NEUTRON - Networking: OpenStack Neutron is an SDN networking project focused on delivering networking-as-a-service (NaaS) in virtual compute environments.
  • GLANCE - Image Service: Glance image services include discovering, registering, and retrieving virtual machine images. Glance has a RESTful API that allows querying of VM image metadata as well as retrieval of the actual image. VM images made available through Glance can be stored in a variety of locations from simple filesystems to object-storage systems like the OpenStack Swift project.
  • CINDER - Block Storage: Cinder is a Block Storage service for OpenStack. It virtualizes the management of block storage devices and provides end users with a self service API to request and consume those resources without requiring any knowledge of where their storage is actually deployed or on what type of device. This is done through the use of either a reference implementation (LVM) or plugin drivers for other storage.
  • SWIFT - Object Store: Swift is a highly available, distributed, eventually consistent object/blob store. Organizations can use Swift to store lots of data efficiently, safely, and cheaply. It's built for scale and optimized for durability, availability, and concurrency across the entire data set. Swift is ideal for storing unstructured data that can grow without bound.
  • KEYSTONE - Identity service: Keystone is an OpenStack service that provides API client authentication, service discovery, and distributed multi-tenant authorization by implementing OpenStack’s Identity API. It supports LDAP, OAuth, OpenID Connect, SAML and SQL.


Installing OpenStack

OpenStack is very complex to install. As we said above, it consists of a lot of different services. There are a few different ways that you can test or install OpenStack. 

Single Node Installation runs all OpenStack services in one node including Control, Network, Compute, Storage services, while Multi-Node installation runs different OpenStack services on different nodes.

Generally speaking, a single node setup of OpenStack (ex: DevStack or even PackStack) is usually used for testing purposes. It is not designed for production and thus most would strongly discourage such implementation.

A Multi-Node setup, on the other hand, is what most (if not all) production environments run on. Given the various components of OpenStack, having these various components on multiple nodes allows more performance and better redundancy. Multi-Node is also highly scalable in the sense that if you require more compute power all you have to do is add more compute nodes.


Single Node OpenStack

For a Single Node environment, we have two options, DevStack or PackStack.

  • DevStack: With some technical skills, DevStack is a great option to install and test OpenStack on your laptop or on a Packet Server. DevStack is ideal for potential users who want to see what the Dashboard looks like from an admin or user perspective, and OpenStack contributors wanting to test against a complete local environment.

    By default, DevStack is run with all the services as systemd unit files. Systemd is now the default init system for nearly every Linux distro, and systemd encodes and solves many of the problems related to poorly running processes.

    All DevStack user units are created as a part of the DevStack slice given the namedevstack@$servicename.service This makes it easy to understand which services are part of the devstack run, and lets us disable/stop them in a single command. The reason why DevStack cannot be used for production purposes, is because after a reboot, is almost impossible to bring it up to the last known good state.

    DevStack attempts to support Ubuntu 16.04/17.04, Fedora 24/25, CentOS/RHEL 7, as well as Debian and OpenSUSE. If you do not have a preference, Ubuntu 16.04 is the most tested, and will probably go the smoothest.

️ CAUTION: DevStack will make substantial changes to your system during installation. Only run DevStack on servers that are dedicated testing purposes. 

You can take a look at this deployment guide to learn how to quickly Deploy a test environment with DevStack.


Packstack

Packstack is a utility that uses Puppet modules to deploy various parts of OpenStack on multiple pre-installed servers over SSH automatically. Currently, it is supported only on CentOS and Red Hat Enterprise Linux (RHEL).

The Red Hat team has put together a great guide on installing and running a proof of concept cloud on one node, using the PackStack installation utility. 

Our good friend Jim Leitch, has put together a great demo on deploying OpenStack on Packet by using the RDO quickstart mentioned above.

We are also working on a PackStack Guide which will be available very soon.


Multi-Node OpenStack

OpenStack is very complex to install. The Multi-Node is the most complex install. Being made of several key services that are separately installed and configured. OpenStack has a detailed documentation on how to install all these different services.