Автоматизация развертывания сервера

28

Я обнаружил, что постоянно настраиваю почти одинаковые серверы и VPS для ряда моих клиентов, и это может занять очень много времени. Часто единственное, что меняется между каждым развертыванием, - это другой веб-сайт, который нужно обслуживать. Есть ли простой способ автоматизировать все это и заняться скучным однообразием настройки 56 одинаковых серверов?

Серверы, которые я развернул до сих пор, были только Ubuntu, но возможно, что я начну использовать другие ОС Linux или даже Windows. До сих пор я смотрел на Capistrano, но, кажется, он сосредоточен на написании небольших программ ruby ​​для работы, и у меня нет никаких знаний вообще

Джош Хант
источник

Ответы:

20

Puppet звучит идеально для того, что вы пытаетесь сделать, с оговоркой, что на данный момент нет поддержки Windows.

В вашем случае вы бы определили узел сервера с точки зрения всех пакетов, которые одинаковы для всех компьютеров. Затем вы определяете отдельные узлы как узлы, которые наследуются от Сервера, и настраиваете для них конкретные уникальные вещи.

Puppet декларативен - он позволяет вам описывать ваши блоки с точки зрения ресурсов, которые должен иметь каждый блок. Поэтому, если вы хотите ssh- вы пишете класс для этого ресурса - и внутри класса вы можете включить логику о том, как ssh вызывается немного по-другому во FreeBSD по сравнению с Ubuntu. Он также знает, как использовать yumвнутри Redhat и apt-getвнутри дистрибутивов, основанных на Debian, и portsв BSD. Теперь в вашем узле сервера у вас будет просто строка, похожая на include ssh- и puppet сделает все правильно и включит SSH на машине, и вам не нужно будет помнить, Ubuntu, Redhat или FreeBSD.

Что приятно, так это то, что все компоненты Сервера живут в одном месте - и если в какой-то момент вы добавите определение узла Сервера, ВСЕ машины обновят свою конфигурацию соответствующим образом.

Прямо сейчас я управляю только тремя коробками с помощью Puppet - но это уже окупилось. Потратив неделю на настройку блока, который мы будем использовать для демонстрации стимулов в эксперименте, оказалось, что драйвер видеокарты слишком стар в той версии Ubuntu, которую я на нем установил (8.04). Мне пришлось установить последнюю версию Ubuntu (9.04), но после этого мне просто нужно было apt-get и запустить puppet - и все, что я потратил на настройку недели, было восстановлено.

У Puppet есть немного кривой обучения, но я успешно избежал изучения Ruby - я знаю, что использую его, так как именно это написано в Puppet - но до сих пор мне удавалось просто изменять примеры в документация и рецепты в вики . Другим недостатком является то, что марионетка занимает немного больше времени, чтобы делать вещи в первый раз. Положительным моментом является то, что все, что вы изменяете на всех своих машинах, хранится в одном месте - это стандартная практика - сохранять конфигурацию вашего марионетки в системе контроля версий - чтобы вы всегда могли оглянуться назад и увидеть, как вы настраивали серверы в прошлом - или откат некоторых неудачных изменений.

Наконец, вот короткое видео, которое демонстрирует простую кукольную демонстрацию, которая быстро начала меня.

Павел Иванов
источник
3
Digg.com использует puppet для управления своими серверами, некоторые основные примеры можно найти в их блоге: blog.digg.com/?p=335 blog.digg.com/?p=562
Адам Гиббинс
Я считаю, что команда администраторов Fedora тоже использует puppet.
Мэй
9

Мы используем Cobbler и Puppet для автоматизации сборки и настройки как реальных, так и виртуальных машин.

Cobbler связывает DHCP, PXE boot и Kickstart, чтобы сделать развертывание не более чем добавлением профиля машины и нажатием кнопки питания. Для виртуальных машин koan команда выполняет (в нашем случае) магию Xen, чтобы начать установку - dom0просто введите:

koan --system vps.fqdn --server cobbler --no-gfx

затем virsh consoleсмотреть здание VPS без какого-либо взаимодействия.

Мы используем RHEL и настроили несколько профилей для разделения дисков, настройки сети и установки базовых пакетов для различных классов серверов. Cobbler поддерживает породы Debian и Ubuntu, но я никогда не пробовал. Напомним, что другие интересные применения Cobbler включают в себя запуск memtest ISO и обновление прошивки HP .

Как только наши системы построены с помощью Cobbler, Puppet вступает во владение, чтобы настроить приложения, системные демоны, зарегистрировать коробку в RHN и т. Д. Puppet работает как демон, который периодически проверяет, что конфигурация системы соответствует определенным манифестам - вы знаете, что ваши обновления прошли на все серверы. Это также отличный способ убедиться, что коробка, которая была отключена для обслуживания, имеет правильную конфигурацию, прежде чем вы вернете ее в оперативный режим.

Кукольный действительно потрясающий. Вам не нужно sudoersбрать под контроль каждый аспект вашей конфигурации - начните с того, что он управляет чем-то простым, что вам нужно настроить на каждом блоке ( это канонический пример), и возьмите его оттуда. Убедитесь, что ваши манифесты Puppet тоже версионированы; нет ничего лучше, чем легко откатиться до заведомо удачной конфигурации, не вспоминая, что настраивать.

markdrayton
источник
6

Там, где я сейчас работаю, мы должны управлять Linux-частью нашей фермы серверов, которая насчитывает чуть более 300 Linux-серверов. В основном это HP Proliants, за которыми следуют IBM 3850, некоторые блейды IBM, VMware ESX и некоторые KVM для наших внутренних серверов управления.

сапожник

Мы смотрели на сапожника, но проблема заключалась в том, что сапожник очень специфичен для RHEL / Red Hat. Нам нужно как минимум поддерживать RHEL и SLES, а Ubuntu следующая.

кукольный

Мы рассматривали Puppet, однако позже решили отказаться от него, поскольку это зависит от Ruby, что означает, что обновление Ruby может потенциально сломать нашу систему управления.

горячий провод

Hotwire - это то, что мы используем (разработано внутри, но с открытым исходным кодом), и делали это в течение последних нескольких лет. Во-первых, он инвентаризирует системы, которые будут собираться, что означает инвентаризацию центра обработки данных, стойки, оборудования, операционной системы, сети и т. Д., А во-вторых, выполняет быструю сборку и развертывание. Как только система построена, автоинвентаризация hotwire поддерживает синхронизацию инвентаря, в то время как cfengine поддерживает их. Hotwire знает об оборудовании сервера, общаясь с данными SMBIOS / DMI в BIOS через python-dmidecode .

Бонусные моменты заключаются в том, что он объединяет инвентарь и процесс сборки в один, поэтому управлять им меньше, а функция живого инвентаря хороша, как мы знаем, если что-то не так.

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

Cfengine

Мы используем cfengine, потому что кроме него и марионеток, больше ничего нет. Это на самом деле является хорошим инструментом, но «хорошо» только в зависимости от того, насколько хорошо ваши политики - если вы установите опасную политику, то маленькая ошибка может привести много вреда. Например, по политике мы не «модифицируем» файлы, мы либо заменяем их, либо нет. Также все замененные файлы имеют заголовок, который позволяет любому редактору знать, что он будет заменен при следующем запуске (он запускается через cron каждый час).

Конфигурация и все файлы, передаваемые cfengine на серверы, также хранятся в SCM, и с помощью перехватов после фиксации, где это возможно, мы проверяем синтаксис, и если это не удается, то фиксация отклоняется. Это легко для хороших приложений, таких как Apache, но не так просто для большинства корпоративных приложений.

Ксеркс
источник
Вы решили против Puppet, потому что это зависит от Ruby? Основываясь на этом, вы можете принять решение практически против чего угодно, потому что обновление libc или ядра может сломать его.
Кристиан Чиупиту
2
Вы поднимаете вопрос, но, в конце концов, это компромисс - сколько пакетов я хочу «беспокоиться» о следующем обновлении. Если обновление ядра / glibc идет не так, как обычно, вы ожидаете, что узнаете об этом почти сразу, поскольку это самый фундаментальный компонент ОС, однако, если Ruby выйдет немного другим, вы не заметите, но когда вы это сделаете, вы можете 300 серверов уже обновлены и работают на этой версии, и теперь Puppet является жертвой. Но опять же, я ничего не высекаю в камне; это всего лишь мое предпочтение по этому вопросу.
Ксеркс,
5

У меня был успех с Puppet . Шеф-повар является новым, чтобы появиться. Более подробный список параметров и сравнительную таблицу см. В статье Википедии « Сравнение программного обеспечения для управления конфигурацией с открытым исходным кодом» .

Пит ТерМаат
источник
1
Не забывайте, что Opscode предоставляет здоровый стек готовых поваренных книг шеф-повара.
Jtimberman
3

Для автоматизации установки в зависимости от целевой системы:

  • Debian / Ubuntu: FAI или ди предпосев
  • RedHat / Fedora: Kickstart
  • Novell / openSuSE: АвтоЯСТ
  • Солярис: Jumpstart
  • Windows: unattended.sourceforge.net

Для управления конфигурацией я бы предложил использовать puppet.

Майкл Прокоп
источник
2

У меня большой успех в Puppet , но вам действительно нужно написать много конфигураций.

Дейв Чейни
источник
2

Еще один голос за марионетку здесь. Мы широко используем его для выполнения всех операций по установке и настройке серверов и приложений. 200+ узлов и подсчет. Поддержка Windows, видимо, находится в разработке, хотя в каком состоянии я не уверен.

Мы все еще изучаем начальную сторону загрузки ОС, но, как упоминалось выше, Cobbler выглядит интересно. В настоящее время мы используем сочетание загрузки PXE с предварительным заданием Debian / Ubuntu, но вряд ли это оптимально.

Майк Паунтни
источник
Привет, Майк, ты думаешь, ты мог бы добавить тег марионетки к этому вопросу? Я бы это сделал, но у меня нет нужного представителя
Павел Иванов