For non-subjetc experts it’s not easy to get quickly introduced to OpenStack and its capabilities. Let’s try to demystify this incredibly powerful platform.
OpenStack is a Cloud OS (Operating System) in the sense that it provides a set of APIs that programmatically can virtualize and manage the physical resources of any Data Center. This means: bare metal resources are virtualized, abstracted and programmatically allocated, according to the platform users’ needes. The juxtaposition of OpenStack to a OS is very well posed and the previous statements aid at getting that: an OS normally abstracts hardware resources into layered APIs (aka System Calls), in order to make the application development an easier job, but this is just what OpenStack does at a larger scale (i.e. not a single machine’s hardware, but hardware from a multitude of machines). The OpenStack platform, like a OS, can be seen as a transversal horizontal layer over the physical resources (i.e. hardware, storage and network) of a typical Data Center, abstracting such resources that can be allocated on-demand, programmatically.
The drawing below aims at clarifying the above reasoning and the provided definition.
The OpenStack platform has an extremely modular architecture: virtualization and allocation concerns are well confined into specific components, for example Networking is handled by Quantum, a dedicated component to create L2 and L3 SDN (Software Defined Networks).
In the above picture, four of the most important components are represented. Briefly, Compute is the execution engine, Storage is the storage manager, Dashboard is the control GUI and, as said, Networking is the network manager; all of them, can be accessed by the means of powerful RESTful APIs. As intuitive, those four components (i.e. a minimum viable deploy of OpenStack) define a complete set of software facilities: computation, storage and network resources deployed in any Data Center can be seamlessly controlled by them.
Actually, OpensStack is something richer. Plenty of projects orbit around the platform itself, and as for the Apache Foundation, the OpenStack Foundation has an incubation process: new and innovative projects are incubated before to be released in any milestone and/or GA (Generally Available) drop. The official projects that compose the offering are below reported.
In OpensStack terminology, a component is named as its project, and every project is labeled as a name-in-code.
- Keystone. Identity and Authentication Management. As clear, this component deals with the Security aspects: in secure deploy, before of any call, a valid token has be released by Keystone.
- Horizon. Command and Control Dashboard. This component implements a Web GUI that allows to use the powerful features of OpenStack in a user-friendly way; underneath, Horizon makes use of the OpenStack RESTful services.
- Cinder. Block Storage Management. This component provides a powerful set of APIs to manage the block storage, presented to the final user and consumed/used by Nova.
- Swift. Object Storage Management. This component provides a highly concurrent and available object storage layer, on which huge object pools can be stored; it is ideal to store unstructured data that can grow indefinitely.
- Quantum. Networking Management. This component provides SDN capabilities to the OpenStack platform, in particular through its APIs is very easy and straightforward to create L2 and L3 virtual networks, on top of the physical infrastructure.
- Glance. ISO Imange Storage Management. This component provides an ISO storage, or database, where OS images can be maintained with their related metadata: every time a OS is customized with some new software deployed, a new Glance ISO can be created and normally reused a number of indefinite times.
- Nova. Compute Engine. This is the computational core of the OpenStack platform, in it the virtualization and the Hypervisoring is managed: upon request, Nova is able to run ISO images upon the controlled hardware (i.e. one or many machines).
As said, OpenStack services can be accessed by the RESTful APIs. But, what about OpenStack internals? How the components interact each other? How the configurable deploy of components and their integration is achieved? Well, a serie of good points.
Basically, OpenStack is a message-driven architecture, in which the components interact by sending and receiving specific events.
At the core, a message queuing server provides integration capabilities and asynchronous message passing: components are parts of an asynchronous infrastructure, each of them providing a well defined set of abstracted capabilities to the others.
Concluding, an overview of OpenStack has been provided, with the aim to demystify a so complex and powerful architecture. This post is dedicated to newbies that approach the IaaS (Infrastructure as a Service) Cloud Computing through OpenStack.