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

Технология для короткоживущих частных виртуальных машин

Я пытаюсь создать систему, которая будет запускать краткосрочные (CI и тестовые сборки) программных компонентов, это обязательно в соответствии с моими требованиями, чтобы каждый жил на частном хосте. Я использую это определение, чтобы включить паравиртуализация варианты, как кажется, это избавит меня от много головной боли.

Я работаю над Mac, поэтому почти все технологии отсутствуют, libvirt и Quemuи т. д. просто не будут работать для меня. Однако я планирую развертывание в Debian; так что все, что работает в Debian, снова на столе, при условии, что я могу создать сценарий для подготовки хост-машины, а также ее гостевых доменов.

Моя предполагаемая установка заключалась в том, что я могу использовать для начальной загрузки установщика Debian, что что-то должно означать, что при загрузке машина автоматически инициализируется (Chef, Puppet, Babushka, не возражайте, правда) - и часть этой подготовки должна создавать шаблон rootfs, который можно использовать для загрузки контейнера. Сам контейнер также должен быть подготовлен, чтобы, когда контейнер появляется, он знал, что нужно сделать, и мог выполнить эту работу, а затем выйти.

Короче говоря, вот рабочий процесс, который мне нужен:

  1. Загрузите машину (виртуальную или другую) и подготовьте ее к работе.
  2. Работа должна выполняться скриптом, установленным chef / puppet / babushka / etc.
  3. Когда начинается работа, должна быть запущена виртуальная машина.
  4. Виртуальная машина должна выполнить работу, выйти и освободить ресурсы для родительского / хост-компьютера. (важно, чтобы это масштабировалось как минимум до сотен гостевых виртуальных машин на разумном оборудовании)

Я дошел до того, что попробовал следующее и отказался от них по причинам, указанным ниже:

Для хост-машины

  1. Предварительная загрузка образов Debian micro ISO с помощью Instalinux (при поддержке LinuxCOE) (Плохой: Не сработало вообще («Модули ядра не найдены» (поскольку образы Instalinux не синхронизированы с репозиториями FTP, очевидно, что это решение является заведомо хрупким, оно также не дает больших возможностей для пост-установки и отбрасывает известные Ключи SSH, ключи хоста и т. Д. На машину, это похоже на запуск и забытие, в конце концов у меня будет работающая машина, но нет доступа к ней.)
  2. Предварительная загрузка Debian netinst ISO (Плохой: те же проблемы, что и выше, за исключением того, что по крайней мере установка обычно завершается, поскольку нет несоответствия ядра между ISO и FTP-репозиторием. Все еще ограниченные возможности для пост-установки. Хорошо: Абсолютно надежный и повторяемый, его легко использовать в любом стеке виртуальных машин на Mac или на голом железном компьютере, будет работать где угодно, однако я не могу установить его достаточно)
  3. Различные методы создания rootfs и компиляции его как загрузочного образа жесткого диска (Плохой: То немногое, что я мог заставить работать, было чертовски хрупким, было трудно установить на реальную машину, и это был сложный процесс сборки. Хорошо: Если бы я мог заставить его работать, это, казалось бы, предоставило бы наибольшие возможности для предварительной настройки машины в соответствии с заданной спецификацией с помощью ключей ssh, ключей хоста, имени хоста, программного обеспечения, установленного из Git, и всего остального, но тогда вопрос был бы в том, как упаковать его для распространения или как написать сценарий для его воссоздания.)

Честно говоря, я не уверен, какие технологии люди должны использовать, чтобы превратить виртуальную машину из ничего в работающую, работающую и полезную систему. Для меня это три шага: а) операционная система, б) конфигурация системы (пользователи и т. Д.), А затем в) изменения файловой системы.

Для гостевых (виртуальных) машин:

  1. Многое, в основном я думаю, что ответ здесь - rootfs только для чтения, созданный с помощью debootstrapи специальный раздел в контейнере LXC, который содержит работу, которая должна быть выполнена для этого конкретного экземпляра (манифест задания). Вставьте все обычные предупреждения о сборке ОС, загрузке, создании пользователей, проверке программного обеспечения из git и выполнении работы.

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

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

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

Обычно я разработчик приложений и не часто работаю с технологией серверного уровня (и я уверен, что SF отметит этот вопрос как «слишком субъективный»), но я действительно не уверен, к каким инструментам обратиться.

Последнее слово: я знаю один проект с аналогичным составом (travis-ci.org), который использует для этого боксы Vagrant. Это кажется довольно грубым инструментом, большими, медленными, ориентированными на рубины инструментами, предназначенными для мелкомасштабной подготовки рабочих столов к тестовым виртуальным машинам, используемым для критически важной сервисной инфраструктуры, но я также знаю некоторых из этих ребят, и они умнее меня, так что, возможно, они просто сдались.

Любая помощь приветствуется.

Некоторые идеи:

  1. Ваша точка зрения «сотни виртуальных машин на разумном оборудовании» заставляет меня (без личного опыта) думать о виртуальных машинах, которые либо загружаются по сети, либо совместно используют большую часть своего дискового пространства (/ usr) через NFS. Зависит от того, насколько похожи ваши виртуальные машины.
  2. «То немногое, что я мог заставить работать, было чертовски хрупким» Трудно поверить. Не могли бы вы уточнить, в чем проблема?
  3. «было бы сложно установить на реальную машину» Вы имеете в виду «сложно» по сравнению с чем, с желаемым решением для создания виртуальной машины в один клик? Я бы спросил: насколько это сложно и как часто это будет происходить? В чем разница, воссоздание initrd для соответствующего оборудования?
  4. «Однако я не могу установить его достаточно» Что вам нужно / что вам нужно и почему это не работает? Вы можете сделать загрузку скрипта частью процесса загрузки. Виртуальная машина получает свой IP-адрес через DHCP (жестко настроенный на MAC-адрес виртуальных машин), а Samba доставляет виртуальным машинам различные сценарии после установки, в зависимости от IP-адреса клиента.

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

Используя кое-что, что работает на Apple и Debian, единственное, что я пробовал, - это виртуальный ящик. Что приятно использовать виртуальный бокс вот вы можете создать виртуальную машину в своей системе Mac и скопировать ее в систему Debian, используя ту же версию виртуального бокса, и она загрузится.

Сотни виртуальных машин с использованием виртуального бокса звучат так, будто вы потратите немало времени на использование vboxmange интерфейс для создания скрипта необходимой уникальной информации для каждой виртуальной машины. Как и uuids для жестких дисков, MAC-адрес в сетевых интерфейсах.

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

Используя ваш снимок вы также можете сделать сотни копий этого образа виртуальной машины. Используя vboxmange интерфейс сценариев для создания уникальных копий, то есть uuid и mac-адреса. Затем запустите сценарий запуска, который вызывает все изменения, конфигурации, которые необходимо применить к своим виртуальным машинам для тестирования, или запуск различных тестов.