OpenStack
OpenStack is a free and open-source software platform for cloud computing, mostly deployed as Infrastructure-as-a-service ( IaaS). In other words, it is a cloud operating system that controls large pools of computing, storage and networking resources throughout a data center. All of these components are managed through a dashboard via the web interface. This project was launched by Rackspace and NASA in July 2010. OpenStack is managed by the OpenStack Foundation and backed up by some big companies.
Deployment Models
The following image shows how OpenStack is deployed.
#image-source:edureka
On-Premise distribution
In this model, a customer downloads and installs an OpenStack distribution within their internal network.
OpenStack-based Public Cloud
A vendor provides a public cloud computing system based on the OpenStack project. Example: AWS
Hosted OpenStack Private Cloud
A vendor hosts an OpenStack-based private cloud including the underlying hardware and the OpenStack software. You can ask cloud vendor to setup OpenStack in your own Hardware and all your information is within your control.
OpenStack-as-a-Service
A vendor hosts OpenStack management software as a service and customers use the software service. Your cloud provider will set up in their own environment and you will pay according to the service used.
OpenStack Architecture
#image-source:edureka
#image-source:cloudify
Horizon
This is the dashboard. Here the user can get a brief overview of the open-stack infrastructure. It also provides a web-based user interface to OpenStack services including Nova, Swift, Keystone, etc. It allows users and administrators of the environment to interact with and manage the various functional components without having to install any local client tools other than a web browser.
Keystone
It is used to provide an authentication and authorization service for other OpenStack services. Authorized and authentication is needed before using any services. You can add a user and grant privileges in this section. It is more like who are you and what do you can access. It uses the following service for authorization and authentication.
Token Service
It validates and manages token used for authenticating the request, once the user credentials are already being verified. It is a session based token management.
Catalog service
It provides endpoint discovery.
Assignment service
It provides a level of authorization. For example, some user can get right to access 3-services and some can get only 2. So based on these rules, rules can be created.
Nova
OpenStack compute (codename: Nova) is the component which allows the user to create and manage virtual servers using the machine images. This is the computing domain. This is the zone, where all the processing and computing happens. It is designed to provide power massively scalable, on-demand access to computer resources. It is fault tolerant, recoverable and provides API-compatibility with systems like Amazon EC2. Nova is based on messaging architecture and all of its components communicate using message queuing system such as RabbitMQ.
#image-source:edureka
Glance
It stores and retrieves the virtual machine disk image. This has got all the disk containing them like Ubuntu, Debian, etc. This is somehow similar to the repository and includes images ( ubuntu, Debian, etc... ) and metadata definitions. Glance image services include discovering, registering and retrieving virtual machine images.
#image-source:edureka
Swift
This is object storage component. This is connected to data-store such as S3, where all the files are located. You can store all kind of files, all kind of images in swift. This is completely meant for storage. You can think Swift as in-build hard-drive.
#image-source:edureka
Neutron
It is a pluggable, scalable and API-driven system for managing networks. OpenStack networking is useful for VLAN management, management of IP addresses to different VMs and management of firewalls using these components. It is responsible for communication between the services. It is focused on delivering Networking-as-a-Service (Naas) in virtual compute environments. Neutron relies on Keystore for authentication and authorization of all API requests.
#image-source:edureka
Cinder
This is block storage component and provides persistent block storage resources that OpenStack compute instances can consume. This includes secondary attached storage similar to the Amazon Elastic Block Storage ( EBS) offering. It is more oft like plug-able storage system. Think of Cinder as external Hard-disk. Cinder scheduler schedules and moves request to the appropriate volumes. Cinder Volume manages the block storage devices and specifically, they are back-end devices. Cinder database contains metadata of the files that are in the block storage system.
#image-source:edureka
Ceilometer
For metering and billing. It will produce the bill and log at the end of all the services being used. This component is also used to decide the scalability and obtain the statistics regarding the usage.
Orchestration Heat
This component manages multiple Cloud applications through an OpenStack-native REST API and a CloudFormation-compatible Query API.
Process Workflow
Finally After getting an image, Nova mounts it on a VM. During boot process, it requests Neutron ( networking components ) for an IP address.
Credit-for-processworkflow: cloudify
Install OpenStack in VMs
Things are about to get real! Let's explore OpenStack.
Prerequisites
You need to have a system with a fresh install of Linux.
Installation
We need to add user to install DevStack.
useradd -s /bin/bash -d /opt/stack -m stack
Since this user will be making many changes to your system, it will need to have sudo privileges.
apt-get install sudo -y || yum install -y sudo
echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Now, log out and login back as the new user. In this case, it will be "stack" user.
Download DevStack
cd /opt/stack
sudo apt-get install git -y || sudo yum install -y git
git clone https://git.openstack.org/openstack-dev/devstack
cd devstack
Run DevStack
Now to configure stack.sh, copy local.conf file from devstack/samples/local.conf in devstack root.
- Set
FLOATING_RANGE
to a range not used on the local network, i.e. 192.168.1.224/27. This configures IP addresses ending in 225-254 to be used as floating IPs. - Set
FIXED_RANGE
andFIXED_NETWORK_SIZE
to configure the internal address space used by the instances. - Set
FLAT_INTERFACE
to the Ethernet interface that connects the host to your local network. This is the interface that should be configured with the static IP address mentioned above. - Set the administrative password. This password is used for the admin and demo accounts set up as OpenStack users.
- Set the MySQL administrative password. The default here is a random hex string which is inconvenient if you need to look at the database directly for anything.
- Set the RabbitMQ password.
- Set the service password. This is used by the OpenStack services (Nova, Glance, etc) to authenticate with Keystone.
[[local|localrc]] FLOATING_RANGE=192.168.1.224/27 FIXED_RANGE=10.11.12.0/24 FIXED_NETWORK_SIZE=256 FLAT_INTERFACE=eth0 ADMIN_PASSWORD=secretadmin DATABASE_PASSWORD=secretdatabase RABBIT_PASSWORD=secretrabbitmq SERVICE_PASSWORD=secretservice
Run DevStack:
./stack.sh
This will install all the required files on your computer. This process may take several minutes depending on your network speed and hardware performance. When the installation is complete, you will see a summary of stack.sh , including the relevant URLs, account, and passwords.
From this point, the dashboard should be accessible through web browser.
GOOD LUCK!