Openstack创建云主机的流程-小小白(linuxzkq)

博主自从之前换了工作到现在,因为工作太忙的原因,已经好久没有更新博客了,深表歉意,还望大家理解。。。。。。

今天正好有点时间,整理下Openstack创建云主机的流程,大神勿喷

一、流程图

二、虚拟机创建流程如下

  1. 客户(用户)端通过命令行CLI或Dashboard Horizon使用自己的用户名密码请求认证组件keystone进行用户的验证;
  2. keystone通过查询在keystone的数据库user表中是否存在user的相关信息,包括password加密后的hash值,并返回一个token_id(令牌),和 serviceCatalog(一些服务的endpoint地址,cinder、glance-api后面下载镜像和创建块存储时会用到);
  3. 客户端带上keystone返回的token_id和创建虚机的相关参数,通过nova-api地址Post请求nova组件创建虚拟机;
  4. nova-api接收到请求后,首先使用请求携带的token_id去访问keystone,验证令牌是否有效;
  5. keystone验证通过后返回更新后的认证信息;
  6. nova api通过查询Nova DB库,比对检查创建虚拟机的参数是否有效与合法;

    检查虚拟机name是否符合命名规范,flavor_id是否在数据库中存在,image_uuid是否是正确的uuid格式,检查instance、vcpu、ram的数量是否超过配额。

  7. 当且仅当所有传参都有效合法时,更新nova数据库,新建一条instance记录,vm_states设为BUILDING,task_state设为SCHEDULING;
  8. nova api 远程调用传递请求、参数给nova scheduler,把消息“请给我创建一台虚拟机”丢到消息队列,然后定时查询虚机的状态;
  9. nova scheduler从queue中获取到“请给我创建一台虚拟机”的这条消息;
  10. nova scheduler访问nova数据库,通过调度算法,过滤出一些合适的、空闲的计算节点,然后进行排序;
  11. 更新虚机节点信息,返回一个最优节点id 给nova scheduler;
  12. nova scheduler选定host(最优节点id)之后,通过rpc.call的方式调用nova-compute服务,把“创建虚机请求”消息再次丢到消息队列(mq);
  13. nova compute从MQ中获取到创建虚拟机请求的消息;

    #nova-compute有个定时任务,定期从数据库中查找到运行在该节点上的所有虚拟机信息,统计得到空闲CPU个数、空闲内存大小和空闲磁盘大小。然后更新数据库compute_node信息,以保证调度的准确性。

  14. nova compute通过rpc.call的方式查询nova数据库中虚机的信息,例如主机模板和id;
  15. nova conductor从消息队列中拿到请求查询数据库中该(虚拟机信息)的消息;
  16. nova conductor查询nova数据库;
  17. nova 数据库返回被查询的虚拟机信息给nova conductor;
  18. nova conductor把查询到的虚拟机信息丢到MQ中,然后nova compute从消息队列中获取该虚拟机的信息;
  19. nova compute 请求glance 的restful api,下载所需要的镜像,一般是qcow2格式的; http://www.cnblogs.com/zhoumingang/p/5522463.html
  20. glance api 也会去keystone 验证请求的token是否有效;
  21. token验证有效,glance api 返回镜像信息给nova-compute;
  22. 同理,nova compute请求neutron api配置网络(Quantum(Neutron的前身)),例如获取虚机的ip地址、掩码,网关等信息;
  23. neutron api去keystone 验证请求的token是否有效;
  24. token验证有效,neutron api 返回网 络信息给nova-compute;
  25. 25-27步骤. 同glance、neutron 验证token, 返回块设备信息,即云硬盘给nova-compute;
  26. 28步骤. 根据上面配置的虚拟机信息,生成xml,写入libvirt.xml文件,然后调用libvirt driver 去使用libvirt.xml 文件启动虚拟机。

三、总结

1、Openstack这种分布式的架构,各个模块之间松耦合,可以很容易的新增模块,而且配置灵活,服务可以安装在不同节点,即使部分服务挂了也不会影响。

2、虚拟机创建简单来说分三步,nova api接受创建虚机请求,nova scheduler为创建虚机指定宿主机,nova compute启动虚拟机。如果能够理解上面的所有步骤,那么对于定位问题可以精准,甚至有些问题可以自己解决,譬如虚机error了,如果你看到虚机的信息已经有host信息了,那基本能从novacompute的日志中看到问题所在,如果没有,基本是scheduler会有错误信息提示。

时间: 2024-12-24 16:08:38

Openstack创建云主机的流程-小小白(linuxzkq)的相关文章

Openstack新建云主机的流程

前言 前天晚上没睡觉,所以昨天睡得很早,导致今天4点就起来了 时间是人最宝贵的财富,于是我打消了钻在被子里刷剧的念头,爬起来整理一下在Openstack中新建一个云主机的流程. Openstack可以让你在登录dashboard之后只需要点一下"创建主机"的按钮,选择相应配置,在几十秒内就可以创建好一台云主机供你使用,这么牛逼的事情是怎么做到的呢? 别着急,听我跟你慢慢道来 新建一个云主机流程总览图 图中流程-1 首先你访问dashboard之后,显示的是一个登录页面,人家horizo

openstack启动云主机的流程

看一下openstack启动云主机的流程图 通过上图分析可以知道: 1. 用户使用Dashboard或者CLI 把认证信息通过REST请求发送给keystone进行认证.2. Keystone校验用户发送的认证信息,并且生成/存储/返回认证后的令牌(token),这个令牌被用来向其他组件发送REST请求.3. Dashboard 和 CLI把“启动云主机”和 “nova-boot”请求转换成REST API请求,并且发送到nova-api.4. Nova-api收到请求,然后向keystone发

【openstack N版】——创建云主机

一.启动实例 1.1 已准备服务介绍 MySql:为各个服务提供数据存储. RabbitMQ:为各个服务之间通信提供交通枢纽. keystone:为各个服务之间通信提供认证和服务注册. Glance:为虚拟机提供镜像管理. Nova:为虚拟机提供计算资源. Neutron:为虚拟机提供网络资源. 1.2 网络(flat) 1.2.1创建虚拟网络 1 #share 允许所有项目使用虚拟网络 2 [[email protected] ~]# openstack network create --sh

Openstack之路(六)创建云主机实例

创建云主机网络 在控制节点上,加载admin凭证来获取管理员能执行的命令访问权限 [[email protected] ~]# source admin-openrc 创建网络 [[email protected] ~]# openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider +------------------

Openstack之路(八)创建云主机镜像

准备CentOS-7.x镜像,可以从网上直接下载,我这里准备的镜像是CentOS-7.2-x86_64 [[email protected] ~]# ls -l /tmp/CentOS-7-x86_64-DVD-1511.iso -rw-r--r-- 1 root root 4329570304 Jan 7 2016 /tmp/CentOS-7-x86_64-DVD-1511.iso 安装相关软件 [[email protected] ~]# yum -y install qemu-kvm li

zstack 创建云主机 (三)

扁平网络 Flat Network 1. 介绍 扁平网络在私有云网络环境中非常的流行.它的网络拓扑很简单,所有的云主机都是直接接在公司内部的一个大二层的网络上.扁平网络也非常容易搭建.由于所有的云主机和物理主机都在一个二层广播域,在这个二层网络上的云主机可以通过数据中心的核心路由器链接到Internet.在这个教程里,我们假定您拥有一个可以访问Internet的IP网络. 2. 前提 我们假定您已经根据安装手册里的方法成功的安装并且启动了ZStack.您可以在Chrome浏览器或者FireFox

使用aliyun cli工具快速创建云主机

参考文档: https://help.aliyun.com/document_detail/25484.html?spm=a2c4g.11186623.3.2.b57vQp 步骤 创建AccessID 下载aliyun-cli工具 建议整 golang 版本, 一个二进制,没有任何依赖 配置AccessID 还是前面那个链接,配置阿里云CLI段落 创建云主机(创建后是未启动状态) 指令 aliyun ecs CreateInstance --ImageId="ubuntu_16_0402_64_

openstack迁移云主机总汇 其二(云主机冷迁移)

2冷迁移 冷迁移有两种方式: 一种方式只能在同一个openstack集群中做,另一种可以再相同或者不同的集群中做 在做冷迁移之前记得把要迁移的实例关机 2.1方法1 把主机名为YUN-19上的实例迁移到YUN-20上,两个节点在同一个集群中,其中YUN-19是控制节点 2.1.1在YUN-19上,修改数据库 (修改数据库必须要在控制节点上做) # mysql mysql> use nova; mysql> update instances set host='YUN-20' where hos

openstack迁移云主机总汇其一(云主机热迁移)

openstack迁移总汇 目录 1 热迁移之block-migration 1.1 查看物理主机CPU 1.2 修改hosts文件 1.3 开启热迁移 1.4 修改防火墙 1.5 virsh测试是否可以连通对端机器 1.5.1 方法1 1.5.2 方法2 1.6 迁移情况 1.7 下面的作为参考 1.7.1 主机 1.7.2 各节点之间nova账号无密码访问 1.7.3 可选操作 1.8 注意事项 1.8.1 事项1 1.8.2 事项2 2 冷迁移 2.1 方法1 2.1.1 在YUN-19上