[转]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 ...
随机推荐
- 【转】重写Equals为什么要同时重写GetHashCode
.NET程序员都知道,如果我们重写一个类的Equals方法而没有重写GetHashCode,则VS会提示警告 :“***”重写 Object.Equals(object o)但不重写 Object.G ...
- TypeError: unsupported operand type(s) for +: 'float' and 'decimal.Decimal'
TypeError: unsupported operand type(s) for +: 'float' and 'decimal.Decimal' 浮点型和双精度类型 相加报错 from deci ...
- hbase——b树,b+树,lsm树
b树 b树,又叫做平衡多路查找树.一个m阶的b树的特性如下: 树中的每个节点,最多有m个子节点. 除了根节点之外,其他的每个节点至少有ceil(m/2)个子节点,ceil函数为取上限函数. 所有的叶子 ...
- [精华][推荐]CAS SSO实现单点登录框架学习源码
1.通过下载稳定版本的方式下载cas的相关源码包,如下: 直接选择4.2.1的稳定代码即可 2.我们项目中的版本版本使用maven apereo远程库去下载 通过远程maven库下载cas-serve ...
- Numpy 创建数组
ndarray 数组除了可以使用底层 ndarray 构造器来创建外, 也可以通过以下几种方式来创建. numpy.empty numpy.empty 方法用来创建一个指定形状(shape),数据类型 ...
- python_命令
1)pydoc是python自带的一个文档生成工具,使用pydoc可以很方便的查看类和方法结构 linux环境: pydoc raw_input windows环境:python -m pydoc r ...
- AX_Query
static void example(Args _args) { SysQueryRun queryRun = new SysQueryRun(querystr(KTL_Sale ...
- python中print不换行
python中的print打印的结果总是进行了换行,如果不想换行显示可以在print中添加“end ='' ” 一般print显示: for i in range(3): print(i) #显示结果 ...
- Core DES加、解密
安装 Portable.BouncyCastle Nuget包 地址:https://www.nuget.org/packages/Portable.BouncyCastle/ Install-Pac ...
- Scrapy学习之路(一)————环境配置
一.问题环境安装 首先scrapy这个爬虫框架是基于twisted完成的因此,在安装scrapy之前需要安装twisted.否则直接安装scrapy就会直接出错:Failed building whe ...