构建机房运维基础架构(二): 自动装机系统原理

接着上篇(机房装机环境搭建),说说实现一个自动装机系统的原理,实际上我的理想的装机方式是能够把一个裸机房(只有网络,没有任何已经安装好的机器)所有的机器都通过远程的方式安装起来,而不用先手动在本机房安装一台”安装服务器”,要做到这一点,需要把本机房和远程机房控制卡网络和机器内网都打通,让本机房的机器上架之后控制卡网卡可以从远程机房的DDNS获取IP,内网网卡可以通过远程机房的DHCP获取IP,如此即可。豌豆荚现在只打通了内网,控制卡网没有打通,这是后续可以做的,其实这很牛逼的。

我们用的机器基本上是DELL的,所以本文介绍一下DELL服务器自动装机的原理,这里所说的自动装机指的是 服务器上架之后,通过机器的SN 来装机的过程,单机安装不到10分钟时间,工程师只需要点一下鼠标。

首先我们买的机器有一个出厂设置,最主要的是控制卡的网络要设置成DHCP,我们在机房搭建了DDNS服务,控制卡通过DDNS来获取IP,同时控制卡DHCP的时候会带上主机名(格式是:idrac-SN),所以DDNS也会记录下主机名和IP的映射关系。这样,机器上架后我们就可以通过SN 来解析到控制卡的IP了,这是自动装机的基础。

这里假设从第二块网卡装机(内网)。

 

装机过程:

1.拿到机器控制卡 IP (ddns) 和 密码

 

2.检查SN (控制卡ip是用sn从DDNS获取的,连上控制卡之后检查下sn是不是对的,为了安全嘛)

 

3.拿到网卡信息

(先ssh root@控制卡IP 后 再执行下面命令)

/admin1-> racadm get NIC.NICConfig
NIC.NICConfig.1 [Key=NIC.Integrated.1-1-1#NICConfig]
NIC.NICConfig.2 [Key=NIC.Integrated.1-2-1#NICConfig]
NIC.NICConfig.3 [Key=NIC.Integrated.1-3-1#NICConfig]
NIC.NICConfig.4 [Key=NIC.Integrated.1-4-1#NICConfig]

如果从第二块网卡装机,那么拿到的是 NIC.Integrated.1-2-1

还有一种网卡叫 NIC.Embedded,那么第二块网卡是 NIC.Embedded.2-1-1

 

4.设置启动顺序

如果 用 NIC.Integrated.1-2-1  ,启动顺序设置成HardDisk.List.1-1,NIC.Integrated.1-2-1

查看用:

racadm get BIOS.BiosBootSettings.BootSeq

设置启动顺序用:

racadm set BIOS.BiosBootSettings.BootSeq HardDisk.List.1-1,NIC.Integrated.1-2-1

生效:
(我发现有的机器不需要执行这步,只执行上一个命令就行,难道是版本的问题 或者 ?)
(增加 jobqueue,让设置重启生效(因为重启和设置需要挺长时间,最好sleep一段时间 。)

racadm jobqueue delete –all

racadm jobqueue create BIOS.Setup.1-1 -r pwrcycle -s TIME_NOW

sleep 600

另外,看jobqueue 可以用 命令  racadm jobqueue view

 

5.设置第二块网卡支持PXE启动

下面是可以参考的一个函数:

def enable_nic_pxe(self, nic):
    if nic == "NIC.Embedded.2-1-1":
        cmd1 = r"racadm set NIC.NICConfig.2.LegacyBootProto PXE"
        cmd2 = r"racadm jobqueue create NIC.Embedded.2-1-1 -r pwrcycle -s TIME_NOW"
    elif nic == "NIC.Embedded.1-1-1”:
        cmd1 = r"racadm set NIC.NICConfig.1.LegacyBootProto PXE"
        cmd2 = r"racadm jobqueue create NIC.Embedded.1-1-1 -r pwrcycle -s TIME_NOW"
    elif nic == "NIC.Integrated.1-2-1":
        cmd1 = r"racadm set NIC.NICConfig.2.LegacyBootProto PXE"
        cmd2 = r"racadm jobqueue create NIC.Integrated.1-2-1 -r pwrcycle -s TIME_NOW"
    elif nic == "NIC.Integrated.1-1-1":
        cmd1 = r"racadm set NIC.NICConfig.1.LegacyBootProto PXE"
        cmd2 = r"racadm jobqueue create NIC.Integrated.1-1-1 -r pwrcycle -s TIME_NOW"
    else:
        return "nic not support"

    cmd = r"racadm jobqueue delete --all"
    self.ssh_cmd(cmd)
    self.ssh_cmd(cmd1)
    self.ssh_cmd(cmd2)

    time.sleep(600)

cmd1 命令是设置;

cmd2 是增加 jobqueue,让设置立即重启生效

 

6.设置系统从PXE启动一次

racadm config -g cfgServerInfo -o cfgServerBootOnce 1

racadm config -g cfgServerInfo -o cfgServerFirstBootDevice PXE

 

7.重启

racadm serveraction powercycle

 

8.拷贝ks配置文件(为了避免手动输入; 装完之后要记得删除ks文件)

拿到第二块网卡的MAC地址

/admin1-> racadm getsysinfo -s

System Information:
System Model            = PowerEdge R720xd
System Revision         = I
System BIOS Version     = 2.1.3
Service Tag             = 5NK6G02
Express Svc Code        = 12308526722
Host Name               =
OS Name                 =
OS Version              =
Power Status            = ON
Fresh Air Capable       = Yes

Embedded NIC MAC Addresses:
NIC.Integrated.1-3-1    Ethernet                = F8:BC:12:34:E9:EE
WWN                     = F8:BC:12:34:E9:EE
NIC.Integrated.1-4-1    Ethernet                = F8:BC:12:34:E9:EF
WWN                     = F8:BC:12:34:E9:EF
NIC.Integrated.1-1-1    Ethernet                = F8:BC:12:34:E9:EC
WWN                     = F8:BC:12:34:E9:EC
NIC.Integrated.1-2-1    Ethernet                = F8:BC:12:34:E9:ED
WWN                     = F8:BC:12:34:E9:ED

把ks 配置文件 拷贝到 pxelinux.cfg 目录下,名称是处理后的MAC地址,比如:

F8:BC:12:34:E9:ED

====>

01-f8-bc-12-34-e9:ed

处理方式是 把 冒号 换成 – ,大写换成小写,前面加上 01-

 

目前装机系统没有页面,只有 API,我们通过 Jenkins 调用,界面如下:

f01f53c9-3401-4c1b-9431-00941d615e79

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注