Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

[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

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

Итак, я бы создал файл с именем 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

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

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

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

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

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

За наших imb blade шассиэто будет запускать это на шасси

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

Для некоторых dell 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), я надеюсь, что по крайней мере это может быть интересно.

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

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

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