說明: Openstack 的安裝步驟省略,按照社區的文檔即可搭建出一套相對穩定的使用環境.本文檔基於Newton版本. 假設現在已經有一套可用的Newton環境, 以下的操作均在環境安裝完成后進行.
在ironic安裝配置過程中, 社區文檔Nova和ironic 結合時的配置部分有一個錯誤,
會導致ironic節點無法注冊到nova服務.會產生在dashboard中無法查看和使用的問題.
這段配置是在/etc/nova/nova.conf中,這個配置起到關鍵的作用,它決定了誰可以控制ironic服務.而且要配置在nova compute節點上
然而在我配置的過程中,發現在/etc/nova/ 目錄下,有一個conf.d的文件夾中也存在着一個配置文件,里面的driver卻是libvirt的. 如果兩個配置文件同時存在,將會導致/etc/nova/nova.conf 中的compute_driver無法生效. 造成節點注冊失敗. 所以解決辦法是刪除conf.d 重啟nova compute service. 如果沒有發現此目錄和配置文件,則可能是近期已修復,無需處理,只需要注意log中的信息,是否加載了ironic.IronicDriver. 如圖
關於網絡的配置:
按照ironic社區文檔中的步驟,是需要使用基於openvswitch中間件的網絡的.可是在openstack安裝配置文檔當中. neutron的中間件使用的是linuxbridge. 其實這兩個任選其一都可以, 為了簡便,就不去更換了, 就使用linuxbridge來配置ironic.
首先配置網卡:
將要用到的網卡都激活.
controller:共兩塊網卡,角色復用
enp11s0f1這個網卡作為VM出外網的網卡,所以配置成由程序控制.
compute:三塊網卡,角色復用
因為我們將ironic服務都放到了compute節點上,被管理物理機資源需要有一塊網卡可以和ironic服務通訊,所以多配置了一個私網(eno4)以供使用.這個網絡將在pxe時被用到.
然后配置controller的linuxbridge:
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
最重要的一條
physical_interface_mappings = ext:enp11s0f1,ironic:enp16s0f0 解釋一下含義.
physical_interface_mappings = 可以理解為虛擬網絡和物理網卡的映射關系.
ext:enp11s0f1 ext是自定義的名字,會在創建網絡時用到.enp11s0f1則是網卡的名字,不可填錯. 完整的意思就是ext這個虛擬網絡,要使用enp11s0f1這塊網卡.
ironic:enp16s0f0 意思同上.
同一行可以配置多個這樣的網絡.以”,”分割.
下圖就是ext和ironic的用處例子.用ext 或者 ironic替換掉default就可以創建出相應的網絡.供應設備一定要是平面(flat)
保存配置文件退出
編輯 ml2_conf.ini
這個flat配置,一定要寫* 允許所有名稱的flat網絡,就是上面我們寫的 ext 和ironic
除以上,其他選項可無需配置. 然后保存退出, controller 和compute的linuxbridge配置完全一樣.
重啟所有Neutron相關服務,Nova相關服務
到此配置中的難點和坑就已經填平了.可以進行節點注冊了.
Ironic使用命令
添加 ironic compute node
定義一個名字變量,方便操作
NODE_NAME=ironic01
列出支持的驅動
ironic driver-list
創建一個名為ironic01的節點, 驅動為pex_ ipmitool
ironic node-create -n $NODE_NAME -d pxe_ipmitool
將上條命令輸出的ID號定義為變量,方便操作.
NODE_UUID=[ID]
查看此驅動支持什么參數.
ironic driver-properties pxe_ipmitool
更新節點名稱.
ironic node-update $NODE_UUID add name=$NODE_NAME
更新IMM信息
ironic node-update $NODE_UUID add driver_info/ipmi_username=[username] driver_info/ipmi_password=[password] driver_info/ipmi_address= [IP]
#ironic node-update $NODE_UUID add driver_info/deploy_kernel=[deploy_kernel_id] driver_info/deploy_ramdisk=[deploy_ramdisk_id] driver_info/deploy_squashfs=[deploy_squashfs_id] 在fuel中需要配置,社區版不需要.
#社區版還可以添加instance信息:其實沒有也ok,部署的時候會從flavor中讀取
#ironic node-update $NODE_UUID add instance_info/root_gb=100 instance_info/kernel=$user_kernel_id instance_info/ramdisk=$user_ramdisk_id instance_info/image_source=$user_image_id
更新節點配置信息.填寫物理機cpu,內存,磁盤等信息
ironic node-update $NODE_UUID add properties/cpus=24 properties/memory_mb=10240 properties/local_gb=2048 properties/cpu_arch=x86_64
設置啟動方式
ironic node-update $NODE_UUID add properties/capabilities='boot_option:local','boot_mode:uefi'
添加console端口,可不寫
ironic node-update $NODE_UUID add driver_info/ipmi_terminal_port=$port(任意)
把要添加的物理節點mac地址信息錄入,需要跟ironic 服務在同一廣播域的網卡的mac地址, pxe用.
ironic port-create -n $NODE_UUID -a $MAC_ADDRESS (ironic網絡網卡的mac地址)
用社區的deploy image 必須uefi
ironic node-update $NODE_UUID add properties/capabilities='boot_mode:uefi'
創建nova flavor
FLAVOR_NAME=ironic01
nova flavor-create $FLAVOR_NAME auto 4096 50 1 nova flavor-key $FLAVOR_NAME set cpu_arch="x86_64" nova flavor-key $FLAVOR_NAME set capabilities:boot_option="local" nova flavor-key $FLAVOR_NAME set capabilities:boot_mode="uefi"
當所有准備工作完成后,進行注冊操作.
ironic node-validate $NODE_UUID
ironic node-set-provision-state $NODE_UUID manage ironic node-set-provision-state $NODE_UUID provide
#需要注意的是,conduct節點要有qemu-img命令,否則會報錯.
想要取消操作:
ironic --ironic-api-version 1.22 node-set-provision-state $NODE_UUID abort
參考文檔:
https://doodu.gitbooks.io/openstack-ironic/content/an_zhuang_yu_pei_zhi.html
https://docs.openstack.org/newton/install-guide-ubuntu/additional-services.html
標簽(元數據):方便選擇部署在哪個物理機上,可選項
ironic node-update $NODE_UUID add properties/capabilities='profile:'$NODE_NAME',boot_option:local'
nova flavor-key $FLAVOR_NAME set capabilities:profile='$NODE_NAME'
ironic node-update $NODE_UUID add properties/capabilities='boot_mode:uefi'
制作Image
部署物理機的image是需要單獨制作的.使用diskimage-builder工具即可.安裝及使用如下:
在一台可以訪問internet的機器上安裝pip
apt install python-pip pip install --upgrade pip pip install diskimage-builder **定義image的一些屬性** export DIB_RELEASE=GenericCloud (centos默認是這個,Ubuntu定義版本也同樣是這個命令.) #想了解更多版本,到http://cloud.centos.org/centos/7/images/查詢 export DIB_CLOUD_INIT_DATASOURCES="Ec2, ConfigDrive, OpenStack" export DIB_CLOUD_INIT_ETC_HOSTS=true export DIB_DEV_USER_USERNAME=$USERNAME export DIB_DEV_USER_PASSWORD=$PASSWORD export DIB_DEV_USER_PWDLESS_SUDO=yes export DIB_DEV_USER_AUTHORIZED_KEYS=/root/.ssh/authorized_keys (option) export DIB_EPEL_MIRROR=http://dl.fedoraproject.org/pub/epel (option)
開始制作
disk-image-create -p parted,(vim) -a amd64 (bootloader) grub2 dhcp-all-interfaces enable-serial-console cloud-init-datasources base devuser (epel) (selinux-permissive) baremetal centos7 -o mustang_centos7
括號中為可選
制作普通vm image
disk-image-create cloud-init-datasources base devuser vm ubuntu -o ubuntu_16.04
選擇啟動方式為local時,一定要安裝grub2,否則將報錯,無法部署.
上傳和更新image
以下為fuel配置時,要做的操作(開啟密碼登陸),社區版可以省略.正常上傳鏡像即可.
glance image-create --name $NAME.initrd --visibility public --disk-format ari --container-format bare < $NAME.initrd
glance image-create --name $NAME.vmlinuz --visibility public --disk-format aki --container-format bare < $NAME.vmlinuz glance image-create --name $NAME --visibility public --disk-format qcow2 --container-format bare --property kernel_id=$ID --property ramdisk_id=$ID < user_image.qcow2 #然后使用此image啟動一個instance,更改其cloud-init,sshd配置文件,使其允許root使用密碼登錄. vim /etc/cloud/cloud.cfg disable_root:0 ssh_pwauth: 1 sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config #然后清理instance,關機,做snapshot.將做好的snapshot下載下來 openstack image save $IMAGE_UUID --file $FILE_NAME #然后轉換成raw格式 qemu-img convert -f qcow2 -O raw INPUTE_FILENAME $OUTPUT_FILENAME #將raw格式文件上傳至glance,並且添加自定義參數,使用不久之前上傳的kernel和ramdisk. glance image-create --name $NAME --visibility public --disk-format raw --container-format bare --property kernel_id=$ID --property ramdisk_id=$ID < user_image.raw #最后更新image的metadata glance image-update $IMAGE_UUID --property cpu_arch=x86_64 --property hypervisor_type="baremetal" --property fuel_disk_info='[{"name": "sda", "extra": [], "free_space": 51200, "type": "disk", "id": "vda", "size": 51200, "volumes": [{"mount": "/", "type": "partition", "file_system": "ext4", "size": 40000}]}]'
Web Console
安裝相關軟件包
Ubuntu:
sudo apt-get install shellinabox Fedora 21/RHEL7/CentOS7: sudo yum install shellinabox Fedora 22 or higher: sudo dnf install shellinabox
更改ironic.conf文件
pxe_append_params = nofb nomodeset vga=normal console=tty0 console=ttyS0,115200n8
其他命令
ironic driver-properties pxe_ipmitool
ironic node-update $NODE_UUID add driver_info/ipmi_terminal_port=9000 ironic node-set-console-mode $NODE_UUID true ironic node-get-console $NODE_UUID ironic node-validate $NODE_UUID export OS_BAREMETAL_API_VERSION=1.22 export IRONIC_API_VERSION=1.22