+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中

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM