Быстрое создание копий виртуальных машин (KVM)
В своей работе и для экспериментов я часто использую KVM (Kernel-based Virtual Machine) - программное решение, обеспечивающее виртуализацию в среде Linux на платформе x86.
Для одного проекта мне потребовалось создать 20 копий виртуальной машины, при этом необходимо было внести изменения в файлы конфигураций (в моем случае натройки сети).
Клонирование и параметризация
Базовая виртуальная машина полностью настроена (CentOS 7), создадим 20 копий. Для этого воспользуемся командой virt-clone
в цикле
for i in {1..20}; do virt-clone --original co7 --name co7-c$i --auto-clone; done
Для задания параметров виртуальных машин используем утилиту virt-sysprep
из библиотеки libguestfs
(набор инструментов для работы с образами виртуальных машин). Для внесения изменений команду необходимо выполнять в привелигированном режиме.
for i in {1..20}; do
sudo virt-sysprep -d co7-c$i --enable customize,backup-files,bash-history,dhcp-client-state,logfiles,machine-id,net-hostname,net-hwaddr,ssh-hostkeys,tmp-files,udev-persistent-net,user-account --hostname co7-c$i --run-command "sed -i \"s/192.168.1.1/192.168.3.$i/\" /etc/sysconfig/network-scripts/ifcfg-ens3";
done
Для моих целей я задействую тольлько часть доступных операций:
- удаление файлов логов, резервных копий, пользователей;
- отчистка истории командной стоки;
- сброс и парметризация
hostname
; - удаление "лишних" опций в файлах настройки сети;
- выполнение команды
sed
для замены ip адреса виртуальной машины.
Подробнее о производимых утилитой virt-sysprep
операциях читайте в документации.
Использование
С целью быстрого управления созданными "клонами", я использую команды в циклах.
Для запуска
for i in {1..20}; do virsh start co7-c$i; done
Для остановки
for i in {1..20}; do virsh destroy co7-c$i; done
Для удаления
for i in {1..20}; do virsh undefine --domain co7-c$i --remove-all-storage; done