Redhat OpenStack Platform12对应的是pike版本OpenStack。OSP12我们已经测试了一段时间了,这段时间测试Ironic功能,用了接近2个周的时间才算走通了。感觉Ironic测试还是需要做大量工作的,而且按照红帽官方文档来做基本走不通,还是要看社区文档,自己多试错,多排查。
这是红帽官网的网络架构图,需要注意的是,要把ctlplane网络与ironic provisioning网络在物理网络层面通过路由打通。配置Controller节点允许通过ironic provisioning网络访问(用undercloud推送完环境之后,Controller节点的ctlplane网络默认是不能被访问的)。这样做是因为用于裸金属节点pxe启动的tftp服务部署在了Controller节点上,并且配置的IP地址是ctlplane网络的IP地址。
下面开始具体的执行步骤:
登录到Director节点,source rc文件
$ source ~/overcloudrc
检查nova-compute服务是否在控制节点上运行
$ openstack compute service list -c Binary -c Host -c status
查看Ironic drivers列表
$ openstack baremetal driver list
确保能够列出Ironic endpoints
$ openstack catalog list
创建一个提供Bare Metal实例的Flat网络
$ openstack network create \
--provider-network-type flat \
--provider-physical-network baremetal \
--share NETWORK_NAME
在这个Flat网络上上创建子网
$ openstack subnet create \
--network NETWORK_NAME \
--subnet-range NETWORK_CIDR \
--ip-version 4 \
--gateway GATEWAY_IP \
--allocation-pool start=START_IP,end=END_IP \
--dhcp SUBNET_NAME
创建一个路由器,并将刚刚创建的网络和子网连接到这个路由器,确保OpenStack网络服务的元数据请求有效
$ openstack router create ROUTER_NAME
在这个路由器上添加BareMetal子网
$ openstack router add subnet ROUTER_NAME BAREMETAL_SUBNET
以上是官网的说明,比较疑惑的是在物理路由层面已经打通了provisioning网络的路由,再创建一个路由干什么?在这个测试中我们并没有创建路由。
列出现有的flavors:
$ openstack flavor list
创建一个Bare Metal Flavor
$ openstack flavor create \
--id auto --ram RAM \
--vcpus VCPU --disk DISK \
--property baremetal=true \
--public baremetal
创建Bare Metal镜像
准备Deploy镜像
通常在undercloud节点的home目录下有这两个镜像
ironic-python-agent.kernel
ironic-python-agent.initramfs
$ openstack image create \
--container-format aki \
--disk-format aki \
--public \
--file ./ironic-python-agent.kernel bm-deploy-kernel
$ openstack image create \
--container-format ari \
--disk-format ari \
--public \
--file ./ironic-python-agent.initramfs bm-deploy-ramdisk
制作user image
定义环境变量
export REG_REPOS='rhel-7-server-rpms,rhel-7-server-extras-rpms,rhel-7-server-rh-common-rpms'
export REG_AUTO_ATTACH=true
export REG_USER=‘hzcong'
export REG_PASSWORD=‘RONGLIAN2017'
export REG_METHOD=portal
从官网下载rhel-server-7.4-x86_64-kvm.qcow2
$ export DIB_LOCAL_IMAGE=rhel-server-7.4-x86_64-kvm.qcow2
$ disk-image-create rhel7 baremetal -o rhel-image
将镜像上传到镜像服务
$ KERNEL_ID=$(openstack image create \
--file rhel-image.vmlinuz --public \
--container-format aki --disk-format aki \
-f value -c id rhel-image.vmlinuz)
$ RAMDISK_ID=$(openstack image create \
--file rhel-image.initrd --public \
--container-format ari --disk-format ari \
-f value -c id rhel-image.initrd)
$ openstack image create \
--file rhel-image.qcow2 --public \
--container-format bare \
--disk-format qcow2 \
--property kernel_id=$KERNEL_ID \
--property ramdisk_id=$RAMDISK_ID \
rhel-image
创建节点
$ openstack baremetal node create --driver pxe_impitool --name NAME
指定deploy kernel 和deploy ramdisk:
$ openstack baremetal node set NODE_UUID \
--driver-info deploy_kernel=KERNEL_UUID \
--driver-info deploy_ramdisk=INITRAMFS_UUID
更新node的属性信息,匹配硬件规格
$ openstack baremetal node set NODE_UUID \
--property cpus=CPU \
--property memory_mb=RAM_MB \
--property local_gb=DISK_GB \
--property cpu_arch=ARCH
告知baremtal服务节点的provisioning网卡,
$ openstack baremetal port create --node NODE_UUID MAC_ADDRESS
将节点状态设置为provide状态
$ ironic node-set-provision-state $NODE_UUID provide
如果ironic节点状态为“clean failed”需要做如下操作:
$ ironic node-set-provision-state $NODE_UUID manage
$ ironic node-set-maintenance $NODE_UUID false
$ ironic node-set-provision-state $NODE_UUID provide
配置部署Ironic节点完成后,从本机启动
$ openstack baremetal node set NODE_UUID \
--property capabilities="boot_option:local"
ironic节点有多快磁盘,设置root盘
$ openstack baremetal node set NODE_UUID \
--property root_device={"PROPERTY": "VALUE"}
我们设置的是
$ openstack baremetal node set NODE_UUID \
--property root_device=‘{"name": “/dev/sda”}’
设置baremetal flavor属性:baremetal=true
$ openstack flavor set baremetal --property baremetal=true
创建aggregate,设置属性baremetal=true
$ openstack aggregate create --property baremetal=true baremetal-hosts
将Controller节点加入到baremetal aggregate中
$ openstack aggregate add host baremetal-hosts HOSTNAME
/etc/nova/nova.conf配置文件的scheduler_default_filters添加配置:
AggregateInstanceExtraSpecsFilter
$ openstack server create \
--nic net-id=NETWORK_UUID \
--flavor baremetal \
--image IMAGE_UUID \
INSTANCE_NAME
执行openstack hypervisor show NODEUUID,显示的cpu、内存、本地磁盘全部为0,OpenStack是怎么获取到配置呢?解答:执行ironicnode−set−provision−state N O D E U U I D , 显 示 的 c p u 、 内 存 、 本 地 磁 盘 全 部 为 0 , O p e n S t a c k 是 怎 么 获 取 到 配 置 呢 ? 解 答 : 执 行 i r o n i c n o d e − s e t − p r o v i s i o n − s t a t e NODE_UUID provide之后,ironic会clean node,在这个阶段ironic节点会通过deploy image引导,并执行clean操作。clean操作完成之后,ironic node状态变为“available”,此时再执行openstack hypervisor show $NODE_UUID命令,就会显示具体的配置信息。