基於OpenStack官網指導,結合實際應用,予以總結。
整體結構:
(一)啓用drivers和硬件類型
1,介紹
裸金屬服務將實際的硬件管理委派給drivers來實現。從Ocata版本開始,支持兩種類型的驅動程序:經典驅動程序(例如pxe ipmitool、agent ilo等)和較新的硬件類型(例如,通用redfish和ipmi或特定於供應商的ilo和irmc)。
驅動程序依次由hardware interfaces組成:以特定於供應商的方式處理裸金屬供應的某些方面的功能集。傳統的驅動程序(Classic drivers)有所有hardware interfaces的硬編碼,而硬件類型(hardware types)只聲明它們兼容的硬件接口(hardware interfaces)。
從API用戶的角度來看,經典驅動程序(classic drivers)和硬件類型(hardware types)都可以分配給節點的驅動(driver)字段。但是,它們的配置方式不同。
2,啓用硬件類型
可以在ironic-conductor服務的配置文件中,通過設置 enabled_hardware_types配置選項,啓用Hardware types。例如:
[DEFAULT]
enabled_hardware_types = ipmi,redfish
由於驅動程序的動態特性,它們還需要配置啓用的硬件接口。
注意:
啓用硬件接口
有多種硬件接口:
boot
console
deploy
inspect
management
network
power
raid
storage
vendor
多個conductor可以分別配置各自的硬件接口類型(可以相同/可以不同/可以配置多個)
當沒有提供明確的接口類型是,可以使用默認值,
[DEFAULT]
default_deploy_interface = direct
default_network_interface = neutron
傳統驅動的啓動,是在 ironic-conductor服務的配置文件中設置配置項 enabled_drivers ,例如:
[DEFAULT]
enabled_drivers = pxe_ipmitool,pxe_ilo,pxe_drac
這些以逗號分隔的列表中的名字,是drivers的入口名,它們需要在 conductor 服務運行起來之前就可用,而且所有依賴必須在本地安裝,例如:
(二)配置PXE和iPXE
1,PXE設置
如果您將使用PXE,它需要在ironic-conductor運行的裸金屬服務節點上設置。
1),確保tftp根目錄存在,並且可以由運行ironic-conductor的用戶(ironic)執行寫入操作。例如:
sudo mkdir -p /tftpboot
sudo chown -R ironic /tftpboot
2),安裝tftp服務和syslinux包
Fedora 21/RHEL7/CentOS7:
sudo yum install tftp-server syslinux-tftpboot xinetd
3),使用xinetd提供tftp服務,創建/編輯/etc/xinetd.d/tftp,如下:
service tftp{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -v -v -v -v -v --map-file /tftpboot/map-file /tftpboot
disable = no
# This is a workaround for Fedora, where TFTP will listen only on
# IPv6 endpoint, if IPv4 flag is not used.
flags = IPv4}
然後重啓xinetd服務,
Fedora/RHEL7/CentOS7/SUSE:
sudo systemctl restart xinetd
4),複製PXE到/tftpboot,
RHEL7/CentOS7/SUSE:
sudo cp /usr/share/syslinux/pxelinux.0 /tftpboot
5),如果whole磁盤鏡像需要通過PXE-netboot進行部署,則需要複製 chain.c32到/tftpboot
RHEL7/CentOS7/SUSE:
sudo cp /usr/share/syslinux/chain.c32 /tftpboot/
6),如果syslinux 版本大於4,還需要確保複製庫模塊文件到/tftpboot
sudo cp /usr/lib/syslinux/modules/*/ldlinux.* /tftpboot
7),在tftp的boot目錄/tftpboot,創建一個map文件
echo 're ^(/tftpboot/) /tftpboot/\2' > /tftpboot/map-file
echo 're ^/tftpboot/ /tftpboot/' >> /tftpboot/map-file
echo 're ^(^/) /tftpboot/\1' >> /tftpboot/map-file
echo 're ^([^/]) /tftpboot/\1' >> /tftpboot/map-file
如果想要部署支持UEFI的裸金屬,在ironic conductor節點上執行這些附加步驟,以配置PXE UEFI環境。
1),安裝Grub2和shim包
Fedora 21/RHEL7/CentOS7:
sudo yum install grub2-efi shim
2),複製grub和shim引導加載器鏡像到/tftpboot目錄
RHEL7/CentOS7:
sudo cp /boot/efi/EFI/centos/shim.efi /tftpboot/bootx64.efisudo cp /boot/efi/EFI/centos/grubx64.efi /tftpboot/grubx64.efi
3),創建 grub.cfg:
RHEL7/CentOS7: Create grub.cfg under /tftpboot/EFI/centos
directory:
GRUB_DIR=/tftpboot/EFI/centos
這個文件用於將grub重定向到baremetal節點指定的配置文件。基於分配給baremetal節點的DHCP IP,將其重定向到特定的grub配置文件。
set default=master
set timeout=5
set hidden_timeout_quiet=false
menuentry "master" {
configfile /tftpboot/$net_default_ip.conf
}
修改 grub.cfg權限:
sudo chmod 644 $GRUB_DIR/grub.cfg
4),使用節點屬性中的boot_mode字段更新裸金屬節點
ironic node-update <node-uuid> add properties/capabilities='boot_mode:uefi'
5),確保裸金屬節點配置的啓動模式爲UEFI下啓動,引導設備需要設置爲網絡pxe
pxe_ilo 驅動支持在裸金屬節點上自動設置UEFI引導啓動、自動配置引導方式,因此這一步在pxe_ilo 驅動 下是不需要的。
可以由一個conductor部署不同架構的服務器。要使用這個特性,需要在裸金屬服務配置文件 (/etc/ironic/ironic.conf)中,分別使用 [pxe]pxe_bootfile_name_by_arch
and [pxe]pxe_config_template_by_arch
來配置特定系統結構引導方法和模板文件,
這兩個選項是字典值(數據結構);key是架構,value是引導(或配置模板)文件。
節點的 cpu_arch屬性被用作獲取合適的引導文件和模板文件的key值,如果 cpu_arch不在字典中,配置文件選項將會使用 pxe_bootfile_name
, pxe_config_template
, uefi_pxe_bootfile_name
和 uefi_pxe_config_template
替代(在[pxe]配置段中)。
[pxe]
# Bootfile DHCP parameter. (string value)
pxe_bootfile_name=pxelinux.0
# On ironic-conductor node, template file for PXE
# configuration. (string value)
pxe_config_template = $pybasedir/drivers/modules/pxe_config.template
# Bootfile DHCP parameter for UEFI boot mode. (string value)
uefi_pxe_bootfile_name=bootx64.efi
# On ironic-conductor node, template file for PXE
# configuration for UEFI boot loader. (string value)
uefi_pxe_config_template=$pybasedir/drivers/modules/pxe_grub_config.template
# Bootfile DHCP parameter per node architecture. (dict value)
pxe_bootfile_name_by_arch=aarch64:grubaa64.efi,ppc64:bootppc64
# On ironic-conductor node, template file for PXE
# configuration per node architecture. For example:
# aarch64:/opt/share/grubaa64_pxe_config.template (dict value)
pxe_config_template_by_arch=aarch64:pxe_grubaa64_config.template,ppc64:pxe_ppc64_config.template
1,安裝pmitool
爲了開啓使用IPMI協議的driver程序進行電源和管理操作的功能(例如: ipmi
, pxe_ipmitool
和 agent_ipmitool
),ipmitool 命令必須可以在ironic-conductor運行的服務節點上執行
2,驗證IPMI,以及異常問題定位
檢查是否可以通過運行ipmitool,連接到您的裸金屬服務器上的IPMI控制器,並進行身份驗證:
ipmitool -I lanplus -H <ip-address> -U <username> -P <password> chassis power status
<ip-address> 是要訪問的IPMI controller的ip地址,不是裸金屬節點的地址,IPMI controller需要有自己獨立的ip地址。
如果上述命令沒有返回裸金屬服務器的電源狀態,請檢查:
- ipmitool已安裝並可通過$PATH環境變量使用。
- 裸金屬服務器上的IPMI控制器被打開(dell服務器默認是關閉的,其它多數服務器IPMI默認是打開的)。
- 在命令中傳遞的IPMI控制器憑證和IP地址是正確的。
- conductor節點有通向IPMI控制器的路由。這可以通過在conductor節點執行ping操作IPMI控制器IP來檢查。
3,IPMI配置
如果在環境中存在緩慢或無響應的BMCs,則可能需要提高[ipmi]部分中的min命令間隔配置選項。因爲設置這個超時時間過低會導致較舊的BMCs崩潰,並且需要進行硬重置,因此默認值的配置是相當的保守。
4,收集傳感器數據
裸金屬服務支持使用某些drivers發送IPMI傳感器信息到 Telemetry (即ceilometer服務),例如 ipmitool
, ilo
和irmc
默認情況下,發送IPMI傳感器信息到 Telemetry的功能是關閉的。如果要開啓,需要在ironic.conf中修改配置:
[DEFAULT]
notification_driver = messaging
[conductor]
send_sensor_data = true
如果要自定義發送給 Telemetry的傳感器類型,則需要更改 send_sensor_data_types配置項,例如,想要發送溫度、蜂鳴器、電壓信息:
send_sensor_data_types=Temperature,Fan,Voltage
如果設置爲 All
,則支持所有傳感器類型。
(四)配置基於iSCSI的drivers
確保 qemu-img
和 iscsiadm
工具安裝在 ironic-conductor 主機上。
擴展:Redfish
Redfish紅魚標準:2014年科技產業廠商戴爾(DELL)、艾默生網絡能源、惠普(HP)及英特爾(Intel)宣佈建立Redfish“紅魚”標準,該標準應用於數據中心發展及系統管理,可傳遞全面的功能性、可測性和安全性資訊。這是自智能平臺管理界面(IPMI)於1998年創立以來最爲全面性的標準,實際上也可以理解爲Redfish是IPMI的後續替代產品。主要區別於IPMI之處是,針對大規模服務器管理時,具有更豐富的命令,更簡單的管理架構等。
事實上各個服務器製造商都有自己的硬件系統管理工具,比如:戴爾的遠程訪問控制器(Dell Remote Access Controller,iDRAC),HPE的Integrated Lights-Out(Integrated Lights-Out,iLo),思科的集成管理控制器(Integrated Management Controller),以及超微電腦公司的Rack Scale Design產品,但是目前幾乎所有主要的服務器供應商都宣傳自己的管理工具與Redfish服務器開放標準參數的兼容性, 特別是他們新發布的服務器——HPE的Gen10產品、戴爾EMC的14G產品以及思科的UCSM5等廠商產品。
Redfish最初來自於三年前的DMTF(Distributed Management Task Force,分佈式管理任務組織)項目,它的目的是取代智能平臺管理界面IPMI(Intelligent Platform Management Interface),Redfish專爲那些尋求更安全地管理大型分佈式數據中心的IT專業人士而設計。Redfish能夠發現服務器、重新啓動並重新設置服務器,盤點服務器中的所有硬件和固件,監控服務器及其子組件的運行狀況,並生成事件日誌等許多其他功能。
六,Enrollment 註冊
在所有的服務都正確配置之後,應該使用裸金屬服務來註冊服務器硬件,並確保可用硬件資源對Compute服務可見。一旦節點處於available供應狀態,這些節點就會在Compute服務中顯示出來。
注意:
在用裸金屬服務註冊節點之後,計算服務將不會立即接收到新資源的通知。計算服務的資源跟蹤器會週期性地同步,因此任何直接對裸金屬服務資源的更改,都將在計算服務的下一個週期任務執行之後才能在計算服務中可見。
對於任何在計算服務中可見的任何裸金屬節點,如果電源和部署的接口都通過了有效性檢查,那麼(隨時都)可能有一個工作負載來調度它。如果你希望將一個節點排除在計算服務的調度程序之外,當你需要對節點進行維護時,可以將節點設置爲維護模式(maintenance mode)。更多信息查看維護模式章節 Maintenance mode
(一) 選擇一個driver
在註冊一個節點時,最重要的信息是驅動程序。這可以是一個經典的驅動程序,也可以是硬件類型——參考啓用驅動程序和硬件類型。driver-list命令可用於列出所有主機上啓用的所有驅動程序(兩種類型):
ironic driver-list
+---------------------+-----------------------+
| Supported driver(s) | Active host(s) |
+---------------------+-----------------------+
| ipmi | localhost.localdomain |
| pxe_ipmitool | localhost.localdomain |
+---------------------+-----------------------+
API從1.31開始,可以只列出classic driver或者只列出動態driver:
ironic --ironic-api-version 1.31 driver-list -t dynamic
+---------------------+-----------------------+
| Supported driver(s) | Active host(s) |
+---------------------+-----------------------+
| ipmi | localhost.localdomain |
+---------------------+-----------------------+
應該根據實際的硬件功能和預期特性來選擇使用的特定驅動程序。請參閱啓用驅動程序以獲得更多的提示。
每個驅動程序都有一個驅動屬性列表,這些屬性需要通過節點的驅動程序信息字段來指定,以便驅動程序在節點上操作。這個列表包含驅動程序使用的硬件接口的屬性。這些驅動屬性可以使用driver-properties命令查看:
$ 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. |
+----------------------+-------------------------------------------------------------------------------------------------------------+
所標記的屬性必須在節點創建期間或不久之後提供。有些屬性可能只用於某些特性。
從API版本1.1.11開始,裸金屬服務爲其狀態機添加了新的初始供應狀態enroll,當這個或後來的API版本使用時,新的節點會得到enroll這個狀態而不是available。
使用低於1.1.11的API版本的現有自動化工具不會受到影響,因爲初始供應狀態仍然是available。
然而,就節點創建而言,使用API版本1.11或更高版本可能會破壞現有的自動化工具。
python-ironicclient使用的默認API版本是1.9,但它可能在將來發生變化,不應該依賴於此。
下面例子中,我們將使用裸金屬1.11API版本,有幾個優勢:
(1)在離開enroll狀態之前,顯式的電源憑證驗證;
(2)進入available 狀態之前,運行節點清理操作;
(3)不會將未配置的節點暴露給調度程序
可以通過設置環境變量IRONIC_API_VERSION來設置API版本,對於OpenStackClient 裸金屬插件,可以設置OS_BAREMETAL_API_VERSION,如下:
$ export IRONIC_API_VERSION=1.11
$ export OS_BAREMETAL_API_VERSION=1.11
本節描述註冊一個節點的主要步驟,並使其供應available。爲了便於說明,有些步驟是分開顯示的,如果需要,可以合併。
1,用node-create命令在裸金屬服務中創建一個節點。至少必須指定一個驅動程序名稱(pxe_ipmitool, agent_ipmitool or ipmi).
此命令返回除了 node UUID以及其它node相關信息,node的預備供應狀態將會變爲enroll。
$ export IRONIC_API_VERSION=1.11
$ ironic node-create -d pxe_ipmitool
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 |
| driver_info | {} |
| extra | {} |
| driver | pxe_ipmitool |
| chassis_uuid | |
| properties | {} |
| name | None |
+--------------+--------------------------------------+
$ ironic node-show dfc6189f-ad83-4261-9bda-b27258eb1987
+------------------------+--------------------------------------+
|Property | Value |
+------------------------+--------------------------------------+
| target_power_state | None |
| extra | {} |
| last_error | None |
| maintenance_reason | None |
| provision_state | enroll |
| uuid | dfc6189f-ad83-4261-9bda-b27258eb1987 |
| console_enabled | False |
| target_provision_state | None |
| provision_updated_at | None |
| maintenance | False |
| power_state | None |
| driver | pxe_ipmitool |
| properties | {} |
| instance_uuid | None |
| name | None |
| driver_info | {} |
| ... | ... |
+------------------------+--------------------------------------+
像uuid一樣,節點也可能配置邏輯name。可以在node-create執行命令時,添加-n選項指定name,或者使用node-update命令修改name。
2,從API版本1.31(和python-ironicclient 1.13)開始,可以選擇使用硬件類型的節點使用哪個硬件接口。每個接口都由一個名爲<IFACE>_interface的節點字段來表示,<IFACE>是接口類型,例如boot。
接口可以在已存在節點上可以分別修改:
$ ironic --ironic-api-version 1.31 node-update $NODE_UUID replace \
deploy_interface=direct \
raid_interface=agent
也可以在節點創建時指定:
$ ironic --ironic-api-version 1.31 node-create -d ipmi \
--deploy-interface direct \
--raid-interface agent
若嘗試用一個classic driver改變這個字段,並將節點的驅動程序設置爲classic driver,這會是一個錯誤設置,導致這些字段被自動設置爲None。
3,使用所需的driver屬性更新節點的driver_info信息,這樣裸金屬服務就可以管理節點。
$ ironic node-update $NODE_UUID add \
driver_info/ipmi_username=$USER \
driver_info/ipmi_password=$PASS \
driver_info/ipmi_address=$ADDRESS
如果IPMI沒有運行在623端口(默認端口),就需要添加driver_info信息,指定ipmi_port的值,例如:
$ ironic node-update $NODE_UUID add driver_info/ipmi_port=$PORT_NUMBER
你也可以在節點創建時,多次使用-i選項,指定所有的driver_info
$ ironic node-create -d pxe_ipmitool \
-i ipmi_username=$USER \
-i ipmi_password=$PASS \
-i ipmi_address=$ADDRESS
4,指定一個與節點驅動程序兼容的部署kernel和ramdisk,例如:
$ ironic node-update $NODE_UUID add \
driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID \
driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
5,你還必須通過使用節點的每個NIC網卡MAC地址創建的port,作爲裸金屬服務的網絡接口。這些MAC地址用於實例provisioning和配置合適的網絡:
$ ironic port-create -n $NODE_UUID -a $MAC_ADDRESS
1,爲節點分配一個資源類。資源類應該在你的數據中心中表示一個硬件類,它對應於計算的flavor。
例如,讓我們將硬件分成這三組:
- a,具有大量RAM的節點和用於計算任務的強大CPU,
- b,用於OpenCL計算的強大GPU節點,
- c,用於開發和測試的小節點。
我們可以定義三個資源類來反映這些硬件組,分別命名爲large-cpu, large-gpu ,small r。然後,對於每個硬件組中的每個節點,我們將通過以下命令設置它們的resource_class :
$ openstack --os-baremetal-api-version 1.21 baremetal node set $NODE_UUID \
--resource-class $CLASS_NAME
--resource-class參數也可用於創建節點時:
$ openstack --os-baremetal-api-version 1.21 baremetal node create \
--driver $DRIVER --resource-class $CLASS_NAME
警告:
基於資源類的調度將在Queens版本中,替換基於properties的調度。
注意:
對於獨立部署來說這不是必需的,只是對於那些使用計算服務來提供裸金屬實例的人來說。
2,更新節點的屬性以匹配實際硬件。
$ ironic node-update $NODE_UUID add \
properties/cpus=$CPU_COUNT \
properties/memory_mb=$RAM_MB \
properties/local_gb=$DISK_GB \
properties/cpu_arch=$ARCH
如上,也可以在node-create節點創建時,多次使用-p參數來指定:
$ ironic node-create -d pxe_ipmitool \
-i ipmi_username=$USER \
-i ipmi_password=$PASS \
-i ipmi_address=$ADDRESS \
-p cpus=$CPU_COUNT \
-p memory_mb=$RAM_MB \
-p local_gb=$DISK_GB \
-p cpu_arch=$ARCH
在硬件檢查期間也可以發現以上需要的這些值。
(Hardware Inspection鏈接:https://docs.openstack.org/ironic/pike/admin/inspection.html)
警告:
如果沒有使用基於資源類resource classes的調度,那麼三個屬性cpus, memory_mb 和local_gb必須與所創建的flavor定義一致。參考:https://docs.openstack.org/ironic/pike/install/configure-nova-flavors.html
爲local_gb屬性提供的值必須與將要部署的根設備的大小相匹配。默認情況下,ironic-python-agent選擇不小於4 GiB的最小磁盤,
如果你使用根設備提示來覆蓋這個邏輯,local_gb需要匹配選中目標盤的大小。
指定系統盤raid,具體參考: Specifying the disk for deployment (root device hints)
3,如果你希望基於硬件能力執行更高級的實例調度,可以將metadata添加到每個將要被調度的節點(參見:ComputeCapabilitiesFilter)。對這一問題的具體解釋超出了本文件的範圍。它可以通過指定節點屬性的capabilities來完成。
$ ironic node-update $NODE_UUID add \
properties/capabilities=key1:val1,key2:val2
1,檢查裸金屬服務是否具有節點驅動程序功能所需的最小信息,可以用命令行驗證:
$ ironic node-validate $NODE_UUID
+------------+--------+--------+
| Interface | Result | Reason |
+------------+--------+--------+
| console | True | |
| deploy | True | |
| management | True | |
| power | True | |
+------------+--------+--------+
如果節點失敗了驗證,那麼每個驅動程序接口都會返回關於爲什麼失敗的信息
$ ironic node-validate $NODE_UUID
+------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
| Interface | Result | Reason |
+------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
| console | None | not supported |
| deploy | False | Cannot validate iSCSI deploy. Some parameters were missing in node's instance_info. Missing are: ['root_gb', 'image_source'] |
| management | False | Missing the following IPMI credentials in node's driver_info: ['ipmi_address']. |
| power | False | Missing the following IPMI credentials in node's driver_info: ['ipmi_address']. |
+------------+--------+-------------------------------------------------------------------------------------------------------------------------------------+
當裸金屬服務使用計算服務時,由於缺乏image信息而導致部署接口驗證錯誤可以忽略。你可以繼續enrollment。當請求部署實例時,這些信息將會在部署之前由Compute Service設置。
$ ironic node-validate $NODE_UUID
+------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Interface | Result | Reason |
+------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| console | True | |
| deploy | False | Cannot validate image information for node because one or more parameters are missing from its instance_info. Missing are: ['ramdisk', 'kernel', 'image_source'] |
| management | True | |
| power | True | |
+------------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
爲了能夠在節點上執行部署工作,節點必須處於available供應狀態。要做到這一點,使用API1.1.11和以上版本的節點必須從enroll狀態轉移到manageable狀態,然後轉移到available狀態。
如果使用API版本1.10或更早版本(默認情況下是這樣),可以安全地跳過這一部分。
在創建節點之後,從最初供應狀態enroll轉移狀態之前,需要在節點上配置基本電源和端口信息。
裸金屬服務需要這些信息,因爲它可以證明在將節點從enroll到manageable狀態時能夠控制節點。
把節點從enroll狀態切換到manageable狀態 :
$ 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 |
| ... | ... |
+------------------------+--------------------------------------------------------------------+
注意:
由於它是一個異步調用,因此對於ironic node-set-provision-state,不論轉換是否成功,響應都不會顯示。
你可以通過ironic node-show來檢查操作的狀態。如果成功,provision_state將變爲預想的狀態。如果失敗,將會在節點的last_error中查看報錯信息。
從manageable狀態轉移到available狀態:
$ 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 |
| ... | ... |
+------------------------+--------------------------------------------------------------------+
ironic狀態機
如果計算服務用於調度,且裸金屬服務的計算節點配置中沒有設置discover_hosts_in_cells_interval,那麼可以登錄任何控制器節點,運行以下命令來把新節點映射到compute cells中。
nova-manage cell_v2 discover_hosts
創建以example命名的節點:
$ ironic node-create -d agent_ipmitool -n example
或者更新已有節點:
$ ironic node-update $NODE_UUID add name=example
一旦分配了一個邏輯名,就可以通過替換爲名稱或UUID指向一個節點。
$ ironic node-create -d agent_ipmitool -n example
+--------------+--------------------------------------+
| Property | Value |
+--------------+--------------------------------------+
| uuid | 71e01002-8662-434d-aafd-f068f69bb85e |
| driver_info | {} |
| extra | {} |
| driver | agent_ipmitool |
| chassis_uuid | |
| properties | {} |
| name | example |
+--------------+--------------------------------------+
$ ironic node-show example
+------------------------+--------------------------------------+
| Property | Value |
+------------------------+--------------------------------------+
| target_power_state | None |
| extra | {} |
| last_error | None |
| updated_at | 2015-04-24T16:23:46+00:00 |
| ... | ... |
| instance_info | {} |
+------------------------+--------------------------------------+
對於傳統驅動程序,所有硬件接口實現(網絡接口除外)都是硬編碼的,不能更改。 對於硬件類型,用戶可以在創建或更新節點時請求一個可用的實現接口。
在創建節點或更改節點的硬件類型時,沒有指定interface,則使用默認值。 可以使用driver details命令列出當前enabled和default的硬件類型(用於部署):
$ openstack --os-baremetal-api-version
1.31 baremetal driver show ipmi
+-------------------------------+----------------+
| Field | Value |
+-------------------------------+----------------+
| default_boot_interface | pxe |
| default_console_interface | no-console |
| default_deploy_interface | iscsi |
| default_inspect_interface | no-inspect |
| default_management_interface | ipmitool |
| default_network_interface | flat |
| default_power_interface | ipmitool |
| default_raid_interface | no-raid |
| default_vendor_interface | no-vendor |
| enabled_boot_interfaces | pxe |
| enabled_console_interfaces | no-console |
| enabled_deploy_interfaces | iscsi, direct |
| enabled_inspect_interfaces | no-inspect |
| enabled_management_interfaces | ipmitool |
| enabled_network_interfaces | flat, noop |
| enabled_power_interfaces | ipmitool |
| enabled_raid_interfaces | no-raid, agent |
| enabled_vendor_interfaces | no-vendor |
| hosts | ironic-host-1 |
| name | ipmi |
| type | dynamic |
+-------------------------------+----------------+
默認情況下是這樣計算的:
1),如果配置了default_<IFACE>_interface選項,它的值就會被用作默認值。 如果這個實現與節點的硬件類型不兼容,則會返回給用戶一個錯誤。在這種情況下,必須爲節點的接口字段提供顯式的值。
2),否則,由操作員啓用的第一個支持的實現類型將被用作缺省值(可以設置多個)。
如果所支持的實現列表不是空的,那麼第一個被使用。否則,會返回給用戶一個錯誤。在這種情況下,必須爲其提供顯式的值 <IFACE>_interface字段
7,租戶網絡和端口組
七,裸金屬服務作爲獨立的服務使用
略。
在沒有其他OpenStack服務的情況下使用裸金屬服務的操作步驟,詳見:
八, 使能configdrive
裸金屬服務支持給實例配置configuration drive image。
配置驅動器(configuration drive)用於存儲實例指定的metadata,並將其作爲一個標記爲config-2的磁盤分區呈現給實例。配置驅動器的最大大小爲64MB。
configuration drive的一個使用場景就是,當沒有使用DHCP 給實例指定IP時,可以使用configuration drive顯示(指定)實例的網絡配置。
配置驅動通常與計算服務一起使用,但是裸金屬服務也提供了一種獨立的使用方法。以下部分將描述這兩種方法。
1,使用計算服務時的configdrive
(1)在nova boot時,通過添加 --config-drive true參數,啓用 configuration drive
nova boot --config-drive true --flavor baremetal --image test-image instance-1
(2)在配置文件 /etc/nova/nova.conf中,通過以下配置,開啓對所有實例的config drive功能,
2,standalone模式下的使用configdrive
略
3,Configuration drive在對象存儲中的存儲
略
當啓用configuration drive時,裸金屬服務將在實例磁盤上創建一個分區,並將configuration drive鏡像寫入實例的磁盤(系統盤倒數64MB空間)。configuration drive必須在使用前安裝。可以由許多工具自動執行的,比如cloud-init和cloudbase-init。要在支持通過標籤訪問設備的Linux發行版上手動安裝它,只需運行以下操作:
mkdir -p /mnt/configmount /dev/disk/by-label/config-2 /mnt/config
如果guest操作系統不支持通過標籤訪問設備,可以使用如blkid之類的其他工具來識別哪個設備對應configuration drive並掛載它,例如:
CONFIG_DEV=$(blkid -t LABEL="config-2" -odevice)
mkdir -p /mnt/config
mount $CONFIG_DEV /mnt/config
DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack" disk-image-create -o fedora-cloud-image fedora baremetal
如果是使用在虛擬化環境中,自定義製作裸金屬用戶鏡像,則需要在製作鏡像時,安裝cloudinit相關包。
九,高級功能
(一)本地引導partition鏡像
裸金屬服務支持分區鏡像的本地引導,這意味着在節點部署後,後續重啓不會再通過PXE或虛擬介質。相反,它將從安裝在磁盤上的本地引導加載程序啓動。
注意:
相反,Whole磁盤鏡像只支持本地引導,並在默認情況下使用它。
需要注意的是,爲了能夠正常工作,使用裸金屬服務的鏡像必須在其中安裝的grub2。
當使用裸金屬服務與計算服務一起使用時或裸金屬服務單獨使用時,啓用本地引導是不同的。以下部分將描述這兩種方法。
爲了啓用本地引導,我們需要在裸金屬節點上設置一個功能。
ironic node-update <node-uuid> add properties/capabilities="boot_option:local"
通過在計算服務的flavor中添加額外的規範,可以請求將啓動選項設置爲本地的節點。
nova flavor-key baremetal set capabilities:boot_option="local"
注意:
如果節點被配置爲使用UEFI引導,裸金屬服務將在磁盤上創建EFI分區,並將分區表格式轉換爲gpt。EFI分區稍後將由引導加載程序(從deploy ramdisk中安裝)使用。
2, 沒有計算服務時,啓用本地引導(stancalone)
由於向節點屬性添加的屬性只會被nova scheduler用於執行更高級的實例調度,我們需要一種當計算不存在時啓用本地引導的方法。爲了做到這一點,我們可以簡單地通過節點的instance info來指定屬性,例如 :
ironic node-update <node-uuid> add instance_info/capabilities='{"boot_option": "local"}'
(二)指定部署的磁盤(根設備所在磁盤)
裸金屬服務支持將提示傳遞給部署ramdisk,用來指定它應該選擇哪個磁盤進行部署。所支持的提示列表是:
- model模型(字符串):設備標識符
- vendor供應商(字符串):設備供應商
- serial串行(字符串):磁盤序列號。
- size尺寸(INT):以GiB爲單位的設備尺寸。
注意:
一個節點的“local_gb”屬性通常被設置爲小於實際磁盤大小的1 GiB,用於計算分區(舉幾個例子,這是DevStack、TripleO和ironic檢查等功能運行需要的)。但是,在這種情況下,大小應該是實際大小。例如,對於一個128 GiB磁盤local_gb將是127,但是大小提示將是128。
- wwn(字符串):唯一的存儲標識符
- wwn_with_extension (字符串)帶有供應商附加擴展的唯一的存儲標識符
- wwn_vendor_extension(字符串):唯一的供應商存儲標識符
- rotational轉動(布爾類型):不管它是否是旋轉裝置。當選擇判斷用哪個磁盤來部署ironic鏡像時,這個提示可以很容器區分HDDs(旋轉-磁盤)和SSDs(非旋轉-固態硬盤)。
- hctl(字符串):SCSI地址(主機名、channel通道、Target和Lun),例如‘1:0:0:0’
- name(字符串):設備名稱,例如/dev/md0
警告:
根設備提示名稱應該只用於具有常量名稱的設備(例如RAID卷)。對於SATA, SCSI和IDE磁盤控制器,這個提示是不推薦的,因爲在Linux中添加設備節點的順序是任意的,導致了諸如/dev/sda和/dev/sdb這樣的設備在引導時切換。
要將一個或多個顯示與節點關聯起來,用root設備的key值,更新節點的屬性。例如:
ironic node-update <node-uuid> add properties/root_device='{"wwn": "0x4000cca77fc4dba1"}'
這將保證裸金屬服務將選擇具有wwn且等於指定wwn值的磁盤設備,如果不能找到它,則會失敗部署。
提示可以在這個字符串值的開頭有一個運算符。如果沒有指定操作符,默認值是==(用於數值)和s==(用於字符串值),支持的操作符有:
數值:
=
equal to or greater than. This is equivalent to >=
and is supported for legacy reasons==
equal to!=
not equal to>=
greater than or equal to>
greater than<=
less than or equal to<
less than
字符串值:
s==
equal tos!=
not equal tos>=
greater than or equal tos>
greater thans<=
less than or equal tos<
less than<in>
substring
集合:
<all-in>
all elements contained in collection<or>
find one of these
找到一個大於或等於60 GiB且非旋轉的磁盤(SSD):
ironic node-update <node-uuid> add properties/root_device='{"size": ">= 60", "rotational": false}'
找出一個供應商是samsung或winsys的磁盤:
ironic node-update <node-uuid> add properties/root_device='{"vendor": "<or> samsung <or> winsys"}'
如果指定了多個提示,則設備必須滿足所有提示。
(三)引導實例時添加內核參數
裸金屬服務支持將自定義內核參數傳遞到引導的實例中,以滿足用戶需求。添加內核參數的方法取決於如何啓動實例。
目前,裸金屬服務支持爲PXE啓動實例分配統一的內核參數。
1,修改 [pxe]/pxe_append_params配置文件選項,例如:
[pxe]
pxe_append_params = quiet splash
2,將模板複製到另一個地方。例如:
https://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/pxe_config.template
通過 [pxe]/pxe_config_template
和 [pxe]/uefi_pxe_config_template
兩個配置選項,修改並指向自定義模板。
對於本地引導實例,用戶可以使用configuration drive的方式(請參閱),以通過一個自定義腳本來在創建實例時附加內核參數。這樣可以更靈活的改變每個實例。這裏有一個使用ubuntu的grub2的例子,用戶可以定製它以適應他們的用例。
3.3 控制檯
爲了在裸金屬服務配置文件中修改缺省console控制檯配置(在/etc/ironic/ironic.conf文件的[pxe]部分),包括端口終端和串行速度。串行速度必須與BIOS設置中的串行配置相同,這樣操作系統啓動過程就可以在串行控制檯或web控制檯中看到。下面的例子分別代表了串行和web控制檯的可能參數:
1,節點串行console,console參數 console=ttyS0,115200n8
在 115200bps, 8bit, non-parity 條件下使用 ttyS0
,例如:
[pxe]
# Additional append parameters for baremetal PXE boot.pxe_append_params = nofb nomodeset vga=normal console=ttyS0,115200n8
2,web console使用 ttyX
形式的參數,例如:
[pxe]# Additional append parameters for baremetal PXE boot.pxe_append_params = nofb nomodeset vga=normal console=tty0 console=ttyS0,115200n8
有關如何添加控制檯的詳細信息,請參閱參考文檔 kernel params 和 serial console,在本地啓動時,裸金屬服務無法控制內核引導參數。要在本地配置控制檯,請遵循上面的本地引導部分。
(四) 引導模式支持
下面的驅動程序支持啓動模式(Legacy BIOS或UEFI)。
引導模式可以在裸金屬服務中以如下方式配置:
1)當沒有提供引導模式設置時,這些驅動程序的引導模式默認是LegacyBIOS。
2)只有一個啓動模式(uefi或bios)可以爲節點配置。
3)如果操作員想要一個節點總是在uefi模式或bios模式下啓動,那麼他們可能會在一個裸金屬節點的屬性域中使用功能參數。操作人員必須在裸金屬節點上手動設置適當的啓動模式。
要在uefi模式中配置節點,然後設置如下所示的功能:
ironic node-update <node-uuid> add properties/capabilities='boot_mode:uefi'
可以通過在計算服務風格中添加額外的規範來請求 ,將boot_mode設置爲uefi的節點,需要在計算服務的flavor中添加extra_spec額外屬性,如下:
nova flavor-key ironic-test-3 set capabilities:boot_mode="uefi"nova boot --flavor ironic-test-3 --image test-image instance-1
如果在上述extra_spec中使用了capabilities ,nova調度程序(ComputeCapabilitiesFilter)將只匹配在properties/capabilities中設置boot_mode 的裸金屬節點。它會過濾掉節點的其餘部分。
上面的計算服務中匹配的設施,可以在混合了uefi和bios服務器的異構環境中使用,操作者(雲運營商)希望爲用戶提供關於啓動模式的選擇。如果flavor不包含boot_mode,且在裸金屬節點中有配置boot_mode,那麼nova調度程序將考慮所有節點,那麼用戶就可能獲得bios或uefi機器。
(五)選擇磁盤標籤
注意:
“磁盤標籤disk_label”在Ironic一直都有使用,而且它是從parted中而來。顯然,每個人似乎對disk_label有不同的定義——認爲這些都是相同的東西:磁盤類型、分區表、分區映射等等。
當ironic負責對磁盤進行分區時,Ironic允許操作者來自定義選擇想要把裸金屬節點部署到哪一個disk label上;因此,當部署的鏡像是whole disk image時,不支持選擇disk label來部署。
有些情況下,有的人可能希望爲正在部署的鏡像選擇特定的disk label磁盤標籤,包括但不限於:
1)對於磁盤大於2TB,且以bios模式啓動的機器,建議使用gpt磁盤標籤。這是因爲超過2TB的容量不能通過使用MBR分區類型來尋址。但是,儘管GPT聲稱要向後兼容遺留的BIOS系統,但並不總是這樣。
2)操作人員可能希望強制分區始終是MBR(即使機器是以uefi引導模式部署的)以避免在這些實例上運行的應用程序和工具的破壞。
在計算服務或獨立模式中使用Ironic的時候 ,disk label可以通過兩種方式配置。下面的要點和章節將描述這兩種方法:
1)當沒有提供磁盤標籤disk label時,Ironic會根據引導模式對其進行配置(請參考);bios啓動模式將使用msdos,uefi啓動模式將使用gpt。
2)裸金屬節點只能配置一個disk label:msdos或gpt
5.1 使用計算階段服務的情況下
當ironic用於計算服務時,應該將 disk label設置到裸金屬節點的properties/capabilities字段,並將其設置到需要此功能的flavor中,例如:
ironic node-update <node-uuid> add properties/capabilities='disk_label:gpt'
關於flavor:
nova flavor-key baremetal set capabilities:disk_label="gpt"
5.2 standalone模式下
當ironic不使用計算服務時, disk label應該直接設置到裸金屬節點的 instance_info字段,如下:
ironic node-update <node-uuid> add instance_info/capabilities='{"disk_label": "gpt"}'
(六)可信任的partation鏡像
裸金屬服務支持partition鏡像的可信引導。這意味着在部署過程結束後,當節點被重新引導時,將執行新的用戶鏡像。它將檢測節點的BIOS、引導加載程序、可選ROM以及Kernel/Ramdisk,以確定此節點是否是ironic信任的裸金屬節點。
需要注意的是,爲了使其工作,部署的節點必須具有Intel TXT硬件支持。被ironic部署的鏡像必須在鏡像內部安裝oat-client。
下面將描述如何啓動trusted boot,以及通過PXE和Nova來執行引導程序:
1,創建一個安裝oat-client的自定義鏡像:
disk-image-create -u fedora baremetal oat-client -o $TRUST_IMG
2,在節點上啓用VT-x, VT-d, TXT和TPM功能,可以通過在BIOS手動啓動,根據平臺的不同,可能需要有多次重啓。
3,註冊節點,更新節點capability的值:
ironic node-create -d pxe_ipmitool
ironic node-update $NODE_UUID add properties/capabilities={'trusted_boot':true}
4,創建一個執行的flavor:
nova flavor-key $TRUST_FLAVOR_UUID set 'capabilities:trusted_boot'=true
5,準備 tboot和mboot.c32,把它們放到ironic-conductor進程控制的所有節點的tftp_root或http_root的目錄下:
Ubuntu:
cp /usr/lib/syslinux/mboot.c32 /tftpboot/
Fedora:
cp /usr/share/syslinux/mboot.c32 /tftpboot/
注意:mboot.c32的實際位置,在不同的發行版本中有所不同。
tboot下載:
6,安裝OAT服務。OAT服務器應該正確地運行和配置。
7,通過Nova引導一個實例:
nova boot --flavor $TRUST_FLAVOR_UUID --image $TRUST_IMG --user-data $TRUST_SCRIPT trusted_instance
注意節點將會在trusted boot時被檢測,哈希值會存到TPM。TRUST_SCRIPT的例子可以查看:
8,通過AOT服務驗證結果:
(七)通知
裸金屬服務支持發送通知,通知是消息代理髮送的消息(如RabbitMQ或oslo消息庫支持的其他任何東西),這些消息指示發生的各種事件,比如節點改變了電源狀態。可以通過消息總線的外部服務讀取這些數據。例如,Searchlight是一個OpenStack服務,它使用通知來從裸金屬服務中索引(並創建可搜索的)資源。
默認情況下Notifications功能是禁用的。有關如何啓用可用的Notifications和說明的完整列表,請參閱: Notifications.
(八) 配置節點控制檯
一旦所有的服務都正確地運行和配置,並且一個節點已經加入了裸金屬服務且處於available 的預分配狀態,計算服務應該將節點檢測爲可用的資源,並將其暴露給調度器。
注意:
有一個延遲,計算服務可能需要一分鐘(一個週期的任務週期)來識別裸金屬服務資源(增加和刪除)的任何變化。
除了查看nova-compute日誌文件之外,還可以通過查看計算管理程序的列表來查看可用的資源。所報告的資源應該與裸金屬節點屬性和計算服務的flavor相匹配。
下面是一個示例集,用於比較計算服務和裸金屬服務的資源:
$ ironic node-list
+--------------------------------------+---------------+-------------+--------------------+-------------+
| UUID | Instance UUID | Power State | Provisioning State | Maintenance |
+--------------------------------------+---------------+-------------+--------------------+-------------+
| 86a2b1bb-8b29-4964-a817-f90031debddb | None | power off | available | False |
+--------------------------------------+---------------+-------------+--------------------+-------------+
$ ironic node-show 86a2b1bb-8b29-4964-a817-f90031debddb
+------------------------+----------------------------------------------------------------------+
| Property | Value |
+------------------------+----------------------------------------------------------------------+
| instance_uuid | None |
| properties | {u'memory_mb': u'1024', u'cpu_arch': u'x86_64', u'local_gb': u'10', |
| | u'cpus': u'1'} |
| maintenance | False |
| driver_info | { [SNIP] } |
| extra | {} |
| last_error | None |
| created_at | 2014-11-20T23:57:03+00:00 |
| target_provision_state | None |
| driver | pxe_ipmitool |
| updated_at | 2014-11-21T00:47:34+00:00 |
| instance_info | {} |
| chassis_uuid | 7b49bbc5-2eb7-4269-b6ea-3f1a51448a59 |
| provision_state | available |
| reservation | None |
| power_state | power off |
| console_enabled | False |
| uuid | 86a2b1bb-8b29-4964-a817-f90031debddb |
+------------------------+----------------------------------------------------------------------+
$ nova hypervisor-show 1
+-------------------------+--------------------------------------+
| Property | Value |
+-------------------------+--------------------------------------+
| cpu_info | baremetal cpu |
| current_workload | 0 |
| disk_available_least | - |
| free_disk_gb | 10 |
| free_ram_mb | 1024 |
| host_ip | [ SNIP ] |
| hypervisor_hostname | 86a2b1bb-8b29-4964-a817-f90031debddb |
| hypervisor_type | ironic |
| hypervisor_version | 1 |
| id | 1 |
| local_gb | 10 |
| local_gb_used | 0 |
| memory_mb | 1024 |
| memory_mb_used | 0 |
| running_vms | 0 |
| service_disabled_reason | - |
| service_host | my-test-host |
| service_id | 6 |
| state | up |
| status | enabled |
| vcpus | 1 |
| vcpus_used | 0 |
+-------------------------+--------------------------------------+
維護模式
如果需要從資源池中取出一個節點,則可以使用維護(Maintenance)模式。將節點置爲維護模式,用於阻止裸金屬服務執行與節點相關的週期性任務。還將防止計算服務通過將節點暴露給nova調度程序而將一個租戶實例置入節點上。可以使用以下命令將節點置爲維護模式:
$ ironic node-set-maintenance $NODE_UUID on
一個維護原因是一個可選的——可一使用--reason命令行參數指定。這是一個自由的文本字段,將顯示在node-show命令的maintenance_reason部分中。
$ ironic node-set-maintenance $UUID on --reason "Need to add ram."
$ ironic node-show $UUID
+------------------------+--------------------------------------+
| Property | Value |
+------------------------+--------------------------------------+
| target_power_state | None |
| extra | {} |
| last_error | None |
| updated_at | 2015-04-27T15:43:58+00:00 |
| maintenance_reason | Need to add ram. |
| ... | ... |
| maintenance | True |
| ... | ... |
+------------------------+--------------------------------------+
移除維護模式、並清理maintenance_reason,使用一下命令:
$ ironic node-set-maintenance $NODE_UUID off
十一,Next steps
你的OpenStack環境現在已經包含了裸金屬服務。
參考:
https://docs.openstack.org/ironic/pike/install/index.html