主页 > 其他  > 

异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?

异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?

这个问题源于早几年前印象比较深刻的面试,面的岗位是UCloud的CDN运维交付岗,当时面试官问我,在批量PXE的时候怎么才能快速确认是否已经PXE成功了?我当时的回答是可以看dhcp服务器分配的地址数量来确定。我已经忘记了为什么我会说出这样的答案,虽然后面通过了面试,但由于其他的原因没有选择去那边工作。最近在看PXE相关的东东,想了一个不太成熟的方案,以此来记录一下。

一、我的方案效果

PXE服务管理

主机PXE效果展示

主机PXE完成

主机PXE失败

二、实现原理

实现原理非常简单,只需要PXE执行前和执行后分别执行curl命令,将数据post到PXEServer即可。以下是我在ks.cfg中使用的curl脚本

%pre --log=/var/log/kickstart_pre.log export PXEServer=192.168.137.6 curl -X POST -H "Content-Type: application/json" -d "{\"PASSWORD\": \"PXEServer123\", \"HostUUID\": \"$(dmidecode -s system-uuid)\",\"HostMAC\":\"$(cat /sys/class/net/*/address | grep -v \"^00\" | head -n1)\",\"HostStatus\":\"0\",\"Message\":\"Start Install OS...\"}" http://${PXEServer}/PxeProcess/ %end %post --log=/var/log/kickstart_post.log export PXEServer=192.168.137.6 curl -X POST -H "Content-Type: application/json" -d "{\"PASSWORD\": \"PXEServer123\", \"HostUUID\": \"$(dmidecode -s system-uuid)\",\"HostMAC\":\"$(cat /sys/class/net/*/address | grep -v \"^00\" | head -n1)\",\"HostStatus\":\"100\",\"Message\":\"Install OS Complete\"}" http://${PXEServer}/PxeProcess/ %end

这里可以自定义,比如在安装比较复杂的场景,安装完HostOS后要需要执行脚本去安装第三方包、修改配置等,可以在脚本上去执行curl命令,对不同步骤安装成功或失败做定义。

三、使用到的东东

后端:python3 + django4 + 原生http.server(用做repo源)

前端:jQuery + bootstrap v5 + bootstrap-table (不懂前端,90%的时间都消耗在这)

PXE:iPXE(兼容性比PXE强)+ dnsmasq(实现dhcp+tftp)+ ks.cfg + 操作系统ISO

四、如何使用 1、修改settings配置文件

# DHCP 地址池 DHCPCONFIG = {     'Start_IP':'192.168.137.100',     'End_IP': '192.168.137.200',     'Gateway': '192.168.137.1',     'PxeServerIP':'192.168.137.6',     'DNSServer':'8.8.8.8,114.114.114.114', # 可以填写多个,使用,分割 } PXESERVERCONFIG = {     'PXEPassword' : 'PXEServer123', # 客户端curl post的时候需要带上密码     'REPOPort': 8002, # 软件源的端口,要和ks.cfg中保持一致

2、安装dnsmasq和django

# Centos or redhat yum install dnsmasq # ubuntu or debian apt-get install dnsmasq # django pip3 install django==4.2.1

3、挂载ISO

mount /dev/sr0 pxefile/ISO

4、修改pxefile/ipxe/menu.ipxe文件

#!ipxe initrd http://${next-server}:8002/ISO/isolinux/initrd.img kernel http://${next-server}:8002/ISO/isolinux/vmlinuz \     initrd=initrd.img \     inst.ks=http://${next-server}:8002/KS/ks.cfg \     inst.repo=http://${next-server}:8002/ISO/ \     root=live:http://${next-server}:8002/ISO/LiveOS/squashfs.img \     ro rd.AUTO=1 rd_NO_LUKS LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 \     crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us boot

8002为REPOPort端口 initrd.img和vmlinuz路径要修改为ISO里面的路径

5、修改ks.cfg,将其上传到pxefile/KS目录下中 6、运行项目

python3 manager.py runserver 0:80

PS:本文只是记录个思路,有解但可能不是最优解~ 我是运维少年,如果文章对您有帮助,欢迎关注我的同名公众号~

标签:

异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?