那段时间,去感受下公司的pxe装机平台。 这边的装机的流程本身就高度的自动化,还额外加了很多的自定义的模块。那么一说 pxe装机,大家觉得很简单的事。 但是我们经常会遇见些皮毛又让人蛋疼的事,尤其是批量装机后,让业务线验收的时候,我们要先ping主机,然后ssh测试下,raid配置检查下,初始化下。。。
有朋友说,可以用自动化脚本搞呀,我们这边也确实是这么搞的,但还是会出现手忙脚乱的现象,我相信很多朋友也都遇见过,小量的pxe装机,大家都很稳妥的,我这段时间和同事测试,20个服务器之内的,大家都很是胸有成竹。
但是数目一大,那么问题就来了,服务器一杂,配置的不通,这时候就会出现。。。。 其实就单纯的用cobbler装机,肯定不会很快的又特别顺利的配置完毕。 当一切顺利的时候还好说,但是万一出问题,比如是raid情况,有些是没有初始化,有些是没有根据业务线需求配置各种信息,还有些确实是装完了,但是让人恼火的是ping不通,ssh登录不了,kerberos也登录不了。。。。等等。。。
咱们静下心,想想要做平台话的原因是:
以后不用手忙脚乱的做检测,要让我们知道各个服务器的进度到那里了。 是否重启了,是否划入了装机的vlan,是否收到了dhcp给的ip,是否进行安装,是否配置了ip,是否初始化了,是否部署了kerkeros ,自动初始化相关的业务线的服务,自动cmdb注册,配置saltstack环境 等等
前端 handlebars jquery
后端 python flask saltstack
服务 cobbler ipmi
自动化装机平台的处理流程:
业务线提需求——领导批准——通告网络组——配置pxe以及收集服务器信息——ipmi控制pxe——自动配置raid——装机——配置ip——获取他要做的事情——初始化信息——测试环境——通告基础运维组——通告业务线
我这里简单说下要点:
我们知道cobbler 已经有了web ui 页面, 但是好多东西和自己这边的工单和数据平台接口不搭边,干脆就自己搞算了。 个人觉得开发的成本比看cobbler ui的成本要省点。 自己写的,很容易和别的系统做对接。
自动化装机虽然保证了自动化和解放人力,但是在流程性上一定要格外小心,别你妹的线上的机器给装了,为了确保这一点,有能力的公司,一般都会配置一个vlan ,pxe就在这个vlan中,这个pxe在这vlan中只能和pxe服务器、同级的服务器有通信能力。pxe有双网卡,一个是pxe,另一个是在外面的。有些服务器时常的抽风,重启后会pxe启动,要是你在装机vlan下,他会拿到dhcp的ip和tftp的地址。。。。这就糟了。。。
自动配置raid ,一般都是需要把一堆的raid工具集成到一个小系统里面,类似winpe的东西,这样我们可以在小系统内完成raid的配置。
ipmi管理,现在服务器都有ipmi的东西的,我们通过ipmitool工具对服务器进行重启,以及boot配置,通过浏览器进行console控制。
获取他要做的事情,我们在pxe做了一个小server,比如临时的调整,已经信息的收集,脚本的运行。
通告,客户端把所有事都搞完了,给pxe的那个小server发个包,说自己已经完成,申请进入数据vlan
他会给你发个邮件,或者在平台中看到,你点确认后,他会划入数据vlan
装机服务器中有个脚本,一直ping外网,当他能访问外网,就说明 一切都ok了。他会发邮件并给平台发个post数据。
关于这些cobbler,我相信大多数的朋友已经搞过好多了,我也就不多说了。
需要注意的话,更好的自动化还需要多点的功能,比如 ipmitool的用法,以及通告完成,自动划入划出vlan,初始化各种信息和密码。。。。
先说下ipmitool
通过ipmitool主要可以实现以下几种操作:
1、查看主板的各种传感器信息,如cpu文档,主板电压等。
2、查看电源状态,并远程硬关机和开机。
3、远程指定boot引导顺序
4、远程视图,此功能是在ipmi的基础上改进bmc实现kvm功能(Keyboard, Video, Mouse)
5、远程文本视图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
1、先是查看和配置
ip信息和用户信息
ipmitool
-
H
ip
-
U
user
-
P
xxxx
lan
print
1
#1为网络(lan)的信道(channel) ,默认是1, 运行命令时可以省略不输入。
ipmitool
-
I
open
lan
print
1
#此命令和上面效果一样,不过此处是在本地执行,上一条是远程执行
ipmitool
-
I
open
lan
set
1
ipaddr
192.168.0.120
#在隧道1设置ip
ipmitool
-
I
open
lan
set
1
netmask
255.255.255.0
#在隧道1设置掩码
ipmitool
-
I
open
lan
set
1
defgw
ipaddr
192.168.0.254
#在隧道1设置网关
ipmitool
-
I
open
lan
set
1
access
on
#开启隧道1访问
ipmitool
-
H
ip
-
U
root
-
P
xxxx
user
list
#查看用户列表
ipmitool
-
H
ip
-
U
root
-
P
xxxx
user
set
password
2
#设置用户密码
2、查看传感器信息(对应管理
A)
ipmitool
-
H
ip
-
U
root
-
P
xxxx
sdr
#打印传感器数据
ipmitool
-
H
ip
-
U
root
-
P
xxxx
sensor
#打印传感器详细数据
3、远程开关机
ipmitool
-
H
ip
-
U
root
-
P
xxxx
power
off
#硬关机,直接切断电源
ipmitool
-
H
ip
-
U
root
-
P
xxxx
power
soft
#软关机,即如同轻按一下开机扭
ipmitool
-
H
ip
-
U
root
-
P
xxxx
power
on
#硬开机
ipmitool
-
H
ip
-
U
root
-
P
xxxx
power
reset
#硬重启
ipmitool
-
H
ip
-
U
root
-
P
xxxx
power
status
#获取当前电源状态
4、设置
boot启动项
ipmitool
-
H
ip
-
U
root
-
P
xxxx
chassis
bootdev
<
device
>
bootdev
<
device
>
[
clear
-
cmos
=
yes
|
no
]
bootdev
<
device
>
[
options
=
help
,
.
.
.
]
none
:
Do
not
change
boot
device
order
pxe
:
Force
PXE
boot
disk
:
Force
boot
from
default
Hard
-
drive
safe
:
Force
boot
from
default
Hard
-
drive
,
request
Safe
Mode
diag
:
Force
boot
from
Diagnostic
Partition
cdrom
:
Force
boot
from
CD
/
DVD
bios
:
Force
boot
into
BIOS
Setup
floppy
:
Force
boot
from
Floppy
/
primary
removable
media
|
ipmitool就可以实现与硬件交互,推荐使用,你也没有别的好选择。
自动中可以配合重启,pxe,获取电源状态,重新配置密码。
需要说明的一点: ipmi的管理,有时经常的抽风,很让人郁闷~ dell还可以,尤其是hp dl系列 ibm x3… 系列的服务器 ,让人抓狂。经常会遇见登录不了,果断时间又可以了,所以大家需要把错误的管理ip暂时堆放到队列里面,等sleep 30s后 再去获取,这时候就90%的可能性成功了。
关于ipmi的管理,我是用python调用ipmitool工具写的,各种模块写完,差不多有1800行的代码量,说实话很费心。因为各个服务器用的管理卡型号不一样,有时会莫名的修改错误,比如 lanplus和 user list 。
有时就需要亲自上手改ip和密码了。
对于自动划入装机vlan,他的标准做法是你提供ip和mac地址,然后从交换机上测试,ip和mac匹配的话,进行划入装机vlan。
有时候因为各种的错误没有ip地址了,这样的话,我们需要用ipmi来重启服务器,在交换机中可以看到up down的信息,当端口down的时候,我们用ipmitool的工具查看是否真的电源down状态,当up的时候,看看是否电源已经开启了。通过这两点判断准确性,不然碰巧有个sb重启了,你给划入装机vlan。。。。这就。。。
自动划入vlan实现的方式是,定期去交换机拿数据,然后对比信息,推送信息和指令。
自动raid的配置, 我们是是封装的一个小内核系统,附带了厂家的raid厂商工具,实现自动的配置。
大家可以用MegaCli,他可以实现这些功能的。
简单提下他的用法,详细的大家搜搜哈~
1
2
3
4
5
6
7
8
9
10
11
|
创建一个
raid5
阵列,由物理盘
2
,
3
,
4
构成,该阵列的热备盘是物理盘
5
#/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r5 [1:2,1:3,1:4] WB Direct -Hsp[1:5] -a0
创建阵列,不指定热备
#/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r5 [1:2,1:3,1:4] WB Direct -a0
删除阵列
#/opt/MegaRAID/MegaCli/MegaCli64 -CfgLdDel -L1 -a0
在线添加磁盘
#/opt/MegaRAID/MegaCli/MegaCli64 -LDRecon -Start -r5 -Add -PhysDrv[1:4] -L1 -a0
阵列创建完后,会有一个初始化同步块的过程,可以看看其进度。
#/opt/MegaRAID/MegaCli/MegaCli64 -LDInit -ShowProg -LALL -aALL
|
对于信息的定制,是分两种方式的。cobbler system就可以实现根据mac地址分配不同的业务。我们也可以通过c s的框架来获取业务的需求。装机后,会去server端 也就是到pxe端get任务数据。
通告的方式一是调用exchange的接口发邮件,二是 提交post请求,把工单的状态修改成完成。
对于平台化的思路:
我们能直接页面就定***务
这个就较简单了,把工单上被领导批准的任务取出来,然后展现到页面上。
咱们选择后,直接异步的给后端处理。后端调用cobbler接口来对参数的传递参数。
我们可以看到服务器的进度
通过后端的处理,用js模板把数据展现到页面中,我们可以看到各个主机的电源情况,ping情况,装机时间,完成的个数图表
我们可以看到各个指标完成进度
对于每个可以发送状态的情况,都要向pxe的一个server,发送他现在的情况。
比如 pxe启动,划入vlan,装机后获取到的临时ip【这个需求在pxe端监控dhcp log】,正在改需求中的ip,部署业务,初始化,已经发送邮件,已经验收。。。这些都可以发送一个状态出来,这样我们就可以知道每个服务器都在那个进度上。对于一些过慢的,咱们就直接ipmi的bmc瞅瞅原因。
这两天我首先写个简单的应用,来实现各个模块的调用及页面的数据展现。
主要是:
进度的查看,以及系统版本,ks文件,脚本,业务线的选择
我们也可以用ipmitool的文本视窗功能远程控制ipmi图形
现在已经实现了,类似小米的装机平台,在页面上看到ipmi主机情况。
这是我的实现方式,还没重定向到空放到页面上显示罢了~ 但是他的缺点也很是明显,pxe流程后,他就不能用了。 这个问题是ipmi 视图本身的bug。
有兴趣的朋友,可以搞搞saltstack cobbler的方式