Openstack is an open-source cloud computing platform. It is deployed as IAAS and can be deployed anywhere. Nova is the most important and complicated part in the Openstack project. The core of Openstack project is the Compute module, known as Nova, which is responsible for the provision, management and termination of VMs.
Components of Nova:
Database: Nova stores all of its instances, users, groups, and networks in database and are tracked using a relational database that you can query to get information
API: Nova API service listens to API requests and communicates with other services using the Advanced Message Queuing Protocol (AMQP) aware applications like RabbitMQ
Scheduler: Nova Scheduler is the service that schedules the requests it recives from the queue. For instance, nova scheduler service determines on which host a VM should be provisioned. The scheduler chooses host using various filters.
Filter Scheduler (nova.scheduler.filter_scheduler.FilterScheduler) is the default scheduler. Filters are binary, either a host is accepted or rejected. When a filter receives a request to choose host, it first applies filters to determine which hosts are eligible.
Table 1. Some of the important available filters and the resource it checks to filter the host:
|AggregateCoreFilter||CPU core numbers with a per-aggregate cpu_allocation_ratio value|
|AggregateDiskFilter||disk allocation with a per-aggregate disk_allocation_ratio value|
|AggregateImagePropertiesIsolation||properties defined in an image’s metadata against those of aggregates to determine host matches|
|AggregateInstanceExtraSpecsFilter||properties defined in extra specs for an instance type against admin-defined properties on a host aggregate|
|AggregateIoOpsFilter||disk allocation with a per-aggregate max_io_ops_per_host value|
|AggregateNumInstancesFilter||number of instances with a per-aggregate max_instances_per_host value|
|AggregateRamFilter||RAM allocation of instances with a per-aggregate ram_allocation_ratio value|
|AggregateTypeAffinityFilter||per-aggregate instance_type value|
|NUMATopologyFilter||hosts based on the NUMA topology that was specified for the instance|
|DiskFilter||disk space available for root and ephemeral storage|
|IoOpsFilter||concurrent I/O operations on hosts|
|NumInstancesFilter||hosts that have more instances running than specified by the max_instances_per_host option|
|RamFilter||sufficient available RAM|
|SimpleCIDRAffinityFilter||based on host IP subnet range|
Chance Scheduler (nova.scheduler.chance.ChanceScheduler) is another type of scheduler which randomly selects from lists of filtered hosts to provision the VM.
Network: Manages all the network functions like IP Forwarding, Bridging and VLANs. The nova-network provides virtual networks to enable compute servers to interact with each other and with the public external network.
Compute: Compute is a major part of an Infrastructure-as-a-Service (IaaS) system. The main modules are implemented in Python. Compute can scale horizontally on standard hardware. nova-compute is the main service of Nova Compute.
Conductor: nova-conductor service enables OpenStack to function without compute nodes accessing the database.
Nova uses a shared-nothing design, so that you can run all the major components on separate servers. The state of each services are stored in the database. The message queue handles all the requests and forwards it to the scheduler. Nova compute supports many of the popular hypervisors. Docker, Hyper-V, Kernel-based Virtual Machine (KVM), Linux Containers (LXC), Quick Emulator (QEMU), VMware vSphere and Xen to name a few.
The compute system is designed for consumers to share a common resource. There is a role based access assignments where the users can do what they are assigned to do. Roles control the action that a user is designated to perform.
Tenants: In Openstack, Tenants are isolated resource containers that contains users and resources like individual VLAN, volumes, instances, images and keys. We can use quota control in tenants and can control the number of volumes that can be launched, processor/ram and resource allocation and floating/fixed IP address assignments.
Roles: Roles control the actions a user can perform. Most of the actions do not require a particular role. The main file policy.json can be edited to modify the user roles. You can also define new roles. Each users are assigned with username and password so they can login to the dashboard and do the tasks they are assigned to do.
Storage – Ephemeral storage and Persistent volume
Every instance need a place to store data, and Openstack provides two methods to store data — Ephemeral storage and Persistent volume.
Ephemeral Storage can be considered as the root volume of the instance. It persists across reboots and will stay with the instance till the end of it’s life. The size of this storage can be defined in flavors. A cloud-aware Operating System image can discover, format, and mount such a storage device. You can also define the default file system it should use. It helps users to define EXT for linux and NTFS for Windows,
Persistent Storage includes secondary attached storage similar to Amazon’s Elastic Block Storage (EBS). This is can be attached or detached to and from the instance. You cannot plug the device to two running instances simultaneously and can only be attached and in use by a single instance at a time.
Compute is what lets the Openstack to host VMs. Compute nodes share their processor and memory for the hosted VMs. The following basic categories describes the nova-compute service architecture:
API: User interacts with the openstack system via API. It is the heart of cloud framework. It makes hypervisor, storage and network available to users. At the endpoint of the API, there is basic RESTful HTTP web services which handle authentication, authorization, and basic command and control functions You can use the APIs and extensions after you authenticate through the Identity API. In exchange for a set of authentication credentials, the Identity service generates tokens. A token represents the authenticated identity of a user and, optionally, grants authorization on a specific project or domain.
Message queue: This is what coordinates the interaction between compute nodes, network controllers, scheduler and similar components. When the API server receives request from a user, it authenticates the user, processes the request and then routed to the queuing engine for the appropriate worker processes. When the worker gets the job it was assigned to do, it accepts the task and start working on it. Upon completion, a response is dispatched to the queue.
Compute: Compute workers manage the compute nodes. It is responsible for run, terminate, reboot instances, attach/detach volumes and et console output.
Network Controller: It manages networking resources on the host machine. A few of the operations include allocating fixed IP addresses, configuring VLANs and configuring network for compute nodes.
Posted January 12, 2016 by Arun V