from nova to ironic(3)

OpenStack Ironic实现裸机部署 实习将近一个月了,期间不断努力,终于算是把OpenStack Ironic项目实现裸机部署的过程理解了一遍,并在小规模集群上成功实践。整理一些这段时间工作的内容,就算是一个阶段性的小项目总结了。 Ironic Ironic是OpenStack的一个子项目,用于实现在云里像管理虚拟机一样管理裸机。 Ironic在OpenStack中的概念架构图如下 其中Bare Metal就是我们要控制... 阅读详情

之前写了两篇从nova到ironic是如何调用的文章,只是大概的架子。这两年看openstack的源码也看了不少,看到后来觉得大同小异,之前的积累现在看起来因为没有具体项目带动也比较零散,东一点儿西一点儿,现在从ironic进来反而觉得都很清晰起来,因此想把之前写的完全搬到网上来总觉得不和谐,我决定还是从细节入手按照之前的风格,把这两年

的积累归零,换个思路来(Juno,之前是icehouse,还是很多相似的)。

这个人写的比我好:

http://bingotree.cn/?p=193


我也稍微捋一捋:

一样的,作为一个python项目,nova也有entry_points,和ironic一样,在做egg之前就写在setup.cfg中,通过stevedore在初始化时,将entry_points和类

的对应关系load进来。

在nova.cmd下面是nova启服务的地方,nova作为openstack中最初也是最复杂的一块,一切都源于nova,因此cmd包下面的启动的服务很多,不像ironic只有api,conductor,dbsync,nova有api,compute,cert,cells,console,scheduler等等,很多,但是也就是两种类型,和ironic一样,一种是WSGI的service,对外接收

rest请求,另一种是RPC service,接收RPC call进行处理或者转发,分别来看一看:

WSGI service:

在nova.cmd下以api开头的,比如api.py, api_ec2.py,api_os_comput.py以及api_metadata.py都属于WSGI的service,这里以api.py为例,

 config.parse_args(sys.argv)  #根据传入的参数做一些default的设置,log,debug,rpc等,初始化一个全局的CONF manager, notifier比较有意思,确定不同的message

写到不同的地方,log,test,routing等等

 logging.setup("nova") #log设置,基本不会变动,包装logging
 utils.monkey_patch()#运行时动态修改code,python有很多这样的黑魔法,前面提到的metaclass也是一种,其实,个人觉得不一样非要这样。。。

notify_decorator = 'nova.notifications.notify_decorator'

monkey_patch_opts = [
    cfg.BoolOpt('monkey_patch',
                default=False,
                help='Whether to log monkey patching'),
    cfg.ListOpt('monkey_patch_modules',
                default=[
                  'nova.api.ec2.cloud:%s' % (notify_decorator),
                  'nova.compute.api:%s' % (notify_decorator)
                  ],
                help='List of modules/decorators to monkey patch'),
]

调用utils.monkey_patch时,我们在方法中可以看到,实际上只是给monkey_patch_modules中的方法加上了notify_decorator而已


 objects.register_all()#将objects包中的类load起来

 gmr.TextGuruMeditation.setup_autorun(version)  #通过发送一个USER1的信号量,进程捕获后会返回对应的信息


cfg.ListOpt('enabled_apis',
                default=['ec2', 'osapi_compute', 'metadata'],
                help='A list of APIs to enable by default'),

针对enabled_apis启动WSGI服务,初始化self.manager的时候只有MetadataManager,没有ec2 manager或者 osapi_compute manager

        self.loader = loader or wsgi.Loader()
        self.app = self.loader.load_app(name)

分别解析paste-api.ini并取得接收rest的入口

接着launcher.launch_service(server, workers=server.workers or 1)就涉及到core的内容,包括协程使用等等,最后调用WSGIService的start方法,

可以看出如果前面提到的self.manager存在的话会做一些pre hook和post hook

有一段话引用的文章中说的很好,我mark一下,对于理解Openstack的service很有好处:

“

openstack中使用协程和普通的多线程模型下的HTTP server有一个很大的不同:普通的HTTP server在启动的时候只有一个线程在那里监听一个端口,来了一个请求才会fork一个线程去做独立的处理(也就是说如果请求很多的话,线程个数也会很多)。但这里由于使用了eventlet的绿化(本质就是协程,可以看这里),因此对于协程来说,一个协程只能运行在一个CPU核上,并且不存在来个请求就fork这种东西,所以这里会根据CPU的核的个数去建立对应的协程(worker)。当一个请求来了过后呢其就会交给某一个协程去处理。不管请求个数多少,协程的个数是固定的。协程在HTTP server方面的效率是很高的。

”


RPC service或者说内部service,举nova-compute service为例:

http://bingotree.cn/?p=289这一篇也不错,很细,可参考


在nova.cmd.compute.py中,首先

CONF.import_opt('compute_topic', 'nova.compute.rpcapi')
CONF.import_opt('use_local', 'nova.conductor.api', group='conductor')

分别从nova.compute.rpcapi和nova.conductor.api中引入compute_topic='compute', 'use_local'=false


if not CONF.conductor.use_local:
        block_db_access()                          #nova.db.api.IMPL = NoDB(),在NoDB中实现__call__方法,在compute service中调用数据库会报错
        objects_base.NovaObject.indirection_api = conductor_rpcapi.ConductorAPI() #在ironic中也提到indirection_api,不过ironic中并没有真正使用,而在nova中,

Objects的基类NovaObject的元数据类中有此属性,也就是创建nova中的objects时会用到该属性,而我们看到很多object的方法会加@base.remotable或者@base.remotable_classmethod,则会将方法变成rpc call(可以跟踪conductor_rpcapi.ConductorAPI()的调用过程,会发现最后走到nova.conductor.manager.py中的

_object_dispatch方法)


server = service.Service.create(binary='nova-compute',
                                    topic=CONF.compute_topic,
                                    db_allowed=CONF.conductor.use_local)

topic为compute,manager为nova.compute.manager.ComputeManage, db_allowed 为false

cfg.StrOpt('compute_manager',
               default='nova.compute.manager.ComputeManager',
               help='Full class name for the Manager for compute'),

在nova.compute.manager.ComputeManager的__init__方法中:

        self.virtapi = ComputeVirtAPI(self)
        self.network_api = network.API()
        self.volume_api = volume.API()
        self.image_api = image.API()
        self._last_host_check = 0
        self._last_bw_usage_poll = 0
        self._bw_usage_supported = True
        self._last_bw_usage_cell_update = 0
        self.compute_api = compute.API()
        self.compute_rpcapi = compute_rpcapi.ComputeAPI()
        self.conductor_api = conductor.API()
        self.compute_task_api = conductor.ComputeTaskAPI()
        self.is_neutron_security_groups = (
            openstack_driver.is_neutron_security_groups())
        self.consoleauth_rpcapi = consoleauth.rpcapi.ConsoleAuthAPI()
        self.cells_rpcapi = cells_rpcapi.CellsAPI()
        self.scheduler_rpcapi = scheduler_rpcapi.SchedulerAPI()
        self._resource_tracker_dict = {}
        self.instance_events = InstanceEvents()
        self._sync_power_pool = eventlet.GreenPool()
        self._syncs_in_progress = {}

建立调用的入口关系,如virtapi的入口为ComputeVirtAPI,调用其self.virtapi的方法时就知道调用的是谁了

Service.serve(server)调用service的start方法,start方法中重要的几个点为:


 self.manager.init_host()#首先调用driver的init_host,默认的是LibVirt Driver,check运行环境是否为qemu或者kvm,DB和当前实际情况

的比较,比如当前host的虚机是否仍然存在等,涉及到hypervisor的信息暂时不是我的方向或者重点,不再继续追进。

 self.manager.pre_start_hook()#追进去内容很多且比较底层,主要就是主动调用一个周期性的任务,将虚拟机和物理机的相关性能信息写入nova的数据库。

并且如果是新上线的物理机节点,则会注册相关信息到数据库中(内存,cpu,disk等)。

 endpoints = [
            self.manager,
            baserpc.BaseRPCAPI(self.manager.service_name, self.backdoor_port)
        ]
endpoints.extend(self.manager.additional_endpoints)
serializer = objects_base.NovaObjectSerializer()
self.rpcserver = rpc.get_server(target, endpoints, serializer)  #RPC调用会调用endpoints中的方法, ComputeManager中的addtional_endpoints为空,但是

ConductorManager中的不为空


还有conductor,scheduler等服务,如何启动也是上面两种情况,以后温习具体的点时再记录下来。

ironic部署 ironic部署过程 通过nova boot启动一个实例,nova api将请求通过消息队列发送nova scheduler nova scheduler应用过滤器找到一个合适的计算节点,nova scheduler使用额外参数匹配一个物理节点,例如‘cpu_arch’, ‘baremetal:deploy_kernel_id’, baremetal:deploy_ramdisk_id’ nova 阅读详情

相关推荐

手动集成 Ironic 裸金属管理服务(Rocky)

目录 文章目录目录前文列表横向扩展裸金属管理服务节点配置基础设施安装 Ironic(BareMetal)安装 Nova Compute(BareMetal)配置 Neutron 提供 Provisioning Network配置 Networking-baremetal ML2 mechanism driver(Controller)配置 Open vSwitch Agent(BareMetal)...

烟云的计算 5411

Tripleo之nova-compute 和Ironic的代码深入分析(五)

声明: 本博客欢迎转载,但请保留原作者信息! 作者:姜飞 团队:华为杭州OpenStack团队 物理单板在PXE的init启动时候,deploy-ironic发送了一个POST v1/nodes/{node-id}/vendor_passthru/pass_deploy_info请求到ironic-api,数据data是: DATA='{"address"

Hcloud 2326

Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式

本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。

weixin_30329623的博客 546

【ironic 源码分析】manager 源码分析

1. 文件 conductor/manager.py       执行命令 ironic node-create -d pxe_ipmitool -u ${ironic_node_uuid}       类ConductorManager中create_node传入的参数可以得出:只有uuid, driver, provision_state有值 boot_interface=,chassi

zhonglinzhang 6100

Keil MDK下载报错:Flash Download failed终极解决指南(附固件恢复步骤)

本文针对Keil MDK开发中常见的“Error: Flash Download failed”报错,提供了从基础连接到深度诊断的系统性解决指南。文章详细解析了错误成因,并重点介绍了当常规SWD调试失效时,如何通过Bootloader模式和ISP模式(特别是UART Bootloader)恢复“变砖”芯片的完整实战步骤,帮助开发者彻底解决固件下载难题。

weixin_29196613的博客 816

手把手教你用TL431设计反激电源补偿器(附波特图调试技巧)

本文详细介绍了如何使用TL431设计反激电源补偿器,并提供了波特图调试技巧。通过实战经验分享,帮助工程师快速掌握补偿网络设计、分压电阻计算和稳定性判据,避免常见设计误区,提升电源稳定性与效率。

weixin_29201859的博客 378

理解裸机部署过程ironic

部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样。虚拟机的底层驱动采用的libvirt的虚拟化技术,而物理机是采用Ironic技术,ironic可以看成一组Hypervisor API的集合,其功能与libvirt类似。 操作系统安装过程 Linux系统启动过程 bootl...

weixin_30813225的博客 1157

Verilog实现FIR滤波器

1、FIR滤波器简介 不追究FIR滤波器的深层含义,我们只关注如何实现;可以看出,FIR滤波器的本质就是延迟、系数相乘与求和,如下图: 2、设计 基于以上分析,按照三级流水实现FIR滤波器设计:信号延迟-系数相乘-求和 `timescale 1ns / 1ps module fir( input clk, input rst_n, input [3:0]din, output reg [9:0]dout ); // data reg reg [3:0]din1; reg [3:.

CLL_caicai的博客 1万+

基于openstack stable queens版本阅读解析

  基于openstack stable queens版本阅读解析    基于 centos7.5 的linux系统    架构    如下所示,为cinder的官方架构说明:    这里写图片描述    各个组件介绍如下:    - DB: sql database for data storage. Used by all components.    - Web Dashboard: pot...

weixin_34250434的博客 296

SAP FICO 中的 F-02 :概念、使用场景及案例解析

在 SAP FICO (财务会计与管理会计) 模块中,F-02 是一个用于录入总账凭证的事务代码。这个事务代码主要用于手动输入总账凭证,适用于各类财务交易,例如资产购入、费用支付、收入确认等。F-02 的重要性在于,它允许财务人员在 SAP 系统中创建凭证,并确保这些凭证能够正确影响总账账户。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2060

骑砍Ⅱ霸主MOD开发(5)-2D界面

本文介绍了2D界面开发的技术框架,主要包括以下内容: 2D界面架构:由多个GauntletLayer(菜单/对话框/定制页面)和SceneLayer(3D页面)组成,支持屏幕切换和管理。 GauntletLayer实现:采用Movie(HTML页面)+ViewModel(动态数据)模式,支持优先级管理、焦点控制和事件响应。 2D控件系统:包括颜色字体、坐标布局、背景图(Sprite/Texture)等配置方式,支持自定义控件开发。 定制化页面开发:详细说明了游戏菜单和对话框的实现方法,包括状态管理、事件回调

骑砍战团&霸主MOD开发 1183

from nova ironic to horizon(3)

改动horizon,要增加自己的处理模块,同时又不在openstack_dashboard.api下的模块时,在api package下添加自己的module,可能会报错:   File "/home/ding/horizon/openstack_dashboard/api/__init__.py", line 34, in     from openstack_dashboard.ap

dingdingwolf的专栏 775

【网络安全 | 渗透工具】密码字典生成工具crunch、cupp安装使用教程

Crunch是一个常用的密码破解工具,它可以根据指定的字符集、长度和模式生成各种可能的密码并进行暴力破解。同时,Crunch可以将生成的密码保存到文件中,以便在破解工具中使用。在进行渗透测试时,手动收集密码字典是十分耗时的,利用密码字典生成工具可以大幅缩短时间,提高爆破宽度。

等风来 8422

Openstack Ironic简介

Openstack 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Ironic的作用什么,虚机与裸金属的差别在哪?二、概念1.组件关系图2.具体含义3.裸金属正常工作需要的组件4.逻辑架构 前言 提示: OpenStack是一个开源云计算平台项目,旨在为公共及私有云的建设与管理提供软件的开源实现。当前OpenStack支持VM和BM(Bare-Metal 裸金属服务器)两种上线方式,这里主要说第二种。 一、Ironic的作用什么,虚机与裸金属的差别在哪? Iron

nb_zsy的博客 7811

SIMULINK开发项目实例 1000 例专栏之第960例--基于电力系统稳定性的建模与仿真场景:-含分布式电源的配电网电压稳定性研究

间歇性与随机性:例如,太阳能依赖于日照强度,风能依赖于风速,这使得它们的输出功率具有不确定性。逆变器接口:大多数分布式电源通过逆变器接入电网,这对电网的动态响应特性产生了影响。位置分散:通常分布在用户侧或靠近负荷中心的位置。本文详细介绍了如何使用Simulink结合Simscape Electrical 构建一个用于研究含分布式电源配电网电压稳定性的模型,并提供了详细的仿真流程说明。

xiaoheshang_123的博客 153

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OpenStack-Ironic裸机部署安装

一,Ironic简述 简而言之,OpenStackIronic就是一个进行裸机部署安装的项目。 所谓裸机,就是指没有配置操作系统的计算机。从裸机到应用还需要进行以下操作: (1)硬盘RAID、分区和格式化; (2)安装操作系统、驱动程序; (3)安装应用程序。 Ironic实现的功能,就是可以很方便的对指定的一台或多台裸机,执行以上一系列的操作。例如部署大数据群集需要同时部署多台物理机,就可以使...

zyfnuaa的专栏 1775

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

from nova to ironic(6)

在ironic的配置文档里,我们需要配置nova,这样可以provision一个physical的HW就像provision一个虚机一样,nova中做ironic的配置为: [default] compute_driver=nova.virt.ironic.IronicDriver firewall_driver=nova.virt.firewall.NoopFirewallDriver s

dingdingwolf的专栏 635

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

云计算-Ironic概念

Ironic结合多个驱动提供一套hypervisor API来操作物理机,类似提供一个hypervisor驱动来供Nova使用。 简介: 简而言之,OpenStackIronic就是一个进行裸机部署安装的项目。 所谓裸机,就是指没有配置操作系统的计算机。从裸机到应用还需要进行以下操作: (1)硬盘RAID、分区和格式化; (2)安装操作系统、驱动程序; (3...

CodeAsWind 1963

from nova to ironic(7)

前面说到ironic配置中和nova打交道的地方在哪里,从nova create一个hardware的instance其实改动的只是nova的几个manager和driver而已,在scheduler进行 filter的时候,从DB的ComputeNode中拿出信息就可以知道当前使用的是什么类型的hypervisor, cpu info 等,那么这些信息是怎么进到ComputeNode中的呢,不

dingdingwolf的专栏 384

Centos-openstack-Rocky-ironic部署

Ironic基础环境配置 创建数据库 mysql -u root -p CREATE DATABASE ironic CHARACTER SET utf8; GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON ironic.* TO...

wen328的博客 1722

OpenStack Ironic 深度指南

OpenStack Ironic 是一个管理裸金属服务器(不运行虚拟化层)的服务。它允许用户通过云接口来部署操作系统到物理硬件上,支持自动化配置网络、存储以及其它必要的驱动程序。Ironic 提供了一种可扩展的方法来处理各种类型的硬件,使得云环境中的裸金属资源能够像虚拟机一样被管理和分配。 ## 2. 项目快速启动 ### 安装依赖 首先,确保你的系统满足基本的 OpenStack 软件包要

gitblog_00478的博客 1382

六、安装Nova服务【VMware虚拟机搭建Openstack+Ironic】

openstack nova安装

weixin_41809577的博客 653

OpenStack-Ironic裸金属简介

一,Ironic简述 简而言之,OpenStack Ironic就是一个进行裸机部署安装的项目。 所谓裸机,就是指没有配置操作系统的计算机。从裸机到应用还需要进行以下操作: (1)硬盘RAID、分区和格式化; (2)安装操作系统、驱动程序; (3)安装应用程序。 Ironic实现的功能,就是可以很方便的对指定的一台或多台裸机,执行以上一系列的操作。例如部署大数据群集需要同时部署多台物理机,就可以使用Ironic来实现。 Ironic可以实现硬件基础设施资源的快速交付。 二,Why Provision Ba

AiFool的博客 1036

安装与配置ironic

安装及配置 由于Ironic的配置很长,下面我们简短的说一下安装和配置过程,具体的安装配置教程参考官方手动配置教程或者使用devstack安装。 Ironic需要与Nova、Neutron、Glance、Keystone等进行交互,于是先要对这些进行配置。 1.配置KeyStone 首先我们需要在keystone中创建ironic用户、服务、endpoint信息。 keystone us...

迷失的专栏 1465
上一篇: a new client --- using httpclient or curl or requests
下一篇: from nova to ironic(4)
dingdingwolf
博客等级 码龄16年 7粉丝 94原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值