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