Open 522623905 opened 1 year ago
@522623905
如果物理机的 bmc 不支持 redfish 协议,需要在创建物理机的时候把 pxe 网卡的 mac 地址填上,这样物理机 pxe 启动进行 dhcp 的时候 baremetal agent 才会从 dhcp 请求中的 mac 到平台那边匹配上记录。
可以看下 10:70:fd:88:57:2a 这个 mac 地址是否是当前物理机的网卡,如果是的话,需要在创建物理机记录的时候把 mac 地址填上后再试试。
另外 https://$ip/api/v2/hosts POST的接口从这里开始校验:https://github.com/yunionio/cloudpods/blob/3f5b0a824c8181a911a1d4155f0e50c1ce4c3357/pkg/compute/models/hosts.go#L3472
@522623905
如果物理机的 bmc 不支持 redfish 协议,需要在创建物理机的时候把 pxe 网卡的 mac 地址填上,这样物理机 pxe 启动进行 dhcp 的时候 baremetal agent 才会从 dhcp 请求中的 mac 到平台那边匹配上记录。
可以看下 10:70:fd:88:57:2a 这个 mac 地址是否是当前物理机的网卡,如果是的话,需要在创建物理机记录的时候把 mac 地址填上后再试试。
另外 https://$ip/api/v2/hosts POST的接口从这里开始校验:
可以看我上边的日志,DHCP Request的时候,可以看到 mac 地址就是调用POST请求时填充的: Request URL: https://10.103.192.30/api/v2/hosts Request Method: POST
access_mac: "10:70:fd:88:57:2a"
[info 2023-09-08 01:51:41 pxe.(DHCPHandler).ServeDHCP(dhcp.go:83)]DHCP: from relay 10.103.192.30 packet, mac: 10:70:fd:88:57:2a [info 2023-09-08 01:51:41 pxe.(dhcpRequest).fetchConfig(dhcp.go:238)] Not found baremetal by mac: 10:70:fd:88:57:2a
但是,奇怪的是,host-list出来的mac,并不是我请求时配置的mac,而是我另一张网卡的mac:
[root@host-005056b2d99d ~]# climc host-list +--------------------------------------+---------------------------------+-------------------+----------------+---------------+--------------------+----------------------------+---------+---------+-------------+----------+-----------+------------+------------+------------+----------------------------------+--------------+-----------+--------------+ | ID | Name | Access_mac | Access_ip | Ipmi_Ip | Ovn_Mapped_Ip_Addr | Manager_URI | Status | enabled | host_status | mem_size | cpu_count | node_count | sn | host_type | version | storage_size | domain_id | public_scope | +--------------------------------------+---------------------------------+-------------------+----------------+---------------+--------------------+----------------------------+---------+---------+-------------+----------+-----------+------------+------------+------------+----------------------------------+--------------+-----------+--------------+ | 8e58d500-e0a7-4154-8aa5-817ea496a018 | tetet | b4:05:5d:30:82:2a | 10.103.192.140 | 10.103.193.22 | | | prepare | false | offline | 0 | 0 | 0 | 819597899 | baremetal | | 0 | default | system |
@522623905 如果物理机的 bmc 不支持 redfish 协议,需要在创建物理机的时候把 pxe 网卡的 mac 地址填上,这样物理机 pxe 启动进行 dhcp 的时候 baremetal agent 才会从 dhcp 请求中的 mac 到平台那边匹配上记录。 可以看下 10:70:fd:88:57:2a 这个 mac 地址是否是当前物理机的网卡,如果是的话,需要在创建物理机记录的时候把 mac 地址填上后再试试。 另外 https://$ip/api/v2/hosts POST的接口从这里开始校验: https://github.com/yunionio/cloudpods/blob/3f5b0a824c8181a911a1d4155f0e50c1ce4c3357/pkg/compute/models/hosts.go#L3472
可以看我上边的日志,DHCP Request的时候,可以看到 mac 地址就是调用POST请求时填充的: Request URL: https://10.103.192.30/api/v2/hosts Request Method: POST
access_mac: "10:70:fd:88:57:2a"
[info 2023-09-08 01:51:41 pxe.(DHCPHandler).ServeDHCP(dhcp.go:83)]DHCP: from relay 10.103.192.30 packet, mac: 10:70:fd:88:57:2a [info 2023-09-08 01:51:41 pxe.(dhcpRequest).fetchConfig(dhcp.go:238)] Not found baremetal by mac: 10:70:fd:88:57:2a
@522623905 应该是你理解错了,bm_register.go:CreateBaremetal 函数是从这个接口调进来的:
这个不是 pxe 注册物理机的逻辑。
你的是 pxe 注册的流程,如果看代码的话,应该看这个地方的逻辑:
目前现象,看起来是, pxe 注册时,使用的网卡,和进入ramdisk系统后,再请求dhcp的网卡不是一个。 然后造成的问题是: 1)虽然我注册时,指定的是MAC1; 2)pxe boot启动时,用的是另一张网卡,MAC2,然后dhcp server收到请求后,从DHCP Request中 获取到这个MAC2,再反写到数据库,将MAC1覆盖了; 3)然后流程继续,往下后,以MAC1,发送DHCP请求,但是由于数据库备修改成MAC2了,就无法找到,就无法分配成功了
但是,奇怪的是,host-list出来的mac,并不是我请求时配置的mac,而是我另一张网卡的mac:
[root@host-005056b2d99d ~]# climc host-list +--------------------------------------+---------------------------------+-------------------+----------------+---------------+--------------------+----------------------------+---------+---------+-------------+----------+-----------+------------+------------+------------+----------------------------------+--------------+-----------+--------------+ | ID | Name | Access_mac | Access_ip | Ipmi_Ip | Ovn_Mapped_Ip_Addr | Manager_URI | Status | enabled | host_status | mem_size | cpu_count | node_count | sn | host_type | version | storage_size | domain_id | public_scope | +--------------------------------------+---------------------------------+-------------------+----------------+---------------+--------------------+----------------------------+---------+---------+-------------+----------+-----------+------------+------------+------------+----------------------------------+--------------+-----------+--------------+ | 8e58d500-e0a7-4154-8aa5-817ea496a018 | tetet | b4:05:5d:30:82:2a | 10.103.192.140 | 10.103.193.22 | | | prepare | false | offline | 0 | 0 | 0 | 819597899 | baremetal | | 0 | default | system |
@522623905 这个物理机是否支持 redfish api ?如果支持的话,有可能是 redfish 返回的 mac 地址不包含输入的 mac 地址,就会以 redfish 的为准,这个问题以前遇到过。
这种情况可以改用 iso 引导注册试试
[info 2023-09-08 01:41:09 redfish.NewRedfishDriver(driver.go:120)] Use generic Redfish REST Api Driver for endpoint "https://10.103.193.22" [warning 2023-09-08 01:41:09 tasks.(*SBaremetalIpmiProbeTask).DoIpmiProbe(ipmiprobe.go:83)] BMC not redfish-compatible 日志这个提示,看起来是不兼容redfish?有什么方式或接口能验证redfish获取mac不?
目前现象,看起来是, pxe 注册时,使用的网卡,和进入ramdisk系统后,再请求dhcp的网卡不是一个
@522623905 那现在 pxe 进入 ramdisk 系统后,进去用 ifconfig 和 route 等命令看下网卡现在分配的 ip 和路由配置是什么? 需要确保 ramdisk 系统能够成功访问 baremetal-agent 所在的节点对应的 https://$ip:8879 服务监听地址才行
[info 2023-09-08 01:41:09 redfish.NewRedfishDriver(driver.go:120)] Use generic Redfish REST Api Driver for endpoint "https://10.103.193.22" [warning 2023-09-08 01:41:09 tasks.(*SBaremetalIpmiProbeTask).DoIpmiProbe(ipmiprobe.go:83)] BMC not redfish-compatible 日志这个提示,看起来是不支持完整的redfish?有什么方式或接口能验证redfish获取mac不?
@522623905 那这个看起来是不支持 redfish 了,可以排除我说的 redfish 的问题了。 现在可以从 ramdisk 分配的网络配置来排查了,进入 ramdisk 系统看下能否访问 baremetal-agent 所在的节点对应的 https://$ip:8879 服务监听地址?
目前现象,看起来是, pxe 注册时,使用的网卡,和进入ramdisk系统后,再请求dhcp的网卡不是一个。 然后造成的问题是: 1)虽然我注册时,指定的是MAC1; 2)pxe boot启动时,用的是另一张网卡,MAC2,然后dhcp server收到请求后,从DHCP Request中 获取到这个MAC2,再反写到数据库,将MAC1覆盖了; 3)然后流程继续,往下后,以MAC1,发送DHCP请求,但是由于数据库备修改成MAC2了,就无法找到,就无法分配成功了
@522623905 可以拔掉一条网卡的网线吗?保证 pxe 阶段出来的 dhcp 请求都走一张网卡
@522623905 另外 iso 引导注册这个不用尝试了,不支持 redfish 的机器用不了这个模式
目前现象,看起来是, pxe 注册时,使用的网卡,和进入ramdisk系统后,再请求dhcp的网卡不是一个。 然后造成的问题是: 1)虽然我注册时,指定的是MAC1; 2)pxe boot启动时,用的是另一张网卡,MAC2,然后dhcp server收到请求后,从DHCP Request中 获取到这个MAC2,再反写到数据库,将MAC1覆盖了; 3)然后流程继续,往下后,以MAC1,发送DHCP请求,但是由于数据库备修改成MAC2了,就无法找到,就无法分配成功了
@522623905 可以拔掉一条网卡的网线吗?保证 pxe 阶段出来的 dhcp 请求都走一张网卡
嗯,我验证一下
@522623905 可以用下面的命令查询 ramdisk 的登陆密码,如果没有查询到,应该就是 mosbaremetal 这个默认密码
# climc host-logininfo 物理机名
$ climc host-logininfo $your-baremetal-name
@522623905 通知回 baremetal-agent 的脚本在 ramdisk 里面,代码在这里: https://github.com/yunionio/yunionos/blob/master/src_pxe/etc/init.d/S99notify
对应到 ramdisk 的地方是:/etc/init.d/S99notify
/etc/init.d/S80eth0,这个脚本中,直接从系统识别的第一个网卡去发现dhcp请求。但是,第一个网卡,由于系统识别的原因,并不是我们指定的PXE使用的网卡。应该修改成,从 /proc/cmdline 中获取到 BOOTIF 这个变量,他记录的就是 pxe 启动的网卡mac地址,通过mac地址去遍历识别的网卡,如果一致,就用这个mac来发送DHCP,也就是执行 udhcpc 。这样就可以避免这个问题了。
目前现象,看起来是, pxe 注册时,使用的网卡,和进入ramdisk系统后,再请求dhcp的网卡不是一个。 然后造成的问题是: 1)虽然我注册时,指定的是MAC1; 2)pxe boot启动时,用的是另一张网卡,MAC2,然后dhcp server收到请求后,从DHCP Request中 获取到这个MAC2,再反写到数据库,将MAC1覆盖了; 3)然后流程继续,往下后,以MAC1,发送DHCP请求,但是由于数据库备修改成MAC2了,就无法找到,就无法分配成功了
@522623905 可以拔掉一条网卡的网线吗?保证 pxe 阶段出来的 dhcp 请求都走一张网卡
/etc/init.d/S80eth0,这个脚本中,直接从系统识别的第一个网卡去发现dhcp请求。但是,第一个网卡,由于系统识别的原因,并不是我们指定的PXE使用的网卡。应该修改成,从 /proc/cmdline 中获取到 BOOTIF 这个变量,他记录的就是 pxe 启动的网卡mac地址,通过mac地址去遍历识别的网卡,如果一致,就用这个mac来发送DHCP,也就是执行 udhcpc 。这样就可以避免这个问题了。
目前现象,看起来是, pxe 注册时,使用的网卡,和进入ramdisk系统后,再请求dhcp的网卡不是一个。 然后造成的问题是: 1)虽然我注册时,指定的是MAC1; 2)pxe boot启动时,用的是另一张网卡,MAC2,然后dhcp server收到请求后,从DHCP Request中 获取到这个MAC2,再反写到数据库,将MAC1覆盖了; 3)然后流程继续,往下后,以MAC1,发送DHCP请求,但是由于数据库备修改成MAC2了,就无法找到,就无法分配成功了
@522623905 可以拔掉一条网卡的网线吗?保证 pxe 阶段出来的 dhcp 请求都走一张网卡
@522623905 这个逻辑有道理,我改进下 yunionos 里面的那个脚本试试
遇到同一个问题了 请问这个有修复吗
遇到同一个问题了 请问这个有修复吗
@vincentiss 暂时还没有修复,争取发在下个版本修复。
If you do not provide feedback for more than 37 days, we will close the issue and you can either reopen it or submit a new issue.
您超过 37 天未反馈信息,我们将关闭该 issue,如有需求您可以重新打开或者提交新的 issue。
Request URL: https://10.103.192.30/api/v2/hosts Request Method: POST 参数为: access_ip: "10.103.192.140" access_mac: "10:70:fd:88:57:2a" enable_pxe_boot: true ipmi_ip_addr: "10.103.193.22" ipmi_password: "admin" ipmi_username: "admin" name: "metal" no_prepare: false project_domain: "default"
在基础资源-》物理机-》添加物理机,的界面中,选择的是PXE引导注册。其中,指定了ipmi地址、用户名和密码、管理口IP选择的是dhcp子网的静态IP,并且也填充了物理机的eth0的mac地址。但是还是提示: [info 2023-09-08 01:51:41 pxe.(DHCPHandler).ServeDHCP(dhcp.go:83)]DHCP: from relay 10.103.192.30 packet, mac: 10:70:fd:88:57:2a [info 2023-09-08 01:51:41 pxe.(dhcpRequest).fetchConfig(dhcp.go:238)] Not found baremetal by mac: 10:70:fd:88:57:2a [warning 2023-09-08 01:51:41 dhcp.(DHCPServer).serveDHCP.func1(server.go:124)]DHCP: handler serve error: Empty packet config [info 2023-09-08 01:51:43 pxe.(DHCPHandler).ServeDHCP(dhcp.go:83)]DHCP: from relay 10.103.192.30 packet, mac: 10:70:fd:88:57:2a [info 2023-09-08 01:51:43 pxe.(dhcpRequest).fetchConfig(dhcp.go:238)] Not found baremetal by mac: 10:70:fd:88:57:2a [warning 2023-09-08 01:51:43 dhcp.(DHCPServer).serveDHCP.func1(server.go:124)]DHCP: handler serve error: Empty packet config