LINUX.ORG.RU
ФорумAdmin

Оптимальный способ поднять энное количество однотипных виртуальных машин

 ,


3

3

Есть виртуальная машина ВМ0 (vbox) со статическим адресом. В скрипте Ansible выполняется следующее:

  1. ВМ0 клонируется как ВМ1 (ВМ0 выключена)
  2. Запускаем ВМ1
  3. Заходим на ВМ1 на нее по этому адресу
  4. Настраиваем ВМ1 плюс меняем адрес на заранее определенный
  5. Перегружаем ВМ1
  6. Переходим к п.1 и клонируем уже ВМ2, ВМ3 ... ВМn

Хочется одновременно запустить все n ВМ и одновременно их настраивать, т.к. это быстрее в n раз.

Идеальным вариантом было бы еще при клонировании ВМ задавать ей hostname (да и адрес иногда полезно), но я этого не нашел как сделать. Можно задавать mac адрес при клонировании и по нему привязать адреса на dhcp сервере, но мне не нравится что нужно будет лезть в его настройки, хотелось бы ограничиться настройкой только ВМ

1) зачем вм2 клонирует вм1? Почему не делать все n машин клонами одного золотого образа вм0?

2) базовую настройку машины можно делать ещё на этапе клонирования образа не запуская её, или с помощью cloud-init.

alpha ★★★★★ ()
Ответ на: комментарий от alpha

зачем вм2 клонирует вм1? Почему не делать все n машин клонами одного золотого образа вм0?

Неясно видимо объяснил. ВМ2 клон ВМ0, т.е. все машины клоны ВМ0

базовую настройку машины можно делать ещё на этапе клонирования образа не запуская её, или с помощью cloud-init.

про cloud-init погуглю, а как делать базовую настройку на этапе клонирования? vobxmanage modifyvm имеете в виду?

yetanother ★★ ()
Ответ на: комментарий от yetanother

Неясно видимо объяснил. ВМ2 клон ВМ0, т.е. все машины клоны ВМ0

Тогда тебе вообще достаточно в ansible таски параллельно запускать

Что-то типа такого

https://blog.crisp.se/2018/01/27/maxwenzin/how-to-run-ansible-tasks-in-parallel

а как делать базовую настройку на этапе клонирования? vobxmanage modifyvm имеете в виду?

Я вообще имела в виду virt-customize и virt-builder:

http://libguestfs.org/virt-customize.1.html

http://libguestfs.org/virt-builder.1.html

Но с vbox наверное есть свои аналоги.

Хотя вообще если честно не знаю зачем люди продолжают использовать VirtualBox. Ну то есть ладно по привычке как десктопный вариант, хотя и там уже virt-manager и gnome-boxes вроде как всё решили. Но строить какую-то большую инфраструктуру на vbox-вмках... Неудобно же.

alpha ★★★★★ ()

Можно сменить IP до стартапи (примонтировать VDI образ в хост системе и сменить настройки)

Можно в базовом образе не настраивать IPv4 адресс вобще, а только включить автоконфигурирование IPv6 - он сконфигурируется на основе MAC адресса сетевого адаптера, после уже можно подключится по IPv6 к системе и донастроить IPv4 адресс. В принципе можно тоже самое сделать исключительно на IPv4 но с костылями ...

zaz ★★★★ ()

Ansible создаёт n машин с макс количеством параллельных процессов p (баш скриптом на xargs) .
Ansible их ждёт, пока поднимутся. И исполняет на них playbooks.

Bers666 ★★★★★ ()
Ответ на: комментарий от alpha

Тогда тебе вообще достаточно в ansible таски параллельно запускать

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

Хотя вообще если честно не знаю зачем люди продолжают использовать VirtualBox.

Пока хватает в рамках конкретной задачи

yetanother ★★ ()
Ответ на: комментарий от yetanother

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

Так параметризованный таск же, через with_items передаешь параметры конкретно этой вмки.

alpha ★★★★★ ()
Ответ на: комментарий от alpha

Так параметризованный таск же, через with_items передаешь параметры конкретно этой вмки.

Какие параметры? Все ВМ имеют один и тот же адрес. В этом и проблема.

yetanother ★★ ()
Последнее исправление: yetanother (всего исправлений: 1)
Ответ на: комментарий от Bers666

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

yetanother ★★ ()
Ответ на: комментарий от zaz

Можно сменить IP до стартапи (примонтировать VDI образ в хост системе и сменить настройки)

Надо попробовать

Можно в базовом образе не настраивать IPv4 адресс вобще, а только включить автоконфигурирование IPv6 - он сконфигурируется на основе MAC адресса сетевого адаптера, после уже можно подключится по IPv6 к системе и донастроить IPv4 адресс. В принципе можно тоже самое сделать исключительно на IPv4 но с костылями ...

Тоже вариант, хотя звучит посложнее

yetanother ★★ ()
Ответ на: комментарий от yetanother

Почему у всех один адрес? Можно же сделать dhcp и разрешение имён.
Или вмкам сделать шаред фолдер и туда положить плайбуки и пусть они их сами запускают после загрузки.

Bers666 ★★★★★ ()
Клонируем тачку VM0 (DHCP)
Создаем клон VM1 (DHCP)
Создаем клон VM2 (DHCP)
...
Создаем клон VMn (DHCP)
Узнаем адреса полученые от DHCP
Добавляем тачки в inventory (на лету - add_host)
Сетапим тачки паралельно (адреса разные же)

P.S. Только вот как узнать IP тачек, когда они имеют одинаковый hostname?
Возможно можно где-то в файле конфигурации прочитать ИПишку или сменить хостнейм?

P.S. Форматирование текста не осилил

i3wm ()
Ответ на: комментарий от Bers666

Почему у всех один адрес? Можно же сделать dhcp и разрешение имён.

Так тогда имена одинаковые. У меня в этом и проблема, что я делаю несколько клонов одной и той же ВМ, там все одинаковое. Сейчас я решаю это тем, что запускаю и настраиваю их по очереди.

Или вмкам сделать шаред фолдер и туда положить плайбуки и пусть они их сами запускают после загрузки.

Это на них надо будет ansible ставить, да и виртуалки на разных серверах запускаются. Не вариант.

yetanother ★★ ()
Ответ на: комментарий от cvv

Ну с kvm или xen проблем было бы поменьше.

Так их еще же освоить надо. Я то так не админ, а разработчик, для меня это лишь смежная область.

yetanother ★★ ()
Ответ на: комментарий от i3wm

Про add_host спасибо, буду знать. Пока склоняюсь к тому, чтобы смонтировать диск на хост, модифицировать его и потом запускать ВМ.

yetanother ★★ ()

а если IP назначать до старта ВМ в командной строек и потом обработать нужное скриптом?

anonymous ()
Ответ на: комментарий от anonymous

а если IP назначать до старта ВМ в командной строек и потом обработать нужное скриптом?

Современное развитие этого подхода и будет cloud-init. Это механизм прокинуть конфигурационный файл, из которого вмка при старте считает настройки сети, пароли, hostname и т.п. и будет готова к работе.

alpha ★★★★★ ()

Или я чего-то не понимаю в постановке вопроса, или Vagrant таки его решает.

rebforce ()
Ответ на: комментарий от FireFighter

Но тогда mac адрес придется прописать и на dhcp и у клонов? Или есть другой способ?

yetanother ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.