【ironic】ironic介紹與原理


【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部署流程:

iscsi部署流程

使用IPA部署流程:

IPA部署流程


免責聲明!

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



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