【ironic】ironic介绍与原理

零,配置文件

0.1 配置驱动

文件ironic.conf, ipmi硬件类型,默认值也是ipmi, pxe_ipmitool驱动也是默认值,配置驱动

[DEFAULT]
enabled_hardware_types = ipmi

0.2 注册节点

      需要的配置信息:

@ ipmi_address 必须

@ ipmi_username 可选

@ ipmi_password 可选

@ ipmi_port 可选,默认值623

   命令创建:

    #注册一驱动为pxe_ipmitool的节点,状态变为enroll,指ironic知道了这个节点,但是没有还管理它   

ironic node-create -d pxe_ipmitool -u ${ironic_node_uuid}

#设置driver_info),包括驱动相关配置、部署镜像id

ironic driver-properties pxe_ipmitool

@设置IPMI-BMC

  1.       ironic node-update ${ironic_node_uuid} add driver_info/ipmi_address=${ipmi_address}
  2. ironic node-update ${ironic_node_uuid} add driver_info/ipmi_port=${ipmi_port}
  3. ironic node-update ${ironic_node_uuid} add driver_info/ipmi_username=${ipmi_username}
  4. ironic node-update ${ironic_node_uuid} add driver_info/ipmi_password=${ipmi_password}

@ 设置部署镜像
                         ironic node-update ${ironic_node_uuid} add driver_info/deploy_kernel=${deploy_kernel}
                         ironic node-update ${ironic_node_uuid} add driver_info/deploy_ramdisk=${deploy_ramdisk}

@
设置节点属性(properties

ironic node-update ${ironic_node_uuid} add properties/cpus=10000000

ironic node-update ${ironic_node_uuid} add properties/memory_mb=10000000

ironic node-update ${ironic_node_uuid} add properties/local_gb=10000000
                         ironic node-update ${ironic_node_uuid} add properties/cpu_arch=x86_64
 
                       ironic node-update ${ironic_node_uuid} add
instance_info/root_gb=10000000 # must mark this, for find node
                         ironic node-update ${ironic_node_uuid} add instance_info/capabilities='{"boot_option":"local"}'

          @ 检查驱动接口信息

                 ironic node-validate ${ironic_node_uuid}

一,状态图

TODO 。in-band与out-of-band不太清楚啥东东,先记下!!!
@ ENROLL:ironic知道节点存在,并没有进一步的action,一旦一个节点拥有driver和properties,通过manage
API调用使节点过度到VERIFYING
@ VERIFYING:ironic验证是否可以通过分配的drivers(例如,电源状态管理)和证书管理节点
@ MANAGEABLE:用driver和证书验证通过可以管理节点,电源power off可选的,从MANAGEABLE节点过度到
  • MANAGEABLE(从CLEANING)通过clean API调用
  • MANAGEABLE(从INSPECTING)通过inspect API调用
  • AVAILABLE(从CLEANING)通过provide API调用
@ INSPECTING:根据硬件属性变更来更新硬件属性,来反应当前硬件的状态,失败则过度到INSPECTFAIL
@ CLEANING:清理以准备步入AVAILABLE,正确成功的CLEANING包括任务:
  • 擦除驱动器
  • 固件完整性验证
  • 验证节点传入属性是否与实际硬件配置匹配
  • booting到一个长时间运行的deploy ramdisk
当一个节点为CLEANING状态,意味着节点执行带外清理步骤,或者准备环境(建立PXE配置文件, 配置DHCP等)来boot randisk
@ CLEANWAIT:与CLEANING不同是conductor等待boot ramdisk, 在带内清理步骤,处于CLEANWAIT状态的节点可以被abort
API调用中断
@ AVAILABLE:处于AVAILABLE状态的是已经被清理,重新配置的,准备好的可以用来provisioned,处于AVALIABLE状态节点可以过度:
  • ACTIVE(从DEPLOYING)通过active API调用
  • MANABGEABLE通过manage API调用
@ DEPLOYING:主要包括一系列短任务
  • 设置适当的BIOS配置
  • 驱动器分区,生成文件系统
  • 创建一些子系统需要的附加资源(网络配置等)
@ DEPLOYWAIT:已经DEPLOYED的,不同的是conductor等待boot ramdisk,或执行部分需要带内运行的部署工作(例如:安装bootloader,当没有使用iscsi写image到disk),处于DEPLOYWAIT状态的节点可以被deleted
API调用中断
@ ACTIVE:一句话就是可以正常使用的了!

二,Conceptual Architecture

Logical Architecture

Key Technologies for Bare Metal Hosting

PXE

DHCP

NBP

TFTP: 从DHCP server下载NBP

IPMI

部署流程

  1. 部署物理机的请求通过 Nova API 进入Nova;
  2. Nova
    Scheduler
    根据请求参数中的信息(指定的镜像和硬件模板等)选择合适的物理节点;通过flavor中extra_spec(比如cpu_arch,
    baremetal:deploy_kerner_id, baremmetal:deploy_ramdisk_id)
  3. Nova 创建一个 spawn 任务,并调用 Ironic API 部署物理节点,Ironic 将此次任务中所需要的硬件资源保留,并更新数据库;
  4. Ironic 与 OpenStack 的其他服务交互,从 Glance 服务获取部署物理节点所需的镜像资源,并调用 Neutron 服务为物理机创建网路端口;
  5. Ironic 开始部署物理节点,PXE driver 准备 tftp bootloader,IPMI driver 设置物理机启动模式并将机器上电;
  6. 物理机启动后,通过
    DHCP 获得 Ironic Conductor 的地址并尝试通过 tftp 协议从 Conductor 获取镜像,Conductor
    将部署镜像部署到物理节点上后,通过 iSCSI 协议将物理节点的硬盘暴露出来,随后写入用户镜像,成功部署用户镜像后,物理节点的部署就完成了。

Ironic-Python-Agent

在PXE部署环境中,deploy模块是通过打开一个iSCSI设备,ironic-conductro将OS的镜像文件写到iSCSI的设备,所以deploy_ramdisk只是完成了iSCSI部署的工作,但开发者觉得既然已经把kernel和ramdisk传过去了,只做一个工作是不是太少了,而且还太缺乏灵活性了,所以就想在ramdisk里装一个Python Agent
实际上就是多提供了一个Restful API,控制节点可以通过这个agent远程实现与物理机节点互动,而不仅仅使用dd命令。

Ironic Python
Agent(简称IPA或者agent)是一个基于python的代理,用于处理ironic中裸机节点的一系列动作,比如检查、配置、清除和部署镜像。运行在ramdisk中,暴露出REST
API给conductor。Ironic-Python-Agent可以在deploy模块直接访问硬件,提供以下功能:

  • 磁盘格式化
  • 磁盘分区
  • 安装OS( Bootloaders, OS)
  • 固件升级
  • raid配置

在Condutor端使用agent驱动,物理机端使用IPA,IPA通过暴露API给Condutor调用,则可完成相应功能。IPA启动时通过发送lookup()请求给Condutor获取UUID,相当于注册自己,并且每隔一段时间给Condutor发送心跳包进行连接。

1. 与conductor的交互

IPA使用lookup和hearteat机制与Ironic Conductor进行交互

  1. 启动时agent给Conductor的vendor_passthru lookup endpoint(地址为/v1/drivers/{driver}/vendor_passthru/lookup)发送一个硬件的profile
  2. 然后Ironic就可以得出该节点的uuid,在成功发现该节点之后,agent隔N秒发送心跳包给Conductor(hearteat地址为/v1/nodes/{node_ident}/vendor_passthru/heartbeat )
  3. conductor执行一系列动作,包括查询已经运行的命令的状态,

2. 与ramdisk、agent的关系

IPA是一个运行在ramdisk中python程序,当物理机注册时使用agent为前缀的驱动时,则会使用agent方式部署,即允许包含有IPA的ramdisk。

3. 硬件管理

硬件管理器(HardwareManager)是IPA中的一个概念,IPA通过重写硬件管理器来支持多种硬件平台。通过自定义 hardware
managers 可以允许用户引入特定的硬件工具集、文件和清除步骤等等,比如可以引入 BIOS flashing utility and
BIOS file,然后在cleaning step中重写BIOS版本。

修改硬件的方法按照优先顺序发送给每个管理器,管理器检查是否包含该方法,如果没有则抛出IncompatibleHardwareMethodError异常,IPA继续发送给下一个管理器,直到某个管理器包含该方法并且返回方法的结果,如果所有的管理器都没有改方法则抛出
HardwareManagerMethodNotFound异常。

4. pxe部署与agent部署对比

使用pxe部署流程:

使用IPA部署流程:

【ironic】ironic介绍与原理的更多相关文章

  1. 转载:AbstractQueuedSynchronizer的介绍和原理分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  2. AbstractQueuedSynchronizer的介绍和原理分析(转)

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  3. CGLIB介绍与原理

    转载: http://blog.csdn.net/zghwaicsdn/article/details/50957474 CGLIB介绍与原理(部分节选自网络) 一.什么是CGLIB? CGLIB是一 ...

  4. Servlet过滤器介绍之原理分析

    zhangjunhd 的BLOG     写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...

  5. Hadoop数据管理介绍及原理分析

    Hadoop数据管理介绍及原理分析 最近2014大数据会议正如火如荼的进行着,Hadoop之父Doug Cutting也被邀参加,我有幸听了他的演讲并获得亲笔签名书一本,发现他竟然是左手写字,当然这个 ...

  6. AbstractQueuedSynchronizer的介绍和原理分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  7. SpringBoot系列之日志框架介绍及其原理简介

    SpringBoot系列之日志框架介绍及其原理简介 1.常用日志框架简介 市面上常用日志框架:JUL.JCL.jboss-logging.logback.log4j.log4j2.slf4j.etc. ...

  8. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

  9. nginx介绍及其原理

    nginx介绍及其原理 nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯程序设计师lgor Sy ...

随机推荐

  1. Python自动化测试 (八)unittest 单元测试

    任何一种编程语言, 都会有单元测试框架, 本文介绍Python 自带的unittest模块 # -* - coding: UTF- -* - class Myclass: def sum(self,x ...

  2. Google三驾马车:GFS、MapReduce和Bigtable

    谈到分布式系统,就不得不提Google的三驾马车:Google fs[1],Mapreduce[2],Bigtable[3]. 虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设 ...

  3. iis mime 类型

    application/sqlite3 .db application/octet-stream .MP4 application/vnd.android.package-archive .apk

  4. spring cloud之eureka简介

    最近线上的接口出了一些问题,有一些可能不是代码的问题,但是由于是测试和其他方面的同事爆出来的,所以感觉对接口的监控应该提上日程. 经过搜索发现,spring cloud的eureka就是专门做这方面工 ...

  5. Android自动化测试探索(三)Android SDK tools安装、aapt配置以及使用aapt获取apk包名

    Android SDK tools安装 下载连接: https://www.androiddevtools.cn 找到对应mac的版本下载安装即可 AAPT配置 #1. 进入根目录 cd ~ #2. ...

  6. 简单学习js

    由于是个前端小白,通过这一两天的学习html,css,js和jquery等,基本上前端会用了,而且熟悉我博客的人来说,没错,我把自己的博客给优化了一下(一些大佬都是禁用模板的所有样式,然后自己设计页面 ...

  7. 【记录】Field required a single bean, but 2 were found:

    重构遇到个小问题,记录下: 错误信息: *************************** APPLICATION FAILED TO START ************************ ...

  8. JWT的入门案例

    1.什么是JWT? JWT全称JSON Web Token.是为了在网络应用环境键传递声明而执行的一种基于JSON的开放标准. 2.JWT的使用场景? 授权:一旦用户登录,每个后续请求将包括JWT,允 ...

  9. leetcode的Hot100系列--461. 汉明距离

    求两个数的二进制位不同的位置,最先想到的就是异或操作, 异或:按位运算,相同为0,不同为1. 比如: a = 6 对应的二进制表示为: 0 0 1 1 1 ​ b = 9 对应的二进制表示为: 0 1 ...

  10. JDK1.8集合之HashMap

    目录 简介 内部实现 类的属性 Node数组 重要方法 put()和putVal()方法 get()和getNode()方法 resize()方法 容量设置为2的幂的优点 计算Hash时候 扩容时候 ...