OpenStack is a cloud computing project to provide an Infrastructure as a Service(IaaS), jointly launched by RackSpace and NASA. A collection of open-source technologies combined together make it a massively scalable cloud operating system. One big quality of OpenStack is it’s simplicity, anyone can easily tie-up different hosts and provide cloud storage. Openstack has become a big phenomenon in past three years since its launch in 2010. It has its reach to almost every tech giant with more than 10,000 developers working on it.
Before we start discussing anything, the very first thing is to deploy OpenStack. Yes, it is that easy! You can deploy it without any knowledge of underlying architecture. Go to Devstack, run the script and you are done!
Now, the code of OpenStack is quite large, with more than 1.5 million lines of code. Fortunately, it has a good modular design. In this article, I would be discussing about the architecture of OpenStack. OpenStack has a modular architecture and is divided into 7 components. We will discuss them one by one. The name in the parentheses are the code-names for respective services.
1) Openstack Compute(Nova): It is the central brain unit of the system. Nova is responsible to get the requests from user, choosing an appropriate host and running the instance on that host. It is a big component which uses the underlying hypervisor technology like KVM, qemu etc. It is designed to manage and automate pools of computer resources. Nova is also further divided into different parts including nova-volume, nova-network, nova-scheduler etc.
2) OpenStack Object Storage(Swift): Swift is a scalable redundant storage system. It is responsible for keeping the data safe. Swift is a reliable data storage that maintains a number of replicas of the data and also ensures integrity. New storage can be easily added using swift.
3) OpenStack Block Storage(Cinder): When user spawns an instance, she also needs some persistent block storage to work with. Here comes the cinder! It manages the creation, attaching and detaching of the block devices to servers. It can also be used to creates snapshots for backing up the data.
4) OpenStack Networking(Neutron): Neutron (formerly known as Quantum), is responsible for managing networks and IP addresses. It can manage the networks in three ways: using flat network manager, flat DHCP network manager or VLAN network manager. Neutron is capable of providing both fixed and flexible IPs to the instances.
5) OpenStack Dashboard(Horizon): Horizon provides administrators and users a graphical interface to access, provision and automate cloud-based resources. This web-based dashboard has a lot of features that make launching of an instance and administrating an easy task.
6) OpenStack Identity (Keystone): Keystone is the one stop point of authentication. To access some features, or to initiate some tasks, users/services needs to authenticate themselves first. The idea behind keystone is to make the authentication process centralized. No matter the user, the admin or any project, everyone has to go through keystone first. Keystone supports several modes of authentication including the standard username-password matching and token based authentication.
7) OpenStack Image Service(Glance): Glance is a service dedicated to the operations of disk and server images. It provides discovery, registration and delivery services for the images. Glance supports several formats like qcow2, vmdk etc. It can store the images in any of the back-ends like OpenStack Object Storage.