题目:ironic学习笔记day2
日期:2018.7.10
参考资料:http://ironic-book.readthedocs.io/zh_CN/latest/install/preface.html
一.絮絮叨叨
今天公司assign了hostha的项目给师父,并要让我也开始跟着做,还是什么都不懂中,零零散散在官网下文档,下代码,又看到了一大堆不懂的东西哎orz,慢慢来一个一个攻克吧!
感觉到创业公司的不足了...对新人培训几乎没有,小白完全就是自己在瞎捉摸,哎,也是完全在考验学习能力了!加油加油吧~
而且看到了hr群发的邮件,给openstack社区投稿,中了就能去柏林峰会了T_T好想去啊好想去啊!
希望明年的时候我也能发稿就是了哈哈哈,先做会梦.
二.outlines
1.ironic术语
2.ironic简介
3.ironic作用
4.安装ironic原因
5.ironic配置
6.ironic部署结构
7.ironic-conductor初始化
8.ironic-driver
三.ironic学习记录
1.术语
Ironic:openstack组件,主要用来管理裸机
Baremetal:裸机,一般指物理服务器
Provision:部署
Inspector:主机发现
2.ironic简介
Ironic是一个openstack项目,主要用来管理裸机,包括裸机的电源控制,系统部署,网络配置.
裸机:没有配置操作系统的计算机
从裸机到应用还需要进行以下操作:
- 硬盘RAID,分区和格式化
- 安装操作系统,驱动程序
- 安装应用程序
Ironic实现的功能就是很方便的对指定的一台或多台裸机,执行以上操作
举个栗子:部署大数据集群需同时部署多台物理机,就可以使用ironic来实现
Ironic可以实现硬件基础设施资源的快速交付
3.ironic作用
裸机部署:有时候虚机的性能不能满足我们的要求,这时候可以使用裸机代替.
异地重生:当nova的计算节点挂了,能及时检查,并迁移虚机.
- 目前,在openstack体系结构中,ironic还是通过nova来调用的,模拟Nova的一个虚拟化启动实现基于ironic虚拟化驱动.(其他的虚拟化驱动还有kvm,vmware,xen等)
4.安装ironic原因
- 高性能计算
- 无法使用虚拟化的计算任务
- 数据库主机
- 单租户,专用硬件,安全性,可靠性以及其他需求
- 快速部署云基础设施(比如部署一个虚拟化节点)
5.ironic配置
Ironic有两种使用方式,一种是standalone模式,另一种是结合openstack.如果和openstack其他组建集成,ironic需要做一些配置.
- Keystone配置:
①注册baremetal服务用户
②注册服务
③创建endpoint
④创建角色
⑤如果想限制访问,可以创建一个”baremetal”的project,只有这个project下的成员才能访问ironic的资源(nodes,ports等)---给特定的用户授权
- Compute配置
社区的openstack默认只能管理裸机或虚机的一种,不能同时管理,这是由于Nova没法区分要部署的是裸机和虚机,但是可以通过修改代码可以达到同时管理裸机和虚机.
- Networking配置
Ironic在部署的时候需要使用neutron的DHCP服务
- Image配置
如果使用agent(代理)驱动,ironic要使用swift的temporary URLS,因此必须要用swift做glance后端
- TFTP配置
Ironic使用pxe流程进行部署.pxe主要由DHCP和TFTP两个服务来完成.ironic自己并未提供着两个服务,其中DHCP由neutron来提供.TFTP则是用户自己配置xinet和tftp-server来完成.
①PXE,预启动执行环境,工作于c/s的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统.
--PXE最直接表现为:在网络环境下工作站可以省去硬盘,使用了PXE的pc并不消耗服务器的cpu,ram等资源,所以使用PXE的pc也不是传统意义上的终端.
--PXE启动原理:当计算机引导时,BIOS把PXE client调入内存中执行,然后由PXE client将放置在远端的文件通过网络下载到本地执行.
②DHCP,动态主机配置协议,是局域网网络协议,使用UDP协议工作,主要两个用途:
--给内部网络或网络服务供应商自动分配IP.
--给用户或内部网络管理员作为对所有计算机作中央管理的手段.
6.ironic部署结构
Ironic对外提供RESTful api接口,来响应外部请求,ironic-api和ironic-conductor之间通信则采用RPC.
Ironic服务由以下组件组成:
- 基于RESTful的API服务.
- Conductor服务,ironic核心组件通过API提供功能调用,conductor服务和API服务通过RPC通信.
- 各种驱动程序支持不同的硬件.
- 消息队列rabbitMQ
- 数据库
用户通过Nova-API和Nova-scheduler来启动一个裸机实例,之后请求会通过ironic-API,连接到ironic-conductor服务,再到对应的driver,最后完成实例部署,为用户提供成功部署的物理机服务.
7.ironic-conductor初始化
- Ironic架构:ironic由两部分组成,API和conductor.其中API采用pecan框架,使用RESTful方式访问,而API和conductor之间采用RPC通信,通常是rabbitmq.
- RPC初始化:conductor是RPC的server端(消费者),API是RPC的client端(生产者)
Ironic-conductor入口函数:
1 # 创建 RPC Server 2 mgr = rpc_service.RPCService(CONF.host, 3 'ironic.conductor.manager', 4 'ConductorManager')
- RPCservice:在上面代码中创建了一个RPCservice对象,然后设置了RPC的topic,endpoints,serializer.这里通过反射的方式设置了manager属性.
1 ironic.conductor.manager.ConductorManager(host, 'ironic.conductor_manager')
Ironic conductor通过oslo.messaging来创建了RPC server,并把ConductorManager注册为RPC的endpoint.
Ironic api通过RPC调用时,就调用到了ConductorManager里对应的方法.
- Manager初始化:在start RPCServer的时候会调用manager的int_host函数.int_host中主要完成如下操作:
①dbapi初始化;
②conductor保活线程
③协程池初始化;
④哈希环初始化;
⑤drivers;
⑥hardware_types;
⑦NetworkInterfaceFactory;
⑧StorageInterfaceFactory(存储).
8.ironic driver
- 驱动初始化:openstack的请求流程是RESTful-api->rpc,在ironic每个RPC请求处理中,一般会创建一个taskmanager的对象,后续的大部分操作都是通过这个对象来完成的.其中最主要的是ironic driver的使用.
1 # file: task_manager.pyclass TaskManager(object): 2 3 def __init__(self, context, node_id, shared=False, driver_name=None, 4 purpose='unspecified action'): 5 6 self.driver = driver_factory.build_driver_for_task( 7 self, driver_name=driver_name)
可以看出task.driver是采用工厂模式初始化的.
初始化task的驱动步骤如下:
①首先根据node里的driver名称加载对应的driver;
②检查并更新node interfaces,(主要是检查驱动的hardware interface有没有设置);
③创建BareDriver对象bare_driver;
④把driver里所有的interface复制到bare_driver中;
这里的interface由以下三部分构成:
-core_interfaces
-standard_interfaces
-vendor
⑤获取node里的dynamic_interfaces并复制到bare_driver中