Setting In-house Private Cloud with OpenStack

It appears that traditional data center architecture built around the clusters of dedicated servers is now obsolete. In the last few years, increasing number of companies virtualized their data centers to support various in-house applications. However, virtualization which was the buzzword until recently is now simply being looked upon as a stepping stone to create own private or hybrid clouds. Luckily, OpenStack suite is available to any one that wants to deploy a private or hybrid cloud.

The open source cloud platform OpenStack has gained maturity as a public and private cloud solution. However, unlike deploying applications on a public cloud like AWS, deploying Open Stack is not for faint hearted. With so many components and configurations to take care of, you need special skills to set up, manage and deploy applications.

In addition to the challenge of creating private cloud infrastructure, moving legacy applications to the cloud applications presents its own daunting challenges.

We discuss these issues in this article.

The best way to begin and learn OpenStack is to download to one of your server, install it and start playing with it.

%git clone https://git.openstack.org/openstack-dev/devstack

You will be up and running a test instance in a few hours of configuration effort.

I am assuming that you have decent previous knowledge of Linux o/s, Virtualization and IP networking.

Understanding OpenStack Framework and Components

OpenStack software controls large pools of compute, storage, and networking resources throughout a datacenter, managed through a dashboard or via the OpenStack API. OpenStack works with popular enterprise and open source technologies making it ideal for heterogeneous infrastructure.

All the tasks from managing networks to handling storage becomes very easy as Openstack abstracts the underlying layers and allows administrators and users to consume the resources with a consistent set of APIs from a common dashboard. This being an open-source project it is also possible to customize the dashboard.

My advice for any one is to first use free tier of AWS to learn about using cloud computing and managing EC2, block storage and other components. With operational knowledge of AWS, it will become lot easier to install and manage Open Stack.

Components of OpenStack

OpenStack is made up of many different moving parts. Being an open source system, anyone can develop additional components to meet special needs. However, Open Stack community consisting of major IT industry vendors, hosting companies and other stake holders, has collaboratively identified nine key components that are a part of the “core” of OpenStack, which are distributed as a part of any OpenStack system. These components are maintained by the OpenStack community.

  • OpenStack Compute (Nova): Open Stack Compute Engine Nova is the component which allows the user to create and manage virtual servers using the machine images. It manages virtualization and takes requests from end user through dashboard or API to form virtual Instances.

It is equivalent of AWS Elastic Compute (EC).

  • Object Storage (Swift): Swift is a storage system for objects and files. This component stores and retrieves unstructured data objects through the HTTP based APIs. It provides high scalability and data replication capabilities. This is used for Object storage that can be used by your applications or instances to store static objects like multimedia files, backups, store images, archives etc.

It is equivalent of AWS S3.

  • Block Storage (Cinder): . This component provides persistent block storage to running instances. The flexible architecture makes creating and managing block storage devices very easy.

This component refers to the traditional notion of attached way of accessing files might be important in scenarios in which data access speed is the most important consideration.

It is equivalent to AWS EBS (Elastic Block Store)

  • OpenStack Networking (Neutron): It provides the networking capability for OpenStack. It helps to ensure that each of the components of an OpenStack deployment can communicate with one another quickly and efficiently. OpenStack networking is useful for VLAN management, management of IP addresses to different VMs and management of firewalls using these components.

It corresponds to AWS Networking.

  • OpenStack Dashboard (Horizon). This component provides a web-based portal to interact with all the underlying OpenStack services, such as NOVA, Neutron, etc. Developers can access all of the components of OpenStack individually through an application programming interface (API), but the dashboard provides system administrators a look at what is going on in the cloud, and to manage it as needed.

It is similar to AWS Management Web Console.

  • OpenStack Identity Service (Keystone): It provides identity services for OpenStack. This provides a central directory of users mapped to the OpenStack services. It is essentially a central list of all of the users of the OpenStack cloud, mapped against all of the services provided by the cloud which they have permission to use. It provides multiple means of access, meaning developers can easily map their existing user access methods against Keystone.

It’s equivalent to AWS Identity and Access Management (IAM).

  • OpenStack Image Service (Glance): It provides image services to OpenStack. In this case, “images” refers to images (or virtual copies) of hard disks. Glance allows these images to be used as templates when deploying new virtual machine instances.

It is equivalent to AMI (Amazon Machine Images).

  • OpenStack Telemetry (Ceilometer): It monitors the usage of the Cloud services and decides the billing accordingly. This component is also used to decide the scalability and obtain the statistics regarding the usage. It also keeps a verifiable count of each user’s system usage of each of the various components of an OpenStack cloud. Think metering and usage reporting.

It’s comparable to AWS CloudWatch.

  • OpenStack Orchestration (Heat): For building large applications you need orchestration services to properly manage service request and resource allocation. The OpenStack Orchestration Service (Heat) is a template-driven engine that allows automated infrastructure the deployment through both an OpenStack-native REST API and a CloudFormation-compatible Query API.

It’s similar to AWS CloudFormation.

Comparison of OpenStack Services with AWS services:

Function OpenStack Component AWS Component
Compute Engine Nova EC2
Object Storage Swift S3
Block Storage Cinder EBS
Networking Neutron Networking
Dashboard Horizon AWS Console
Identity Service KeyStone IAM
Image Service Glance AMI
Telemetry Ceilometer Cloudwatch
Orchestration Heat CloudFormation

Challenges of Moving Applications to In House Open Stack Cloud

Creating a cloud infrastructure is one thing but actually able to move your legacy applications to use the cloud infrastructure efficiently is another thing.

Both steps will require suitable trained engineering manpower and other resources.

If you already have an application written for non-cloud server based architecture, but never designed for the cloud, then re-engineering of the application may have to be done before they can benefit with the cloud infrastructure.

Remember the block storage only works through http read and writes so changes must be made to the reads and writes part of the application. Also, you make use a certain set of APIs to do things like scale, set up new instances, and do things like caching etc.

Many cloud management APIs are language agnostic as support for Java, PHP, .NET, C#, C++, Ruby on Rails etc, are readily available. But you sure will need developer to understand, modify and integrate these in their applications.

Open Stack uses AWS compatible APIs, so if you already have been making use of AWS then the application will likely move without much changes.

Preparing for the Cloud Migration and Deployment

It is suggested that you should first set up a test bed before planning to move all the applications simultaneously to the cloud.

Here is a three step process that I recommend:

  1. Create a Pilot Program: Create a pilot program. Run a least critical application to learn about the cloud. Deploy cloud monitoring tool to understand the application performance and the end-user impact.
  1. Deploy Initial Applications: Deploy applications one by one ensuring availability, security, and performance of any business-critical applications. You won’t like to move all your major apps just to see that you can bring the entire operation down.
  1. Full Launch and Migration: Once you have developed the resources and ability to manage cloud applications, you are in a position to achieve operational benefits of cloud at scalability, performance and demand elasticity.

If you need more help on deploying the cloud applications contact me for any personal consultation.

Leave a Reply