Здравейте на всички, аз съм Иван и съм системен администратор (OPS) алкохолик.
Искам да споделя как разгръщам виртуални машини на ESXi без vCenter, използвайки Terraform.
Често се налага да разгръщам/пресъздавам виртуални машини, за да тествам различни приложения. Поради мързел, се замислих за автоматизиране на процеса. Търсенията ми ме заведоха до чудесния продукт на компанията , .
Мисля, че много хора знаят какво е Terraform, а за тези, които не знаят, това е приложение за управление на всяко облако, инфраструктура или услуга, използвайки концепцията IasC (Инфраструктура като код).
Като среда за виртуализация използвам ESXi. Доста проста, удобна и надеждна.
Предвиждам въпрос.
Защо terraform, ако може да се използва vCenter Server?
Може, разбира се, но. Първо, това е допълнителна лицензия, второ, този продукт е много ресурсоемък и просто няма да се побере на сървъра ми вкъщи, и трето, възможността да усъвършенствам уменията си.
Като сървър служи платформата Intel NUC:
CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
Версия на ESXi: ESXi-6.5.0-4564106-standard (VMware, Inc.)И така, по всичко по реда.
Нека за начало настроим ESXi, а именно да отворим VNC порта в настройките на защитната стена.
По подразбиране, файлът е защитен от запис. Извършваме следните манипулации:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlдобавяме следния блок в края на файла:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueИзлизаме, запазваме. Връщаме правата обратно и рестартираме службата:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshАктуално до рестартиране на хоста. След това ще трябва да повторим тази манипулация.
След това цялата работа ще извършвам във виртуалната машина на същия сървър.
Характеристики:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: disable
firewalld: disableСлед това ще ни трябва , също продукт на компанията HashiCorp.
Той е необходим за автоматично сглобяване на "златния" образ. Който ще използваме в бъдеще.
yum install unzip git -y
curl -O https://releases.hashicorp.com/packer/1.5.5/packer_1.5.5_linux_amd64.zip
unzip packer_1.5.5_linux_amd64.zip -d /usr/bin && rm -rf packer_1.5.5_linux_amd64.zip
packer version
Packer v1.5.5На стъпка packer version може да възникне грешка, тъй като в базираните на RedHat може да се намери пакет със същото име.
which -a packer
/usr/sbin/packerЗа решение можете да създадете симлинк или да използвате абсолютен път /usr/bin/packer.
Сега ще ни трябва ovftool . Изтегляме, поставяме на сървъра и инсталираме:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Извличане на VMware инсталатора... готово.
Трябва да приемете споразумението за лиценз на компонента VMware OVF Tool за Linux, за да продължите. Натиснете Enter, за да продължите.
SPОРАЗУМЕНИЕ ЗА ЛИЦЕНЗ С НАЧАЛЕН ПОТРЕБИТЕЛ
Съгласни ли сте? [да/не]: да
Продуктът е готов за инсталиране. Натиснете Enter, за да започнете
инсталацията или Ctrl-C, за да отмените.
Инсталиране на компонента VMware OVF Tool за Linux 4.4.0
Конфигуриране...
[######################################################################] 100%
Инсталацията беше успешна.Продължаваме напред.
На Git подготвих всичко необходимо.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiВ папка iso трябва да поставите дистрибутива на операционната система. В моя случай това е centos 7.
Също така е необходимо да редактирате файла centos-7-base.json:
variables: посочете своите данни за свързване
iso_urls: посочете актуален
iso_checksum: контролна сума на вашия образ След всички промени стартираме сборката:
/usr/bin/packer build centos-7-base.jsonАко всичко е настроено и посочено правилно, ще видите картината на автоматичната инсталация на операционната система. Този процес при мен отнема 7-8 минути.
След успешното завършване в папката output-packer-centos7-x86_64 ще се намира ova файл.
Инсталираме Terraform:
curl -O https://releases.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip
unzip terraform_0.12.24_linux_amd64.zip -d /usr/bin/ && rm -rf terraform_0.12.24_linux_amd64.zip
tf version
Terraform v0.12.24Тъй като Terraform няма провайдър за ESXi, трябва да го съберем.
Инсталираме go:
cd /tmp
curl -O https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz && rm -rf go1.14.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
go version go1.14.2 linux/amd64След това събираме провайдера:
go get -u -v golang.org/x/crypto/ssh
go get -u -v github.com/hashicorp/terraform
go get -u -v github.com/josenk/terraform-provider-esxi
export GOPATH="$HOME/go"
cd $GOPATH/src/github.com/josenk/terraform-provider-esxi
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-w -extldflags "-static"' -o terraform-provider-esxi_`cat version`
cp terraform-provider-esxi_`cat version` /usr/binНие сме на финалната права. Нека започнем да разгръщаме нашия образ.
Преминаваме в папката:
cd /root/create-and-deploy-esxi/centos7Първо редактираме файла variables.tf. Трябва да посочите връзката към сървъра ESXi.
В файла network_config.cfg ще съдържа мрежовите настройки на бъдещата виртуална машина. Променяме според нуждите си и стартираме командата:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonИ в файла main.tf поменяме пътя към ova файла на своя, ако е различен.
Момент на истината.
terraform init
Инициализация бекенда...
Инициализация плагинов провайдеров...
Следующие провайдеры не имеют ограничений по версиям в конфигурации,
поэтому была установлена последняя версия.
Чтобы предотвратить автоматическое обновление до новых основных версий, которые могут содержать изменения,
рекомендуется добавить ограничения version = "..." в соответствующие блоки провайдеров в конфигурации, с
предложенными ниже строками ограничений.
* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"
Terraform был успешно инициализирован!
Теперь вы можете начать работать с Terraform. Попробуйте выполнить "terraform plan", чтобы увидеть
все изменения, которые необходимы для вашей инфраструктуры. Все команды Terraform теперь должны работать.
Если вы когда-либо установите или измените модули или конфигурацию бекенда для Terraform,
повторите эту команду, чтобы повторно инициализировать вашу рабочую директорию. Если вы забудете,
другие команды это обнаружат и напомнят вам об этом, если это необходимо.terraform plan
Обновление состояния Terraform в памяти перед планом...
Обновлённое состояние будет использовано для вычисления этого плана, но не будет
сохранено в локальном или удалённом хранилище состояния.
data.template_file.Default: Обновление состояния...
data.template_file.network_config: Обновление состояния...
------------------------------------------------------------------------
Сгенерирован план выполнения, который отображен ниже.
Действия с ресурсами обозначены следующими символами:
+ создать
Terraform выполнит следующие действия:
# esxi_guest.Default будет создан
+ ресурс "esxi_guest" "Default" {
+ размер_boot_disk = (известно после применения)
+ диск_хранилища = "datastore1"
+ имя_гостя = "centos7-test"
+ время_выключения_гостя = (известно после применения)
+ время_включения_гостя = (известно после применения)
+ guestinfo = {
+ "metadata" = "base64text"
+ "metadata.encoding" = "gzip+base64"
+ "userdata" = "base64text"
+ "userdata.encoding" = "gzip+base64"
}
+ guestos = (известно после применения)
+ id = (известно после применения)
+ ip_address = (известно после применения)
+ размер_памяти = "1024"
+ заметки = (известно после применения)
+ количество_в_ЦПУ = (известно после применения)
+ ovf_properties_timer = (известно после применения)
+ ovf_source = "\/root\/create-and-deploy-esxi\/output-packer-centos7-x86_64\/packer-centos7-x86_64.ova"
+ питание = "включено"
+ имя_пул_ресурсов = (известно после применения)
+ virthwver = (известно после применения)
+ сетевые_интерфейсы {
+ mac_address = (известно после применения)
+ тип_nic = (известно после применения)
+ виртуальная_сеть = "VM Network"
}
}
План: 1 добавить, 0 изменить, 0 уничтожить.
------------------------------------------------------------------------
Примечание: Вы не указали параметр "-out" для сохранения этого плана, поэтому Terraform
не может гарантировать, что будут выполнены именно эти действия, если
"terraform apply" будет запущена впоследствии.
Завершение:
terraform applyЕсли всё сделано правильно, новая виртуальная машина будет развернута из ранее созданного образа в течение 2-3 минут.
Возможности использования всего этого ограничиваются лишь вашей фантазией.
Я просто хотел поделиться своими наработками и показать основные моменты работы с данными продуктами.
Спасибо за внимание!
P.S.: буду рад конструктивной критике.
Източник: habr.com
