我有 200 多台电脑可以提供智能平台管理接口服务。服务器由几家不同的公司 (SuperMicro、Dell 等) 制造,大约有 5 家不同的供应商提供 6-7 种 BMC 型号,每种型号都有自己的特性。
到目前为止,我们一直使用 DHCP 和手动配置每个 BMC 的组合来配置 BMC。手动配置可以使用可启动 CD-ROM、从 BIOS 配置(如果支持)或从主机操作系统使用类似以下实用程序进行配置ipmitool,自由IPMI等,或者如果我们可以确定设备的网络地址,则可以远程使用 ipmitool。
但是,这种手动配置相当繁琐。在某些情况下,我们想要全局更改所有 BMC 上的设置,这需要管理员针对数十个框运行命令。由于 BMC 由不同的供应商提供,并且每种型号的 BMC 可能都有自己的特性,因此相同的命令并不总是适用于所有 BMC。
是否有任何实用程序允许我在数十个盒子上批量配置 BMC?假设我想在数十个不同的 BMC 上查询参数,或更改密码,禁用对 WebUI 的 HTTP 访问或禁用臭名昭著的密码零安全漏洞。
任何允许我更新 BMC 固件的实用程序都会给我加分,这对于缓解存在多个安全漏洞
答案1
我可能会用Ansible。它是一个非常简单的配置管理/编排引擎,比 Puppet 更容易上手(Puppet 曾经是我的首选,但现在不总是这样了,因为我发现了 Ansible)。
Ansible 的优势在于它可以直接通过 SSH 进行通信,因此您只需使用现有的 SSH 凭据和工作流程即可开始使用。
如果您当前正在使用 ipmitool 配置 BMC,您可以执行以下操作:
定义一个 Hosts 文件——这将告诉 Ansible 哪些主机在骨科组(在本例中),以及在哪个组上运行东西。
[bmc]
192.168.1.100
192.168.1.101
192.168.1.102
等等...您也可以在该文件中使用主机名,只要它们是可解析的。
然后创建一个“剧本”,即在主机组中的每个主机上运行的一组命令。您需要有这种自上而下的目录布局:
ansible/
playbooks/
bmc.yml
roles/
bmcconfig/
files/
handlers/
main.yml
tasks/
main.yml
templates/
group_vars/
all
剧本有角色,它们是一些可以分解并重复使用的配置小部分。
因此,我将创建一个名为bmc.yml
(所有 Ansible 配置都在 YAML 文件中)的文件
---
- name: Configure BMC on the hosts
hosts: bmc
user: root
roles:
- bmcconfig
然后,roles/bmcconfig/tasks/main.yml
您就可以开始列出要在每个主机上运行的命令,以便与 ipmi 进行通信。
---
- name: Install ipmitool
apt: pkg=ipmitool state=installed
- name: Run ipmitool config
shell: ipmitool -your -options -go -here
当你运行剧本时,每个角色ansible-playbook -i hosts bmc.yml
列出的命令tasks/main.yml
将按从上到下的顺序在bmc
主机组中的每个主机上执行hosts
group_vars/all
是一个有趣的文件,它允许您定义可以在剧本中使用的变量和值的键值对。
所以你可以定义类似
ipmitool_password: $512315Adb
在你的group_vars/all
结果中,你将能够得到类似的东西:
shell: ipmitool -your -options -go -here --password=${ipmitool_password}
在剧本中。
你可以在以下网址找到更多关于如何使用“模块”的信息 - Ansible 的组件,它们允许你执行一些操作,以及如何编写自己的模块 :D 等等。Ansible 文档页面。
答案2
我编写了一个小型 Python 工具来在我们的 1000 台机器上运行命令(以及它们的 bmc、drac、ilo 和 imm)
我编写了一个名为vsc-管理我可以在其中运行发送到服务器或 bmc 的命令,然后配置哪种类型的机器需要什么命令。
我有几个类结合了这些命令的混合,
因此对于具有即时它将 ssh 到 imm,然后运行power off
(以一种 expect-script 的方式)
对于我们的imb 刀片机箱它将在底盘上运行
power -%(command)s -T system:blade[%(blade)s]
对于一些戴尔它将在(主节点的)操作系统上运行它
idracadm -r %(hostname)s -u root -p '%(password)s' serveraction %(command)s
对于我们较新的 hp 系统来说智能管理界面(这些天我越来越多地看到)它将在主服务器上运行这个:
ipmitool -I lanplus -H %(hostname)s -U %(user)s -P '%(password)s' chassis power %(command)s
或者需要较新的戴尔系统ipmitool -I open
,您可能需要稍微使用该协议。
对于 ipmi 标准中未包含的设置,我已经从 DMTF SMASH CLP,例如打开定位器指示灯:
start /system1/led1
所有这些都可以在一个可以从我们的笔记本电脑上运行的命令行工具中进行,它将连接到正确的主节点,为正确的节点运行正确的命令,并返回输出,如果有的话,还会返回一个额外的错误列表(基于 stderr 和/或 exitcode 上的输出)
事实证明这非常方便,并且现在添加对新类硬件的支持相对容易(这要归功于大多数供应商现在完全支持 ipmi 和 DMTFSMASHCLP)
这不适合初始配置(它需要 bmc 具有唯一的 ip 和正确的网关,但这是我们的供应商在交付时需要提供给我们的),但可以做几乎任何事情(还可以在主机操作系统上运行任意命令,并自动安排停机时间icinga/nagios当你重新启动一个节点,和/或一次确认 icinga/nagios 中的 1000 个主机和服务时)
更新 bmc 固件并添加对我们交换机的支持是计划中的未解决的问题。
更新
因为至少有些人似乎感兴趣,所以我今天对它进行了最后的润色,并将其开源于 https://github.com/hpcugent/vsc-manage
虽然这主要针对我们自己的工作流程(quattor 和/或 pbs),但我希望它至少可以很有趣。
答案3
我很惊讶没有人提到 MAAS(http://maas.io/),它完全符合您的要求。它可以自动配置和管理 BMC,此外还可以将任何操作系统部署到您已加入系统的节点上。它具有 Web UI 和 RESTful API,旨在与任何自动化系统集成。
当机器首次进行 PXE 启动时,MAAS 使用带内 IPMI 自动为您设置凭据。从那时起,您可以轻松地远程启动和关闭机器。
欲了解更多详情,请查看MAAS BMC 电源类型文档展示如何为 MAAS 中列出的任何节点手动配置 BMC。