[转]Request Flow for Provisioning Instance in Openstack

One of the most important use-case in any cloud is provisioning a VM . In this article we shall do a walk through about an instance(VM) being provisioned in a Openstack based cloud. This article deals with the request flow and the component interaction of various projects under Openstack. The end result will be booting up a VM.
Provisioning a new instance involves the interaction between multiple components inside OpenStack :
- CLI Command Line Interpreter for submitting commands to OpenStack Compute.
- Dashboard (“Horizon”) provides the interface for all the OpenStack services.
- Compute (“Nova”) retrieves virtual disks images(“Glance”) , attach flavor and associated metadata and transforms end user API requests into running instances.
- Network (“Quantum”) provides virtual networking for Compute which allows users to create their own networks and then link them to the instances.
- Block Storage (“Cinder”) provides persistent storage volumes for Compute instances.
- Image (“Glance”) can store the actual virtual disk files in the Image Store.
- Identity (“Keystone”) provides authentication and authorization for all OpenStack services.
- Message Queue(“RabbitMQ”) handles the internal communication within Openstack components such as Nova , Quantum and Cinder.
The request flow for provisioning an Instance goes like this:
- Dashboard or CLI gets the user credential and does the REST call to Keystone for authentication.
- Keystone authenticate the credentials and generate & send back auth-token which will be used for sending request to other Components through REST-call.
- Dashboard or CLI convert the new instance request specified in ‘launch instance’ or ‘nova-boot’ form to REST API request and send it to nova-api.
- nova-api receive the request and sends the request for validation auth-token and access permission to keystone.
- Keystone validates the token and sends updated auth headers with roles and permissions.
- nova-api interacts with nova-database.
- Creates initial db entry for new instance.
- nova-api sends the rpc.call request to nova-scheduler excepting to get updated instance entry with host ID specified.
- nova-scheduler picks the request from the queue.
- nova-scheduler interacts with nova-database to find an appropriate host via filtering and weighing.
- Returns the updated instance entry with appropriate host ID after filtering and weighing.
- nova-scheduler sends the rpc.cast request to nova-compute for ‘launching instance’ on appropriate host .
- nova-compute picks the request from the queue.
- nova-compute send the rpc.call request to nova-conductor to fetch the instance information such as host ID and flavor( Ram , CPU ,Disk).
- nova-conductor picks the request from the queue.
- nova-conductor interacts with nova-database.
- Return the instance information.
- nova-compute picks the instance information from the queue.
- nova-compute does the REST call by passing auth-token to glance-api to get the Image URI by Image ID from glance and upload image from image storage.
- glance-api validates the auth-token with keystone.
- nova-compute get the image metadata.
- nova-compute does the REST-call by passing auth-token to Network API to allocate and configure the network such that instance gets the IP address.
- quantum-server validates the auth-token with keystone.
- nova-compute get the network info.
- nova-compute does the REST call by passing auth-token to Volume API to attach volumes to instance.
- cinder-api validates the auth-token with keystone.
- nova-compute gets the block storage info.
- nova-compute generates data for hypervisor driver and executes request on Hypervisor( via libvirt or api).
The table represents the Instance state at various steps during the provisioning :

[转]Request Flow for Provisioning Instance in Openstack的更多相关文章
- An overview of the Spring MVC request flow
The Spring MVC request flow in short: When we enter a URL in the browser, the request comes to the d ...
- Spring MVC request flow
1. When we enter a URL in the browser, the request comes to the dispatcher servlet.The dispatcher se ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
还是先上图吧,无图无真相 别以为真懂Openstack!先别着急骂我,我也没有说我真懂Openstack 我其实很想弄懂Openstack,然而从哪里下手呢?作为程序员,第一个想法当然是代码,Code ...
- nova-compute 部署 instance 详解 - 每天5分钟玩转 OpenStack(28)
本节讨论 nova-compute,并详细分析 instance 部署的全过程. 先给大家道个歉:今天这篇文章的篇幅比以往要多一些,本来想分两次发,但考虑到文章的完整和系统性,还是一次发了出来,这次可 ...
- Openstack:Instance cannot ping by domain name
Issue: When you created an instance inside Openstack, you may find that you cannot ping address by d ...
- openStack ceilometer API
1.概述 Ceilometer是OpenStack中的一个子项目,它像一个漏斗一样,能把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其它服务提供数据支撑.Ceilomet ...
- [转]Understanding OpenStack Authentication: Keystone PKI
The latest stable release of OpenStack, codenamed Grizzly, revolutionizes the way user authenticatio ...
- openstack系列文章(四)
学习 openstack 的系列文章 - Nova Nova 基本概念 Nova 架构 openstack Log Nova 组件介绍 Nova 操作介绍 1. Nova 基本概念 Nova 是 op ...
- Openstack 10 云环境安装
概述 资源规划 Undercloud Installation Overcloud Installation Trouble Shooting 附录 本指南介绍了如何使用 Red Hat OpenSt ...
随机推荐
- zigbee_蓝牙_wifi的比较与区别分析
现在无线通读热了起来.三个最大的Wifi.ZigBee.蓝牙它们三个始终困惑着我.那么它们三个有什么区别呢? Zigbee 和蓝牙都是一项无线通信技术.ZigBee的传输距离视发射功率而定,有几百到几 ...
- Java多线程01(Thread类、线程创建、线程池)
Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...
- 泛型List去除重复指定字段
泛型List去除重复指定字段ID var list=listTemp.Distinct(new IDComparer ()).ToList(); 重写比较的方法: public class IDCom ...
- 某app的安全性分析过程
交互过程如下,可以发现问题很多 http://www.ixxxx.com//api/index/app图片验证码:{"data":{"imgCode":&quo ...
- 服务管理之NFS
目录 NFS简介 1.1 nfs特点 1.4 nfs的应用场景 4. nfs管理 NFS简介 1.1 nfs特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的 ...
- select标签操作
//遍历select标签 WebElement select = driver.findElement(By.tagName("select")); List<WebElem ...
- Spring 缓存注解之@Cacheable,@CacheEvit
Spring引入了Cache的支持,其使用方法类似于Spring对事务的支持.Spring Cache是作用于方法上的,其核心思想是,当我们调用一个缓存方法时,把该方法参数和返回结果作为一个键值对存放 ...
- 如何让div弄成可以输入文字
如何让div弄成可以输入文字 加一个contenteditable="true"属性即可. <!DOCTYPE html> <html lang=" ...
- (转载)python 命名.py 不能与模块相同,否则会报错
在学习python网页爬虫时,测试requests的post方法进行表单提交时,命名.py文件为requests.py 代码如下: import requests params={'firstname ...
- javabean转换为map对象
在调用第三方接口发现对方使用map进行接收(不包括秘钥等),将bean类属性转换为map,直接贴代码: /** * JavaBean对象转化成Map对象 * * @param javaBean */p ...