Cloud technology is exploding as more businesses discover the benefits of distributed computing. For intensive calculations, computation tasks, and large storage capacity, many are opting to deploy a private Cloud that is secure yet easy for employees and customers to access. OpenStack is an open-source software project that lets anyone build their own private cloud computing system. It is getting a lot of attention lately, so we thought it would be a good idea to take a look at what comprises an OpenStack cloud.
OpenStack is composed of several highly specialized software components that work in cooperation to form a complete cloud infrastructure. The current release of OpenStack (Icehouse) consists of ten main services:
Nova is the Compute service. It’s the cloud computing fabric controller which exposes the Infrastructure as a Service (IaaS) functionality of an OpenStack cloud to users. Nova takes care of scheduling, provisioning, deploying, and management of virtual machines. It’s very extensible and is capable of deploying virtual machines on a wide variety of different backends (e.g. KVM, VMware, Xen, LXC).
Swift is a highly available, distributed, eventually consistent Object Storage service. Users (or other OpenStack services) can use it to easily store data in a reliable manner. As of Icehouse, Swift can work with Ceph as the storage backend. Ceph can also be a complete drop-in replacement for Swift inside an OpenStack cluster. Whether one should use Swift or Ceph for object storage depends on individual requirements. We will discuss pros and cons of both approaches in a future blog post
Cinder is the Block Storage service. It’s responsible for managing persistent virtualized block storage devices which get attached to the virtual machines created by Nova. Such block devices are often meant to outlive the virtual machines and can be easily shuffled between various machines.
Neutron provides Networking as a Service functionality to other OpenStack services and users. It takes care of reconfiguring various elements of the entire network infrastructure in order to provide secure and isolated network connectivity between them. Neutron hides the complexity of virtualized networking behind a user friendly interface that gives users an intuitive way to specify which virtual machines to locate in which virtual networks. Neutron takes care of the rest. Under the hood this may include configuring physical network equipment, network interfaces, assigning IP addresses, providing the DHCP and PXE booting services, managing virtual routers, firewalls, and much more.
Horizon is a project that provides the user with a unified web-based graphical user interface for managing all of the OpenStack services.
Keystone is the Identity service. It takes care of user authentication and authorization, as well as user and project management. It’s very extensible and can be made to work with various backends such as LDAP and Kerberos.
Glance is the Image Storage service. It takes care of registering, managing, and retrieving virtual machine images. Those images are later used by Nova when creating virtual instances. It’s not uncommon to have Glance store image file inside of the Swift service for additional reliability.
Ceilometer is the telemetry service. It provides a unified framework for monitoring and metering of resource usage for a whole spectrum of elements composing an OpenStack cloud. One of the many applications of Ceilometer is have it keep track of the load on the virtualized infrastructures to automate scaling of those resources if needed. Another application of Ceilometer is utilizing the resource usage reports for billing purposes.
Heat is an Orchestration service. It implements an elaborate orchestration engine that allows the users to quickly and easily launch complex virtualized infrastructures and cloud applications based on easy to manage text file templates.
Trove provides the Database as a Service functionality to users. It takes care of provisioning, configuring, and managing different database engines (MySQL, MongoDB, Cassandra, etc.) and then exposes their resources to the user’s applications. Trove takes the complexity out of database deployment and management allowing users to simply request a database and start using it immediately.
It’s worth noting that most of the services can be configured to interface with a whole variety of different “backends”, which provide yet another level of modularity. The backends provide the actual implementation of the functionality provided by the service and can be mixed and matched to suit the individual needs of different OpenStack clouds. For example, specialized backends can allow the OpenStack services to directly interface with custom hardware appliances designed for better performance and reliability, or to use a different filesystem to store the data. Using different backends is transparent to the end-users of a cloud. This means users receive the same user experience regardless of which backends the cloud administrators chose.
OpenStack's modular architecture makes it easy for IT administrators to choose which functionality to include in the services they offer. It can also increase overall uptime since individual services can be updated independently, leaving others up and running during maintenance.
Since OpenStack can be deployed both as infrastructure and as a service, it offers the flexibility to use services on-premise, or on a service provider's network without retooling the application. This can be helpful when you need extra capacity in a hurry to handle short-lived increases in workload.
We'll talk more about OpenStack in future posts. Let us know what you're most interested in learning about.