OSP12搭建BareMetal服务

OSP12搭建BareMetal服务

Redhat OpenStack Platform12对应的是pike版本OpenStack。OSP12我们已经测试了一段时间了,这段时间测试Ironic功能,用了接近2个周的时间才算走通了。感觉Ironic测试还是需要做大量工作的,而且按照红帽官方文档来做基本走不通,还是要看社区文档,自己多试错,多排查。

网络规划

这是红帽官网的网络架构图,需要注意的是,要把ctlplane网络与ironic provisioning网络在物理网络层面通过路由打通。配置Controller节点允许通过ironic provisioning网络访问(用undercloud推送完环境之后,Controller节点的ctlplane网络默认是不能被访问的)。这样做是因为用于裸金属节点pxe启动的tftp服务部署在了Controller节点上,并且配置的IP地址是ctlplane网络的IP地址。
Ironic网络架构


测试步骤

下面开始具体的执行步骤:

检查BareMetal服务

登录到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

创建一个提供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

手动注册Ironic节点

创建节点

$ 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”}’

通过aggregate分离裸机节点和提供虚拟机的计算节点

设置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

遇到的坑

  1. enroll节点之后,node状态为enroll,需要执行ironic node-set-provison-state $NODE_UUID,将状态变为available,否则在launch 虚拟机的时候会报“No host available”错误。
  2. 一定要打通ironic网络和ctrlplane网络,并且要允许ironic网络能够通过ctlplane网络访问Controller节点。ironic会把Controller节点当做ftp服务器,并且配置的地址是ctrlplane地址。ironic节点在clean node和生成实例时都会通过pxe的方式从Controller节点上下载镜像。
  3. 一定要查看ironic.conf中配置的tftp目录是否存在。
  4. 要查看tftp服务是否已经正常运行。
  5. 在启动实例之前,要先检查node的状态是否为“available”,只有处于“available”状态的节点才能部署实例。

问题

执行openstack hypervisor show NODEUUIDcpu0OpenStackironicnodesetprovisionstate 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命令,就会显示具体的配置信息。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值