安裝及配置
由於Ironic的配置很長,下面我們簡短的說一下安裝和配置過程,具體的安裝配置教程參考官方手動配置教程或者使用devstack安裝。
Ironic需要與Nova、Neutron、Glance、Keystone等進行交互,於是先要對這些進行配置。
1.配置KeyStone
首先我們需要在keystone中創建ironic用戶、服務、endpoint信息。
- keystone user-create
- keystone user-add-role
- keystone servcie-create
- keystone endpoint-create
2.配置ironic
- 安裝MySQL,創建ironic數據庫,並授權給ironic用戶
- 安裝ironic基礎組件,ironic-api、ironic-condutor、python-ironicclient
- 配置/etc/ironic/ironic.conf,設置DB、keystone、Nova、Neutron、Glance、RabbitMQ等地址、用戶名、密碼等相關信息
- 重啟ironic-api、ironic-condutor服務
3.配置Nova
配置nova controller和computer節點/etc/nova/nova.conf,將ironic設置Nova的驅動,比如:
[DEFAULT]
scheduler_host_manager = nova.scheduler.ironic_host_manager.IronicHostManager
compute_driver = nova.virt.ironic.driver.IronicDriver
compute_manager = ironic.nova.compute.manager.ClusteredComputeManager
[ironic]
admin_username = ironic
admin_password = unset
admin_url = http://127.0.0.1:35357/v2.0
admin_tenant_name = service
然后重啟nova-computer和 nova-scheduler服務。
4.配置Neutorn
為了裸機能夠和neutron通信,需要增加虛擬網絡設置,以便裸機能夠獲取DHCP、PXE boot等服務。同時需要提供每個裸機的MAC地址給ironic,然后ironic將信息發送給neutron來給節點獲取DHCP、PXE boot配置等信息。
- 在/etc/neutron/plugins/ml2/ml2_conf.ini中配置網絡模式、防火牆驅動、橋接映射等
- 將配置加入到虛擬網絡中,
ovs-vsctl add-br br-int
- 重啟Open vSwitch agent,
service neutron-plugin-openvswitch-agent restart
- 創建網格和子網
- 在ironic-Condutor節點上配置cleaning_network_uuid,用於Node Clear(將節點回收之前的動作) (/etc/ironic/ironic.conf,
cleaning_network_uuid = NETWORK_UUID
) - 重啟ironic-Condutor服務
5.配置Glance
部署裸機過程中需要兩套鏡像:deploy image 和user image,deploy image負責進行部署過程,包括獲取user image、硬件管理、清除部署等等動作;user image是用戶使用的系統鏡像。
- 生成部署鏡像(deploy image)和用戶鏡像(user image)
- 將部署鏡像和用戶鏡像加入到Glance中
6.創建flavor
在Nova-computer節點創建裸機的flavor,指定RAM_MB、CPU、DISK_GB、ARCH等信息。
7.配置驅動的相關環境
不同驅動需要一些不同的環境,需要在Ironic-Condutor安裝和配置與這些驅動的環境
PXE
如果使用PXE環境啟動,那么要配置PXE環境,包括DHCP、TFTP服務,由於DHCP服務在Neutron中配置了,所以還需要在ironic-Condutor配置TFTP服務,具體步驟見PXE setup
PXE UEFI
新型UEFI,全稱“統一的可擴展固件接口”(Unified Extensible Firmware Interface), 是一種詳細描述類型接口的標准。這種接口用於操作系統自動從預啟動的操作環境,加載到一種操作系統上,其主要目的是為了提供一組在 OS 加載之前(啟動前)在所有平台上一致的、正確指定的啟動服務,被看做是有近20多年歷史的 BIOS 的繼任者。
如果想部署一台使用UEFI的物理機,則需要配置PXE環境和UEFI環境,具體步驟見PXE-UEFI
iPXE
是一種PXE的替代版,與PXE相比能做更多的事,從J版引入,需要在/etc/ironic/ironic.conf中開啟服務,同時需要在neutron中的DHCP Agent中更新相關配置(/etc/neutron/dhcp_agent.ini,dnsmasq_config_file = /etc/dnsmasq-ironic.conf
)並重啟DHCP Agent。 以下是iPXE的特性。
boot from a web server via HTTP
boot from an iSCSI SAN
boot from a Fibre Channel SAN via FCoE
boot from an AoE SAN
boot from a wireless network
boot from a wide-area network
boot from an Infiniband network
control the boot process with a script
IPMI
ipmitool可實現遠程開關機、顯示系統日志、獲取傳感器信息等操作,一般系統里自帶,如果系統使用的是openipmi代替ipmitool的話則不可以使用IPMITool Driver,比如一些Mac OS X和SLES系統。
IPMITool Driver和IPMICommand必須裝在Ironic-Condutor節點上,同時能夠連接到IPMI Controller(BMC,有獨立的IP)上,從K版開始,支持傳輸傳感器數據(硬件溫度、風扇、電壓、電流),但是默認關閉,要在irnic.conf中開啟。
支持傳輸傳感器數據的驅動有pxe_ipmitool, pxe_ipminative, agent_ipmitool, agent_pyghmi, agent_ilo, iscsi_ilo, pxe_ilo,pxe_irmc。
boot model
節點的啟動模式(Legacy BIOS or UEFI)可以設置,默認使用BIOS,但是一個節點只能設置一種啟動方式。如果需要設置的話,需要在ironic服務中指定
ironic node-update <node-uuid> add properties/capabilities='boot_mode:uefi'
然后在Nova-Computer節點上更新
nova flavor-key ironic-test-3 set capabilities:boot_mode="uefi"
nova boot --flavor ironic-test-3 --image test-image instance-1
支持設置啟動模式的驅動有xe_ipmitool。
local boot
從K版以后支持部署階段完成后使用本地啟動,即部署階段完成后進入用戶系統的過程從物理機本地啟動,而不使用PXE啟動。設置本地啟動需要在節點信息中加入本地啟動的信息,鏡像內需要安裝grab2。
#1.不需要nova-computer節點
ironic node-update <node-uuid> add instance_info/capabilities='{"boot_option": "local"}'
#2.或者需要nova-computer節點
ironic node-update <node-uuid> add properties/capabilities="boot_option:local"
nova flavor-key baremetal set capabilities:boot_option="local"
8.注冊裸機
下面以Liberty版本的API來說明,驅動為pxe_ipmitool。
1.在Ironic-Condutor節點創建一個裸機節點(node),指定驅動
#注冊一個驅動為pxe_ipmitool的節點, 在Liberty版本(API版本1.1以上)節點狀態變為enroll,指ironic知道了這個節點,但是沒有還管理它
ironic --ironic-api-version 1.11 node-create -d pxe_ipmitool -n post11
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
| driver_info | {} |
| extra | {} |
| driver | pxe_ipmitool |
| chassis_uuid | |
| properties | {} |
| name | post11 |
+--------------+--------------------------------------+
ironic --ironic-api-version 1.11 node-list
+--------------------------------------+--------+---------------+-------------+--------------------+-------------+
| UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance |
+--------------------------------------+--------+---------------+-------------+--------------------+-------------+
| 0eb013bb-1e4b-4f4c-94b5-2e7468242611 | post11 | None | None | enroll | False |
+--------------------------------------+--------+---------------+-------------+--------------------+-------------+
2.設置driver參數(driver_info),包括驅動相關配置、部署鏡像id
ironic driver-properties pxe_ipmitool
+----------------------+---------------------------------------------------------------------------+
| Property | Description |
+----------------------+---------------------------------------------------------------------------+
| ipmi_address | IP address or hostname of the node. Required. |
| ipmi_password | password. Optional. |
| ipmi_username | username; default is NULL user. Optional. |
| ... | ... |
| deploy_kernel | UUID (from Glance) of the deployment kernel. Required. |
| deploy_ramdisk | UUID (from Glance) of the ramdisk that is mounted at boot time. Required. |
+----------------------+----------------------------------------------------------------------------+
# 設置IPMI BMC
ironic node-update $NODE_UUID add \
driver_info/ipmi_username=$USER \
driver_info/ipmi_password=$PASS \
driver_info/ipmi_address=$ADDRESS
#設置部署鏡像
ironic node-update $NODE_UUID add \
driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID \
driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
3.設置節點屬性(properties)
#設置flavor,要與之前創建的匹配
ironic node-update $NODE_UUID add \
properties/cpus=$CPU \
properties/memory_mb=$RAM_MB \
properties/local_gb=$DISK_GB \
properties/cpu_arch=$ARCH
#設置過濾條件,可選
ironic node-update $NODE_UUID add \
properties/capabilities=key1:val1,key2:val2
4.設置MAC地址
ironic port-create -n $NODE_UUID -a $MAC_ADDRESS
5.檢查驅動接口信息
ironic node-validate $NODE_UUID
+------------+--------+--------+
| Interface | Result | Reason |
+------------+--------+--------+
| console | True | |
| deploy | True | |
| management | True | |
| power | True | |
+------------+--------+--------+
6.執行manage操作,更改狀態enroll -> manageable
manage過程中節點狀態為verifying,檢查成功后,物理機的變為manageable,指物理機擁有足夠的信息來管理硬件,但是還不是provisioning的狀態,provisioning的狀態是available。
ironic --ironic-api-version 1.11 node-set-provision-state $NODE_UUID manage
ironic node-show $NODE_UUID
+------------------------+--------------------------------------------------------------------+
| Property | Value |
+------------------------+--------------------------------------------------------------------+
| ... | ... |
| provision_state | manageable | <- verify correct state
| uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
| ... | ... |
+------------------------+--------------------------------------------------------------------+
7.執行provide操作,更改狀態manageable -> available
provide是清理節點上的ramdisk等,將節點變為能夠重新部署的狀態,如果設置了node Clean操作,則會進行指定的步驟進行節點清理。
ironic --ironic-api-version 1.11 node-set-provision-state $NODE_UUID provide
ironic node-show $NODE_UUID
+------------------------+--------------------------------------------------------------------+
| Property | Value |
+------------------------+--------------------------------------------------------------------+
| ... | ... |
| provision_state | available | < - verify correct state
| uuid | 0eb013bb-1e4b-4f4c-94b5-2e7468242611 |
| ... | ... |
+------------------------+--------------------------------------------------------------------+
節點狀態變成available之后就可以被調度了。
結合狀態裝換圖來理解