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

Автоматическое обновление аналогичных гостевых ОС ВМ

Можно ли обрабатывать автоматическое обновление гостевых виртуальных машин, которые отличаются только управлением конфигурацией? Я спрашиваю об общих или конкретных технологиях, которые этому способствуют. Короче говоря, у меня есть несколько установок CentOS / Debian, которые можно рассматривать как чистую установку + конфигурацию марионетки. Я хочу выполнить в автоматическом режиме yum update или эквивалент (apt-get upgrade) или установка пакета X. Я хочу, чтобы это произошло, взяв мой шаблон виртуальной машины, обновив там ОС, а затем повторно развернув каждую виртуальную машину на основе который шаблон один за другим (после того, как я посмотрю на шаблон, чтобы убедиться, что ничего не сломано).

Мне все равно, ESXi, XenServer, openvz или что-то среднее. Я не против установки сторонних инструментов. Я знаю об обновлениях подвижного пула XenServer, но это только для хостов.

Короче говоря, вы хотите создать шаблон. В вашем графике обслуживания преобразуйте его в виртуальную машину, загрузите новую виртуальную машину, запустите sudo yum -y update ; sudo shutdown -h now.

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

Я не видел стандартного инструмента для выполнения этой работы, но VMWare PowerCLI (плагин PowerShell для VMWare VCenter) может конвертировать между шаблонами и виртуальными машинами, используя Set-VM -ToTemplate и Set-Template -ToVM команды [1].

После того, как у вас есть виртуальная машина (живое представление шаблона), вы можете вводить команды в гостевую систему, используя Invoke-VMScript command [2], например, выполнение ваших команд yum [3].


Я играл с идеей этого, и у меня есть взлом Q&D на выходных. Я не тестировал этот сценарий, и он почти наверняка неверен, но вот основная идея, с которой можно начать. Обратите внимание: у него есть несколько плохих идей, например, включение пароля в сценарий или использование плоского пространства имен для ваших виртуальных машин и шаблонов.

#################################
## Convert a VMWare template to a running
## system, apply maintenance, then convert
## back to a template
##
## Note, this naively does not do any error-
## checking and does not specify much info
##
## Please adapt to your environment
##
#################################


Param {
    [string] $templatename ;
}

$RHELPasswd = 'P@$$w0rd!' ;

if(! $templatename) {
    Write-Error "Please pass the name of the template on the command-line" ;
    exit(-1) ;
}

if(Get-Template -Name $templatename) {
    $vm = Set-Template -Template $templatename -ToVM ;
    $guestscript = 'sudo yum -y update ; sudo shutdown -h now' ;
    Invoke-VMScript -VM $vm -ScriptText $guestscript -GuestUser 'root' -GuestPassword $RHELPasswd ;
    Get-VM $vm |Set-VM -ToTemplate -name $templatename ;
}


1: http://www.mikelaverick.com/2014/06/back-to-basics-creating-and-deploying-templates-with-powercli-part-7/ [4] и [5]
2: https://www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Invoke-VMScript.html
3: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/ch-yum.html#sec-Checking_For_and_Updating_Packages
4: https://www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Set-VM.html
5: https://www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Set-Template.html