Брзо распоредување vm ESXi со Terraform

Здраво на сите, моето име е Иван и јас сум администратор на системот за алкохолизам (OPS).

Би сакал да ви кажам како распоредувам виртуелни машини на ESXi без vCenter користејќи Terraform.

Доста често треба да распоредите/рекреирате виртуелни машини за да ја тестирате оваа или онаа апликација. Поради мрзеливост размислував да го автоматизирам процесот. Моето пребарување ме доведе до прекрасен производ од компанијата хашикорп, тераформски.

Мислам дека многу луѓе знаат што е Terraform, но оние кои не знаат, тоа е апликација за управување со кој било облак, инфраструктура или услуга користејќи го концептот IasC (Инфраструктурата како код).

Јас го користам ESXi како моја околина за виртуелизација. Прилично едноставен, удобен и сигурен.
Предвидувам прашање.

Зошто terraform ако можете да користите vCenter сервер?

Секако дека можеш, но... Прво, ова е дополнителна лиценца, второ, овој производ има многу ресурси и едноставно нема да се вклопи на мојот домашен сервер, и трето, тоа е можност да ги надградите вашите вештини.

Платформата Intel NUC делува како сервер:

CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
ESXi version: 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

додадете го следниот блок на крајот од датотеката:

<service id="1000">
  <id>packer-vnc</id>
  <rule id="0000">
    <direction>inbound</direction>
    <protocol>tcp</protocol>
    <porttype>dst</porttype>
    <port>
      <begin>5900</begin>
      <end>6000</end>
    </port>
  </rule>
  <enabled>true</enabled>
  <required>true</required>
</service>

Излегуваме и спасуваме. Сменете ги правата назад и рестартирајте ја услугата:

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

Во движење верзија на пакувачот Може да се појави грешка бидејќи 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
Extracting VMware Installer...done.
You must accept the VMware OVF Tool component for Linux End User
License Agreement to continue.  Press Enter to proceed.
VMWARE END USER LICENSE AGREEMENT
Do you agree? [yes/no]:yes
The product is ready to be installed.  Press Enter to begin
installation or Ctrl-C to cancel. 
Installing VMware OVF Tool component for Linux 4.4.0
    Configuring...
[######################################################################] 100%
Installation was successful.

Ајде да продолжиме.

Подготвив се што ми требаше за свирката.

git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxi

Во папката iso треба да ја инсталирате дистрибуцијата на оперативниот систем. Во мојот случај тоа е центос 7.

Исто така, треба да ја уредите датотеката centos-7-base.json:

variables: указать свои данные для подключения
iso_urls: указать актуальный
iso_checksum: чексумма вашего образа 

По сите промени, стартувајте ја изградбата:

/usr/bin/packer build centos-7-base.json

Ако сè е правилно конфигурирано и наведено, тогаш ќе видите слика од автоматската инсталација на оперативниот систем. Овој процес ми трае 7-8 минути.

По успешното завршување во папката излез-пакер-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
terraform version
Terraform v0.12.24

Бидејќи Terraform нема провајдер за ESXi, треба да изградите еден.

Тргни:

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

Прво, уредете ја датотеката променливи.tf. Треба да наведете врска со серверот ESXi.

Во датотека network_config.cfg ги содржи мрежните поставки на идната виртуелна машина. Го менуваме за да одговара на нашите потреби и ја извршуваме еднослојната:

sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.json

Па, во датотеката главен.tf сменете ја патеката до датотеката ova во ваша, ако е различна.

Моментот на вистината.

terraform init
Initializing the backend...

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

data.template_file.Default: Refreshing state...
data.template_file.network_config: Refreshing state...

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # esxi_guest.Default will be created
  + resource "esxi_guest" "Default" {
      + boot_disk_size         = (known after apply)
      + disk_store             = "datastore1"
      + guest_name             = "centos7-test"
      + guest_shutdown_timeout = (known after apply)
      + guest_startup_timeout  = (known after apply)
      + guestinfo              = {
          + "metadata"          = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata"          = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + guestos                = (known after apply)
      + id                     = (known after apply)
      + ip_address             = (known after apply)
      + memsize                = "1024"
      + notes                  = (known after apply)
      + numvcpus               = (known after apply)
      + ovf_properties_timer   = (known after apply)
      + ovf_source             = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
      + power                  = "on"
      + resource_pool_name     = (known after apply)
      + virthwver              = (known after apply)

      + network_interfaces {
          + mac_address     = (known after apply)
          + nic_type        = (known after apply)
          + virtual_network = "VM Network"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Заврши:

terraform apply

Ако сè е направено правилно, тогаш за 2-3 минути ќе се распореди нова виртуелна машина од претходно креираната слика.

Опциите за користење на сето ова се ограничени само од вашата имагинација.

Сакав само да го споделам моето искуство и да ги покажам главните точки кога работам со овие производи.

Ти благодарам за вниманието!

П.С.: Ќе ми биде драго да добијам конструктивна критика.

Извор: www.habr.com

Додадете коментар