Автоматизация развертывания виртуальных машин

Экономьте время и силы при помощи наборов автоматически настраивающихся виртуальных машин

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

Джи Ли, разработчик ПО, IBM  

Джи Ли (Jie Li) является разработчиком программного обеспечения в IBM China Systems and Technology Laboratories. Он обладает опытом разработки в J2EE и в настоящее время занимается системой управления развертыванием программного обеспечения. В свободное время он интересуется JavaScript и разработкой автономных Web-приложений (таких как Gears).



Ён Куй Ван, разработчик ПО, IBM  

Ён Куй Ван (Yong Kui Wang) является разработчиком программного обеспечения в IBM China Systems and Technology Laboratories и в настоящее время занимается системой управления развертывания программного обеспечения. Он также интересуется технологиями Linux, виртуализацией и Web 2.0.



17.11.2009

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

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

Архитектура и процесс автоматического развертывания виртуальных машин

Рассматриваемое средство автоматического развертывания виртуальных машин состоит из двух основных частей: диспетчера развертывания виртуальных машин (Virtual Machine Deployment Manager, VDM) и диспетчера настройки виртуальных машин (Virtual Machine Configuration Manager, VCM).

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

Диспетчер настройки виртуальных машин устанавливается на образе виртуальной машины, используемом в качестве шаблона ВМ, после загрузки системы он автоматически настраивает виртуальную машину. Архитектура и процесс автоматического развертывания ВМ показаны на рисунке 1.

Рисунок 1. Архитектура среды автоматического развертывания ВМ
Рисунок 1. Архитектура среды автоматического развертывания ВМ

VDM состоит из трех частей:

  • Основной код VDM, ядро VDM.
  • Задания развертывания ВМ – файл описания отдельного задания развертывания ВМ, разновидность пользовательского файла конфигурации.
  • Определения шаблона ВМ (VM Template Definitions, VTD) – файлы, содержащие информацию шаблонов ВМ, такую как расположение и описание шаблона ВМ. Шаблон ВМ представляет собой виртуальную машину, которая используется как источник для клонирования ВМ.

Основная часть процесса развертывания ВМ состоит из следующих этапов:

  1. VDM считывает информацию из задания развертывания ВМ.
  2. VDM ищет соответствующий шаблон ВМ в каталоге, содержащем файлы VTD, и клонирует шаблон ВМ в расположение, указанное в файле задания развертывания.
  3. После клонирования исходной ВМ VDM собирает все данные конфигурации, упаковывает их в файл ISO и затем копирует его в каталог с копией ВМ.
  4. VDM изменяет параметры оборудования клона ВМ на основе настроек, указанных в файле задания развертывания ВМ. Также создается устройство CD-ROM для монтирования файла ISO, созданного в пункте 3.
  5. На последнем этапе развертывания запускаются утилиты гипервизора для регистрации ВМ и ее последующего запуска.

Пункт 5 является необязательным, пользователь может не указывать эти действия в файле задания развертывания ВМ. В качестве гипервизора может выступать VMware Server, Xen и т. п. В качестве примера реализации для подготовки этой статьи использовался VMware Server.

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


Создание автоматически настраивающихся шаблонов ВМ

Очевидно, чтобы сделать ВМ автоматически настраиваемой после загрузки, исходная ВМ, используемая в качестве шаблона, тоже должна быть автоматически настраиваемой. Чтобы создать автоматически настраиваемый шаблон ВМ, в исходной ВМ после начальной настройки необходимо установить VCM, как показано на рисунке 2.

Рисунок 2. Создание автоматически настраиваемого шаблона ВМ при помощи установки VCM
Рисунок 2. Создание автоматически настраиваемого шаблона ВМ при помощи установки VCM

Основная функция VCM заключается в том, чтобы найти конфигурационный CD с меткой VMCONIFG и запустить с него необходимые приложения после включения системы. Поскольку исходная ВМ может работать под управлением Linux®, Windows® или другой операционной системы, VCM для различных ОС также различаются. В примерах кода для этой статьи использовались VCM для Linux и Windows.

Диспетчер настройки ВМ для Linux

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

Чтобы установить VCM для Linux, скопируйте пакет VCM в исходную ВМ, распакуйте его в какой-нибудь каталог и запустите скрипт установки VCM install.sh. В листинге 1 приведен отрывок кода install.sh.

Листинг 1. Отрывок кода скрипта установки VCM install.sh
...
VCM_HOME=$(cd $(dirname $0);pwd)
start=`getStartNum`
stop=`getStopNum`
sed -e "s!^VCM_HOME=.*!VCM_HOME=$VCM_HOME!;\
  s!^# chkconfig: 35!# chkconfig: 35 $start $stop!"\
  "$VCM_HOME/vmconfigmgr" > "/etc/init.d/vmconfigmgr"
chmod +x "/etc/init.d/vmconfigmgr"
echo "Register service vmconfigmgr"
chkconfig --add vmconfigmgr
if [ $? -eq 0  ];then
    echo "Install Complete Successfully!"
else
    echo "Install Failed."
Fi

Поскольку все необходимые приложения и данные хранятся на конфигурационном CD, VCM ищет этот CD и монтирует его в /media/VMCONFIG, а затем выполняет необходимые настройки. В листинге 2 показано, как VCM для Linux ищет конфигурационный CD после загрузки системы.

Листинг 2. Пример кода, выполняющего поиск и монтирование конфигурационного CD
LABEL="VMCONFIG"
VM_CFG_DIR=/media/$LABEL
for device in `dmesg | grep "^.*:.*CD-ROM" | awk -F':' '{print $1}'`
do
    volumeName=`volname "/dev/$device" | awk '{print $1}'`
    PrintString "CD-ROM Drive: $device | Label: $volumeName"	
    if [ "$volumeName" == "$LABEL" ];then
        PrintString "VM Configuration CD-ROM is: /dev/$device"
        # Mount the CD-ROM 
        mkdir -p "$VM_CFG_DIR"        
        mount -t iso9660 -o ro,nosuid,nodev,utf8,uid=0 "/dev/$device" "$VM_CFG_DIR" 
        break
    fi
done

Диспетчер настройки ВМ для Windows

После установки диспетчер настройки ВМ для Windows создает назначенное задание, которое запускается один раз после загрузки компьютера. Подобно VCM для Linux, Windows VCM также удаляет назначенное задание после его выполнения.

Чтобы установить VCM для Windows, скопируйте архив с его дистрибутивом в шаблон ВМ Windows, распакуйте его в какой-нибудь каталог и запустите скрипт установки install.bat. В листинге 3 приведен пример работы install.bat.

Листинг 3. Пример кода скрипта установки Windows VCM
@echo off

set VCM_HOME=%~dp0
REM Create scheduled task to run VM Configuration Manager when system boots
schtasks /create /tn "VMCONFIG"  /tr %VCM_HOME%vmconfigmgr.bat /sc onstart /ru "System"

@echo on

Подобно Linux VCM, Windows VCM также необходимо знать букву устройства с конфигурационным CD. Windows VCM использует для этого скрипт WMI, показанный в листинге 4.

Листинг 4. Пример кода скрипта на VB, используемого для определения буквы конфигурационного CD
Function getDriveLetter(label)
	Const wbemFlagReturnImmediately = &h10
	Const wbemFlagForwardOnly = &h20
	strComputer="."
	driveLetter=""
	Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_CDROMDrive", "WQL", _
                                          wbemFlagReturnImmediately + 
                                           wbemFlagForwardOnly)
	For Each objItem In colItems
		WScript.Echo "Drive: " & objItem.Drive & "  VolumeName: " 
                      & objItem.VolumeName  & "  Status: " & objItem.Status
		If StrComp(objItem.VolumeName, label) = 0 Then
			driveLetter=objItem.Drive
			WScript.Echo "driveLetter: " & driveLetter
			Exit For 
		End If  
	Next
	getDriveLetter=driveLetter
End Function

drive=getDriveLetter("VMCONFIG")

После установки VCM на исходную ВМ она становится автоматически настраиваемым шаблоном ВМ. Выключите ее и сохраните в нужном месте.


Создание файлов определений шаблонов ВМ

Шаблоны ВМ могут храниться отдельно, поэтому VDM нужен механизм их обнаружения. Для этого используется файл определений, в котором описаны свойства шаблонов ВМ.

Один файл определений соответствует одному шаблону ВМ. Все файлы определений хранятся в каталоге vtds машины VDM. Файлы определений имеют названия вида OSName.vtd (где OSName используется для различения шаблонов ВМ). Например, для указания на шаблон ВМ SLES 10 SP2 можно использовать название файла определений SLES10SP2.vtd. В листинге 5 показан пример файла определений для шаблона ВМ SLES10 SP2.

Листинг 5. Пример файла определений для шаблона ВМ SLES 10 SP2
# Файл определений шаблона ВМ
# Тип ОС шаблона ВМ, допустимые значения Windows, Linux.
OSType=Linux
# Описание шаблона ВМ.
Description=SuSE Linux Enterprise Server 10 SP2
# Каталог, в котором расположен шаблон ВМ.
SRCVMDIR=/local/vmware/SuSE Linux Enterprise Server 10 SP2

Создание задания развертывания ВМ

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

  • основные параметры ВМ;
  • сетевые параметры;
  • индивидуальные параметры пользователя;
  • параметры регистрации и запуска ВМ.

В листингах 6, 7, 8 и 9 соответствующие параметры приведены отдельно для задания развертывания sles10sp2vm.task.

Листинг 6. Основные параметры ВМ в файле задания развертывания
# Описание задания
TaskDescription=SLES 10 VM used for BVT
# Название ОС создаваемой ВМ, в каталоге vtds должен присутствовать файл с 
# соответствующим именем.
OSName=SLES10SP2
# Размер памяти в МБ, выделенный для ВМ
MemorySize=1300
# Размер в ГБ первого жёсткого диска, если указан, если не указан или 
# меньше, чем размер диска шаблона ВМ, создается диск такого же размера, как
# в шаблоне ВМ.
DiskSize=10
# Отображаемое название ВМ.
DisplayName=SLES10SP2-143-50
# Каталог, в котором должна быть создана ВМ.
Destination=/vmware/SLES10SP2-143-50
# Нужно ли перезаписывать существующую ВМ.
OverwriteOnExist=Yes

Эти основные параметры определяют тип ОС, размер ОЗУ, размер диска и размещение создаваемой ВМ. Кроме того, можно указать, перезаписывать ли ВМ, если она уже существует в указанном каталоге.

Листинг 7. Сетевые параметры ВМ в файле задания развертывания
# Определяет, нужно ли настраивать сетевые параметры при первом запуске ВМ. 
# Yes – настраивать, No – не настраивать. 
# Если указано значение No, все свойства, начиная с ConfigNet, будут проигнорированы.
ConfigNet=yes
# Тип сетевого подключения виртуального сетевого адаптера eth0, допустимые значения 
# Bridged (мост), NAT и HostOnly. Если параметр не указан, по умолчанию используется 
# значение Bridged.
ConfigNet.ConnectType=NAT
# MAC-адрес сетевого адаптера, допустимые значения:
#    1) auto                 автоматическая генерация MAC.
#    2) xx:xx:xx:xx:xx:xx    пользовательский MAC. (VMware соответствует диапазон
#       с 00:50:56:00:00:00 по 00:50:56:3F:FF:FF)
ConfigNet.MacAddress=00:50:56:3A:01:02
# Метод настройки сетевых параметров, dhcp или static.
ConfigNet.Mode=static
# IP-адрес используемый ВМ.
ConfigNet.IPAddress=192.168.143.50
ConfigNet.Netmask=255.255.255.0
ConfigNet.Gateway=192.168.143.2
ConfigNet.Hostname=sles10vm-143-50
ConfigNet.Domain=ibm.com
ConfigNet.PrimaryDNS=9.181.32.72
ConfigNet.SecondDNS=9.181.2.101

При развертывании информация о сетевых параметрах собирается при помощи VDM и сохраняется в образе ISO конфигурационного CD, соответственно эта информация доступна при запуске ВМ.

Листинг 8. Индивидуальные параметры пользователя в файле задания развертывания ВМ
# Каталог с конфигурационными данными пользователя. Содержимое этого каталога 
# упаковывается в файл ISO с меткой VMCONFIG и монтируется как CD-ROM ВМ.
UserConfigDataDir=/root/mydata/
# Приложение, которое необходимо запустить после загрузки системы и настройки сетевых 
# параметров. Необходимые приложения также упаковываются в файл VMCONFIG ISO.
UserConfigApp=/root/myapp.sh

Все данные о пользовательских параметрах также собираются и сохраняются в образе ISO конфигурационного CD.

Листинг 9. Параметры регистрации и запуска ВМ в файле задания развертывания
# Регистрировать или нет ВМ на локальном сервере vmware. Yes - регистрировать, false – 
# не регистрировать. По умолчанию - No.
RegisterVM=Yes
# Параметры регистрации ВМ. Для VMware Server 1.x указывать не нужно.
RegisterVM.HostURL=https://localhost:8333
RegisterVM.Username=root
RegisterVM.Password=password
# Включать или нет ВМ после создания. Yes - включать, No – не включать.
# Default value is false.
PowerOn=Yes

Эти параметры используются для регистрации или включения ВМ после развертывания. Для VMware Server 2.0 необходимо указать URL сервера, имя пользователя и пароль.


Развертывание ВМ

Теперь, когда шаблоны ВМ и файл задания развертывания ВМ готовы, настало время для развертывания. Процесс развертывания ВМ включает в себя следующие этапы:

  • обработка параметров задания развертывания ВМ;
  • поиск нужного шаблона ВМ и копирование его в целевой каталог;
  • создание файла ISO, содержащего данные конфигурации;
  • изменение параметров оборудования новой ВМ, монтирование файла ISO в качестве CD; и, наконец:
  • регистрация и запуск ВМ, если параметры RegisterVM и PowerOnв файле задания развертывания ВМ имеют значение Yes.

В этой статье приведены ссылки на VDM, не требующий установки. Просто распакуйте его в любой каталог (например, /opt/vmdeploymgr) и запустите. Тем не менее для регистрации и запуска новой ВМ на сервере с установленным VDM должны быть установлены необходимые утилиты гипервизора. Утилиты гипервизора должны поддерживать запуск из VDM для регистрации и включения ВМ. В данном примере VDM установлен на тот же сервер, что и VMware Server.

Параметры развертывания ВМ

VDM поддерживает три способа развертывания ВМ:

  1. Развертывание одной ВМ.
  2. Развертывание нескольких заданий из списка.
  3. Развертывание всех заданий, хранящихся в отдельном каталоге.

Используемый способ определяется параметрами команды vmdeploymgr.sh, которая запускает главное приложение VDM.

  1. Развертывание одной ВМ

VDM позволяет запустить определенное задание развертывания при помощи параметра -f, как показано ниже: localhost:/opt/vmdeploymgr/bin # ./vmdeploymgr.sh -f ../tasks/sles10sp2.task.

  1. Развертывание нескольких заданий при помощи списка

Кроме того, можно указать все задания развертывания ВМ в списке и настроить VDM последовательно обрабатывать все задания из списка. Список заданий является простым текстовым файлом. В листинге 10 приведен пример списка заданий, содержащий четыре задания развертывания ВМ, последнее из которых (win2003vm2.task) закомментировано и поэтому обрабатываться не будет.

Листинг 10. Пример списка заданий развертывания ВМ
/opt/vmdeploymgr/tasks/sles10sp2vm.task
/opt/vmdeploymgr/tasks/rhel5u2vm.task
/opt/vmdeploymgr/tasks/win2003vm.task
#/opt/vmdeploymgr/tasks/win2003vm2.task

Для обработки списка заданий развертывания ВМ используется параметр -t. Ниже приведен пример команды:

localhost:/opt/vmdeploymgr/bin # ./vmdeploymgr.sh -t ../tasks/vmtasklist
  1. Развертывание всех заданий, хранящихся в отдельном каталоге.

Третьим режимом развертывания ВМ является обработка всех файлов заданий в указанном каталоге. Для этого используется параметр командной строки -d; если он присутствует, VDM будет искать все файлы с расширением .task в заданном каталоге, а затем обрабатывать эти задания. Ниже приведен пример команды:

localhost:/opt/vmdeploymgr/bin # ./vmdeploymgr.sh -d ../tasks

Конфигурационный CD

Конфигурационный CD является очень важным компонентом автоматического развертывания, поскольку содержит конфигурационные данные VDM и пользователей. Это позволяет создавать виртуальные машины с различными настройками для выбранной операционной системы, используя один и тот же шаблон ВМ. Другими словами, вам понадобится только один шаблон ВМ для каждой операционной системы, что поможет сэкономить место на диске и время.

CD эмулируется при помощи файла ISO, созданного VDM в соответствии с заданием развертывания, и монтируется в виртуальный накопитель CD-ROM, поэтому можно сохранить больше данных, чем на дискете. Конфигурационный CD представляет возможность гибкой настройки приложений, которые необходимо запустить после загрузки ВМ. Файл ISO конфигурационного CD называется VMCONFIG.iso, его метка VMCONFIG. На рисунке 3 показана структура каталогов конфигурационного CD для Linux. Структура каталогов диска для Windows похожа.

Рисунок 3. Структура каталогов конфигурационного CD для Linux
File structures of the VM configuration CD for Linux VM

Как показано на рисунке 3, каталог vdm в основном содержит заранее подготовленные задания настройки, определяемые VDM (например, сетевые параметры), а каталог usr содержит индивидуальные параметры пользователя, определенные в файле задания развертывания. Файл run.conf используется для настройки запуска приложений с CD, пример его содержимого приведен в листинге 11.

Листинг 11. Пример содержимого run.conf
# Приложение для задания предварительно заданной конфигурации при помощи VDM,
# например, настройки сетевых параметров.
VDM_CFG_APP=vdm/run.sh
# Пользовательское приложение, запускаемое после загрузки системы.
USR_CFG_APP=usr/myapp.sh

При включении созданной ВМ запускается VCM и ищет конфигурационный CD. Обнаружив CD, он считывает содержимое run.conf и затем последовательно выполняет приложения, указанные в разделах VDM_CFG_APP и USR_CFG_APP. Если пользователь не указал индивидуальную конфигурацию в файле задания развертывания ВМ, параметр USR_CFG_APP в файле run.conf не будет задан.

Затем будет создано новое устройство CD-ROM для клонированной ВМ, чтобы смонтировать конфигурационный CD, а VDM будет искать шины IDE (в начале, а потом шины SCSI) ВМ, чтобы обнаружить свободную шину для CD-ROM. Найдя ее, он изменяет файл конфигурации ВМ, создает новое устройство CD-ROM и затем монтирует CD в него.

Регистрация и включение VM

Для регистрации ВМ на сервере гипервизора и ее запуска VDM нуждается в поддержке со стороны некоторых утилит гипервизора. Для VMware Server 2.0 основной утилитой является vmrun, для VMware Server 1.0 это vmware-cmd. Эти утилиты устанавливаются по умолчанию вместе с сервером VMware.

В листинге 12 показан пример регистрации и запуска ВМ при помощи vmware-cmd. В листинге 13 показан пример регистрации и запуска ВМ при помощи vmrun.

Листинг 12. Регистрация и запуск ВМ при помощи vmware-cmd
vmware-cmd  -s register "$vmxfile"
vmware-cmd  "$vmxfile" start hard
Листинг 13. Регистрация и запуск ВМ при помощи vmrun
vmrun -T server -h "${hostURL}/sdk" -u "$username" -p "$password"\ 
      register "[$datastoreName] $vmxfile"
vmrun -T server -h "${hostURL}/sdk" -u "$username" -p "$password"\
      start "[$datastoreName] $vmxfile"

Заключение

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

Кроме того, это решение является очень гибким – можно запускать свои приложения после загрузки созданной ВМ. Например, можно настроить автоматический запуск приложения для загрузки и установки нового программного обеспечения, настроив параметр USR_CFG_APP в задании развертывания ВМ.

В целом это решение поможет сберечь много времени и сил при развертывании и настройке однотипных ВМ.


Загрузка

ОписаниеИмяРазмер
Диспетчер настройки ВМ для Linux1vmconfigmgr-linux.zip5КБ
Диспетчер настройки ВМ для Windows2vmconfigmgr-windows.zip3КБ
Диспетчер развертывания ВМ3vmdeploymgr.zip14КБ

Заметка

  1. Диспетчер настройки ВМ для Linux протестирован в ОС SLES 10 SP1, SP2 и Red Hat Enterprise Linux Server (RHEL) 5.2.
  2. Диспетчер настройки ВМ для Windows протестирован в ОС Windows Server 2003 Enterprise Edition и Window Server 2008 Enterprise Edition.
  3. Диспетчер развертывания ВМ протестирован в ОС SUSE Linux Enterprise Server (SLES) SP1 с использованием VMware Server 2.0 (установлен в SLES10 SP1) и VMware Server 1.0.4 (установлен в SLES10).

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=447502
ArticleTitle=Автоматизация развертывания виртуальных машин
publish-date=11172009