+openstack+ironic学习笔记day2

题目: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中

 

 

原文地址:https://www.cnblogs.com/mowangshiyiyi316/p/9291231.html