Как я могу управлять сотнями BMC IPMI?

30

У меня более 200 компьютеров, которые могут предоставлять услуги IPMI . Серверы производятся несколькими разными компаниями (SuperMicro, Dell и т. Д.), И есть 6-7 моделей BMC от примерно 5 разных поставщиков, и каждая модель имеет свои особенности.

До сих пор мы настраивали BMC с помощью комбинации DHCP и вручную настраивали каждый BMC. Ручную настройку можно выполнить с помощью загрузочного компакт-диска, конфигурации из BIOS (если поддерживается), из операционной системы хоста с помощью таких утилит , как ipmitool , freeipmi и т. Д., Или удаленно, используя ipmitool, если мы можем определить сетевой адрес устройство.

Однако такая ручная настройка довольно утомительна. В некоторых случаях мы хотим изменить настройку глобально на всех контроллерах BMC, что требует, чтобы администратор запустил команду для десятков блоков. Поскольку BMC предоставляются разными поставщиками и каждая модель BMC может иметь свои собственные особенности, одна и та же команда не всегда работает на всех BMC.

Существуют ли какие-либо утилиты, которые позволяют мне массово настраивать BMC на десятках ящиков? Скажем, я хочу запросить параметр на десятках различных контроллеров BMC или изменить пароль, отключить доступ HTTP к WebUI или отключить пресловутую дыру в нулевом уровне безопасности.

Бонусные баллы за любую утилиту, которая позволила бы мне обновить прошивку BMC, что необходимо для устранения нескольких уязвимостей безопасности

Стефан Ласевский
источник
3
Это похоже на то, что вы могли бы сделать, если вы марионеточный / коллективный. Вы используете facter , возможно, с некоторыми пользовательскими фактами, чтобы определить, какой тип устройства у вас есть, затем настраиваете вещи, используя puppet, или нажимая команды с помощью mcollective.
Зоредаче
Вы также можете взглянуть на xcat . Он не настолько сложен, как puppet, когда дело доходит до управления конфигурацией, но в put встроена распределенная оболочка, которая может работать в группах и тесно интегрируется с IPMI.
Исаак
Кукольный Razor также может быть решением, хотя я еще не рассматривал его: vdatacloud.com/blogs/2012/05/23/…
Стефан Ласевский
Я нахожусь в Puppetconf, и я только что говорил с менеджером проекта для Mcollective (иначе известный как Puppet Enterprise Orchestration). Если Mcollective управляет вашими узлами (на уровне ОС), то заставить его работать на уровне IPMI кажется довольно далеко за пределами того, для чего была разработана Mcollective. Но это возможно возможно.
Стефан Ласевский

Ответы:

16

Я бы наверное использовал Ansible . Это очень простой механизм управления конфигурацией / оркестровки, с которым гораздо проще начать работу, чем с Puppet (раньше Puppet был моим выбором для этого, но не всегда сейчас, когда обнаруживал Ansible).

Преимущество Ansible здесь заключается в том, что он взаимодействует напрямую через SSH, поэтому вы сможете начать использовать только свои существующие учетные данные SSH и рабочий процесс.

Если вы сейчас настраиваете свои BMC с помощью ipmitool, вы сможете сделать что-то вроде:

Определить файл Hosts - сообщает Ansible, какие хосты входят в группу bmc (в данном случае) и на каких объектах запускать.

[bmc]
192.168.1.100
192.168.1.101
192.168.1.102

И так далее ... Вы также можете использовать имена хостов в этом файле, если они разрешимы.

Затем создайте «playbook», который представляет собой набор команд для запуска на каждом хосте в группе хостов. Вы хотите иметь такой вид сверху вниз каталога:

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

В Playbook есть роли , представляющие собой небольшие разделы конфигурации, которые можно разбить и использовать повторно.

Поэтому я бы создал файл с именем bmc.yml(All 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

Когда вы запускаете playbook, 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 .

Том О'Коннор
источник
12

Я написал небольшой инструмент на python для запуска команд на наших 1000 машинах (и их bmc, drac, ilo и imm)

Что я сделал, так это написал python-framework под названием vsc-manage, где я могу запускать команды, которые либо отправляются на сервер, либо в bmc, а затем настраивать, какой тип машины нуждается в какой команде.

У меня есть несколько классов, которые сочетают в себе сочетание этих команд,

Так что для машин с imm он будет ssh к imm и запускается power off(в виде сценария ожидаемого сценария)

Для нашего шасси imb blade оно будет работать на шасси

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

Для некоторых Dll Dracs он будет запускать это на ОС (главного узла)

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

Для наших новых систем hp, которые работают с ipmi (и я вижу все больше и больше в эти дни), он будет работать на главном:

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

или для более новых систем Dell ipmitool -I openвам может понадобиться немного поиграть с протоколом.

Для настроек, не включенных в стандарт ipmi, я реализовал некоторые вещи из DMTF SMASH CLP , например, включив светодиод локатора:

start /system1/led1

Все это в инструменте командной строки, который можно запустить с наших ноутбуков, который подключится к нужному главному узлу, выполнит правильную команду для правого узла и вернет вывод с дополнительным списком ошибок, если таковые имеются (на основе вывод на stderr и / или код выхода)

Это оказалось очень удобным, и теперь добавить поддержку для нового класса оборудования довольно легко (благодаря тому факту, что большинство производителей полностью поддерживают ipmi и DMTFSMASHCLP сейчас)

Это не подходит для начальной конфигурации (для этого требуется, чтобы bmc имел уникальный ip и правильный шлюз, но это то, что наши поставщики должны предоставить нам при доставке), но может делать практически все остальное (также запускать произвольные команды на хосте, работающем). система и автоматически планировать время простоя в icinga / nagios при перезагрузке узла и / или одновременном подтверждении 1000 узлов и служб в icinga / nagios)

Обновление микропрограммы bmc и добавление поддержки для наших коммутаторов - это нерешенные вопросы, которые запланированы.

ОБНОВИТЬ

Так как, по крайней мере, некоторым людям это показалось интересным, я дал ему последний отпол сегодня и открыл его на https://github.com/hpcugent/vsc-manage.

Хотя это очень сильно нацелено на наш собственный рабочий процесс (quattor и / или pbs), я надеюсь, что это, по крайней мере, может быть интересным.

Дженс Тиммерман
источник
Спасибо за это! Есть ли какое-то преимущество в вашей работе перед устоявшимися решениями, такими как Ansible?
MikeyB
Я никогда не слышал от Ansible прежде, обязательно рассмотрим это.
Дженс Тиммерман
Насколько я понимаю, Ansible пока не поддерживает Impi и DMTF SMASH.
Дженс Тиммерман
Это интересно, Йенс. Спасибо, что поделились этим проектом. Ansible + vsc-manage начинает выглядеть действительно полезным при массовом взаимодействии с серверами.
ILIV
ILIV, я думаю, было бы неплохо, если бы у меня было время добавить все функции vsc-manage к ansible ;-)
Jens Timmerman
3

Я удивлен, что никто не упомянул MAAS ( http://maas.io/ ), который делает именно то, что вы ищете. Он может автоматически конфигурировать BMC и управлять ими, а также развертывать любую ОС на узлах, которые вы включили в систему. Он имеет веб-интерфейс и RESTful API и предназначен для интеграции с любой системой автоматизации.

Когда машина загружается PXE в первый раз, MAAS использует встроенный IPMI для автоматической настройки учетных данных. С этого момента вы можете легко удаленно загрузить и выключить компьютер.

Для получения дополнительной информации обратитесь к документации MAAS BMC Power Types, в которой показано, как вручную настроить BMC для любого узла, включенного в MAAS.

Кико
источник
Хороший совет, спасибо. Выглядит довольно круто MAAS в Ubuntu, по-видимому, обеспечивает хорошую настройку, управление жизненным циклом и, похоже, имеет несколько полезных инструментов управления IPMI. Мы уже используем The Foreman, который уже кое-что делает. Тем не менее, управление IPMI Foreman довольно слабое и не обеспечивает группировку или организационную структуру, но, по крайней мере, что-то есть. Мы используем его в сочетании с несколькими другими инструментами для управления всем комплектом и кабулой.
Стефан Ласевский,
Обратите внимание, что у Foreman есть поддержка организаций и местоположений (см. Projects.theforeman.org/projects/foreman/wiki/… ) с версии 1.1. Вы можете использовать эти функции (вместе с группами хостов) для предоставления достаточно детализированных (даже иерархических с поддержкой пары параметров или ключей) наборов хостов.
mxmader