¿Cómo puedo administrar cientos de BMC de IPMI?


30

Tengo más de 200 computadoras que pueden proporcionar servicios de IPMI . Los servidores son fabricados por varias compañías diferentes (SuperMicro, Dell, etc.), y hay 6-7 modelos BMC de aproximadamente 5 proveedores diferentes, y cada modelo tiene sus propias idiosincrasias.

Hasta ahora hemos estado configurando los BMC utilizando una combinación de DHCP y configurando manualmente cada BMC. La configuración manual se puede hacer usando un CD-ROM de arranque, configuración desde el BIOS (si es compatible), desde el sistema operativo host con una utilidad como ipmitool , freeipmi , etc. o remotamente usando ipmitool si podemos determinar la dirección de red del dispositivo.

Sin embargo, esta configuración manual es bastante tediosa. En algunos casos, queremos cambiar una configuración global en todos los BMC, lo que requiere que un administrador ejecute un comando contra docenas de cuadros. Dado que los BMC son proporcionados por diferentes proveedores y cada modelo de BMC puede tener sus propias idiosincrasias, el mismo comando no siempre funciona en todos los BMC.

¿Hay alguna utilidad que me permita configurar en masa los BMC en docenas de cajas? Digamos que quiero consultar un parámetro en docenas de BMC diferentes, o cambiar la contraseña, desactivar el acceso HTTP a la WebUI o desactivar el infame agujero de seguridad de cifrado cero .

Puntos de bonificación para cualquier utilidad que me permita actualizar el firmware de BMC, que es necesario para mitigar varias vulnerabilidades de seguridad


3
Esto seguramente parece algo que podrías hacer si marionetas / colectivo. Utiliza facter , posiblemente con algunos datos personalizados para detectar qué tipo de dispositivo tiene, luego configura las cosas usando títeres, o presionando comandos con mcollective.
Zoredache

También es posible que desee echar un vistazo a xcat . No es tan sofisticado como títere cuando se trata de la gestión de la configuración, put ha integrado un shell distribuido, que puede operar en grupos, y se integra estrechamente con IPMI.
Isaac

Puppet Razor también puede ser una solución, aunque todavía no lo he investigado
Stefan Lasiewski

Estoy en Puppetconf y acabo de hablar con el gerente de proyecto de Mcollective (también conocido como Puppet Enterprise Orchestration). De Mcollective administra sus nodos (en el nivel del sistema operativo), luego hacer que esto funcione en el nivel de IPMI parece estar bastante fuera de lo que Mcollective fue diseñado para. Pero probablemente sea posible.
Stefan Lasiewski

Respuestas:


16

Probablemente usaría Ansible . Es un motor de gestión / orquestación de configuración muy simple que es mucho más sencillo de comenzar que Puppet (Puppet solía ser mi opción preferida para esto, pero no siempre ahora, después de haber descubierto Ansible).

El beneficio de Ansible aquí es que se comunica directamente a través de SSH, por lo que podrá comenzar a usar solo sus credenciales y flujo de trabajo de SSH existentes.

Si actualmente está configurando sus BMC con ipmitool, podría hacer algo como:

Definir un archivo Hosts: esto le dice a Ansible qué hosts están en el grupo bmc (en este caso) y en qué ejecutar cosas.

[bmc]
192.168.1.100
192.168.1.101
192.168.1.102

Y así sucesivamente ... También puede usar nombres de host en ese archivo, siempre que sean resolubles.

Luego, cree un "libro de jugadas", que es el conjunto de comandos para ejecutar en cada host en un grupo de host. Desea tener este tipo de diseño de directorio de arriba hacia abajo:

ansible/
   playbooks/
      bmc.yml
      roles/
        bmcconfig/
           files/
           handlers/
             main.yml
           tasks/
             main.yml
           templates/
   group_vars/
      all

Un libro de jugadas tiene Roles , que son pequeñas secciones de configuración que puede desglosar y reutilizar.

Así que crearía un archivo llamado bmc.yml(La configuración de todos los Ansible está en archivos YAML)

---
- name: Configure BMC on the hosts
  hosts: bmc
  user: root
  roles: 
    - bmcconfig

Luego roles/bmcconfig/tasks/main.yml, puede comenzar a enumerar los comandos que se ejecutarán en cada host para comunicarse con ipmi.

---
  - name: Install ipmitool
    apt: pkg=ipmitool state=installed
  - name: Run ipmitool config
    shell: ipmitool -your -options -go -here

Cuando ejecuta el libro de jugadas, ansible-playbook -i hosts bmc.ymllos comandos enumerados tasks/main.ymlpara cada rol se ejecutarán en orden descendente en cada host que se encuentre en el grupo de bmchost enhosts

group_vars/all es un archivo interesante, le permite definir pares clave-valor de variables y valores que pueden usarse en sus libros de jugadas.

para que puedas definir algo como

ipmitool_password: $512315Adb

en su group_vars/ally como resultado, podría tener algo como:

shell: ipmitool -your -options -go -here --password=${ipmitool_password}

en el libro de jugadas.

Puede encontrar más información sobre cómo usar los "módulos": los componentes de Ansible que le permiten hacer cosas, cómo escribir su propio: D, etc. en las páginas de documentación de Ansible .


12

He escrito una pequeña herramienta de Python para ejecutar comandos en nuestras 1000 máquinas (y sus bmc, drac, ilo e imm)

Lo que hice fue escribir un python-framework llamado vsc-manage donde puedo ejecutar comandos que se envían al servidor o al bmc, y luego configuré qué tipo de máquina necesita qué comando.

Tengo varias clases que combinan una combinación de estos comandos,

Entonces, para máquinas con un imm, se enviará al imm y se ejecutará power off(de una manera esperada)

Para nuestros chasis imb blade , se ejecutará esto en el chasis

power -%(command)s -T system:blade[%(blade)s]

Para algunos dell dracs , ejecutará esto en el sistema operativo (de un nodo maestro)

idracadm -r %(hostname)s -u root -p '%(password)s' serveraction %(command)s

Para nuestros sistemas HP más nuevos que hacen ipmi (y veo más y más en estos días) lo ejecutará en el maestro:

ipmitool -I lanplus -H %(hostname)s -U %(user)s -P '%(password)s' chassis power %(command)s

o los nuevos sistemas Dell necesitan ipmitool -I open, es posible que deba jugar un poco con el protocolo

Para configuraciones no incluidas en el estándar ipmi, he implementado algunas cosas del DMTF SMASH CLP , por ejemplo, encender el led localizador:

start /system1/led1

Todo esto en una herramienta de línea de comandos que se puede ejecutar desde nuestras computadoras portátiles, que se conectará al nodo maestro correcto, ejecutará el comando correcto para el nodo correcto y devolverá la salida, con una lista adicional de errores si los hay (según salida en stderr y / o código de salida)

Esto ha demostrado ser muy útil, y agregar soporte para una nueva clase de hardware ahora es relativamente fácil (gracias al hecho de que la mayoría de los proveedores sí admiten totalmente ipmi y DMTFSMASHCLP ahora)

Esto no es adecuado para la configuración inicial (necesita que el bmc tenga una IP única y una puerta de enlace correcta, pero esto es lo que nuestros proveedores deben proporcionarnos en el momento de la entrega) pero puede hacer casi cualquier otra cosa (también ejecutar comandos arbitrarios en el host que opera sistema y programar automáticamente el tiempo de inactividad en icinga / nagios cuando reinicia un nodo, y / o reconocer 1000 hosts y servicios en icinga / nagios a la vez)

Actualizar el firmware de bmc y agregar soporte para nuestros conmutadores son problemas pendientes que están planificados.

ACTUALIZAR

Dado que al menos algunas personas parecían interesadas, le he dado un último esmalte hoy y lo he encontrado en https://github.com/hpcugent/vsc-manage

Si bien esto está muy dirigido a nuestro propio flujo de trabajo (quattor y / o pbs), espero que al menos pueda ser interesante.


¡Gracias por esto! ¿Hay alguna ventaja que su trabajo tenga sobre las soluciones establecidas como Ansible?
MikeyB

Nunca antes había escuchado de Ansible, definitivamente lo investigará.
Jens Timmerman

Por lo que yo veo, Ansible todavía no tiene soporte para impi y DMTF SMASH.
Jens Timmerman

Es interesante, Jens. Gracias por compartir este proyecto. Ansible + vsc-manage comienza a parecer realmente útil al tratar con servidores en masa.
ILIV

ILIV, creo que sería bueno si tuviera algo de tiempo para agregar todas las funciones de vsc-manage a ansible ;-)
Jens Timmerman

3

Me sorprende que nadie haya mencionado MAAS ( http://maas.io/ ), que hace exactamente lo que estás buscando. Puede autoconfigurar y administrar BMC y, además, implementar cualquier sistema operativo en los nodos que ha alistado en el sistema. Tiene una interfaz de usuario web y una API RESTful, y está diseñada para integrarse con cualquier sistema de automatización.

Cuando una máquina PXE arranca por primera vez, MAAS usa IPMI en banda para configurar las credenciales automáticamente. A partir de ese momento, puede arrancar y apagar una máquina fácilmente de forma remota.

Para obtener más detalles, consulte la documentación de Tipos de energía BMC de MAAS que muestra cómo configurar manualmente un BMC para cualquier nodo alistado en MAAS.


Un buen consejo, gracias. Se ve muy bien. El MAAS de Ubuntu parece hacer un buen aprovisionamiento, gestión del ciclo de vida y parece que tiene algunas herramientas útiles de gestión de IPMI. Ya usamos The Foreman, que ya hace algo de esto. Sin embargo, la gestión de IPMI de The Foreman es bastante débil y no proporciona agrupación o una estructura organizativa, pero al menos tiene algo. Lo usamos en combinación con un puñado de otras herramientas para administrar todo el kit y el caboodle.
Stefan Lasiewski

Tenga en cuenta que Foreman tiene organizaciones y ubicaciones (ver proyectos.theforeman.org/projects/foreman/wiki/… ) a partir de v1.1. Puede usar estas características (junto con los Grupos de host) para proporcionar colecciones de hosts razonablemente granulares (incluso jerárquicas con soporte de pares de parámetros o valores clave).
mxmader
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.