我的知乎专栏:云计算实战技能
1. 搭建diskimage-builder环境
https://docs.openstack.org/diskimage-builder/latest/
大家可以根据上面官网链接来搭建diskimage-builder环境,在这里就不再细说。下面我们直接看怎么来build裸金属使用的镜像。
2. 构建部署镜像(ramfs和kernel)
2.1 构建
在构建时,可以内置一个devuser账号,方便部署阶段的问题排查; 构建完后上传到glance
$ cat ironic.rc
export DIB_DEV_USER_USERNAME=fhl
export DIB_DEV_USER_PASSWORD=fhl
export DIB_DEV_USER_PWDLESS_SUDO=YES
$ . ironic.rc
$ disk-image-create ironic-agent centos7 -o ironic-agent devuser
build结束后在当前目录下会生成ironic-agent.kernel 和 ironic-agent.initramfs两个文件
2.2 上传到Glance里
# glance image-create --name ironic-agent.kernel --visibility public --disk-format aki --container-format aki < ironic-agent.kernel
# glance image-create --name ironic-agent.initramfs --visibility public --disk-format ari --container-format ari < ironic-agent.initramfs
2.3 更新baremetal node里的deploy_kernel和deploy_ramdisk
# openstack baremetal node set 0fd688c2-ca83-416e-96a6-a61d231881d7 \
--driver-info deploy_kernel=326020f0-bc8c-4a3c-a3af-725bce3c04ef \
--driver-info deploy_ramdisk=3dc9a9b2-091b-441c-934a-41f250a32388
3. 构建系统镜像
用https://cloud.centos.org/centos/7/images/下载来的CentOS-7-x86_64-GenericCloud.qcow2镜像直接来装裸机,发现镜像不能dhcp所有接口;如果裸机使用的网卡不在第一块,那么裸机不能dhcp到ip地址,cloud-init也就不能成功的初始化,导致账号注入失败,登入不进去。因此,使用diskimage-builder重新构建系统镜像。
3.1 可以将基础镜像下载到本地
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz
export DIB_LOCAL_IMAGE=/root/CentOS-7-x86_64-GenericCloud.qcow2.xz
3.2 构建bios引导的系统镜像
$ disk-image-create centos7 vm dhcp-all-interfaces grub2 -o centos7-whole-grub2
3.3 构建uefi引导启动的系统镜像
$ disk-image-create centos7 vm dhcp-all-interfaces block-device-efi grub2 -o centos7-efi-grub2
3.4 系统镜像上传到glance
# openstack image create "centos7-bm" \
--file centos7-whole-grub2.qcow2 \
--disk-format qcow2 --container-format bare \
--public --min-disk 50 \
--property os_distro=centos \
--property os_type=linux
4. 创建裸机
# . demo.rc
# openstack server create --flavor baremetal-flavor --image 695ca8e2-5952-451d-a23c-6e76e4e90f7