Можно ли обрабатывать автоматическое обновление гостевых виртуальных машин, которые отличаются только управлением конфигурацией? Я спрашиваю об общих или конкретных технологиях, которые этому способствуют. Короче говоря, у меня есть несколько установок 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