zoukankan      html  css  js  c++  java
  • +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中

     

     

  • 相关阅读:
    2021年gitbook的安装报错,一次解决方案!
    配置docker看我一篇就够了----Windows10上Hyper-V 或者 WSL2配置Docker+Vscode完整配置
    React.JS详细分析token存储以及提取的方法,其中涉及技术(localStorage、react-cookies、immutable、JSON)
    GO语言: 双单链表、队列、进出栈打造一个简易的数据结构库 以及测试你的程序是否存在BUG!
    Redis管道操作
    Jedis连接池操作
    java连接Redis存储对象或值,用byte[]、String两种方式
    template标签配合vue用法
    linux系统中ssh免密登录
    linux系统scp、rsync拷贝操作命令使用
  • 原文地址:https://www.cnblogs.com/mowangshiyiyi316/p/9291231.html
Copyright © 2011-2022 走看看