Rychlé nasazení vm ESXi s Terraformem

Ahoj všichni, jmenuji se Ivan a jsem správce systému alkoholik (OPS).

Rád bych vám řekl, jak nasazuji virtuální stroje na ESXi bez vCenter pomocí Terraform.

Docela často musíte nasadit/znovu vytvořit virtuální stroje, abyste mohli otestovat tu či onu aplikaci. Kvůli lenosti jsem přemýšlel o automatizaci procesu. Mé hledání mě přivedlo k úžasnému produktu společnosti hashicorp, terraform.

Myslím, že mnoho lidí ví, co je Terraform, a kdo neví, je to aplikace pro správu jakéhokoli cloudu, infrastruktury nebo služby využívající koncept IasC (Infrastruktura jako kód).

Jako své virtualizační prostředí používám ESXi. Docela jednoduché, pohodlné a spolehlivé.
Očekávám otázku.

Proč terraform, když můžete použít vCenter Server?

Samozřejmě můžete, ale. Za prvé se jedná o dodatečnou licenci, za druhé je tento produkt velmi náročný na zdroje a jednoduše se nevejde na můj domácí server a za třetí možnost upgradovat dovednosti.

Platforma Intel NUC funguje jako server:

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.)

A tak nejdřív.

Prozatím si nastavíme esxi, konkrétně otevřete VNC port v nastavení firewallu.

Ve výchozím nastavení je soubor chráněn proti zápisu. Provádíme následující manipulace:

chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xml

připojte na konec souboru následující blok:

<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>

Odejít, uložit. Změňte práva zpět a restartujte službu:

chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refresh

Aktuální, dokud nebude hostitel restartován. Poté bude nutné tuto manipulaci opakovat.

Dále budu provádět veškerou práci ve virtuálním stroji na stejném serveru.

Vlastnosti:

OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: disable
firewalld: disable

Dále potřebujeme balení, také produkt společnosti HashiCorp.

Je potřeba automaticky sestavit "zlatý" obrázek. které v budoucnu využijeme.

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

Na cestách verze packeru může dojít k chybě, protože založený na RedHat může obsahovat balíček se stejným názvem.

which -a packer
/usr/sbin/packer

Pro řešení můžete vytvořit symbolický odkaz nebo použít absolutní cestu /usr/bin/packer.

Nyní potřebujeme ovftool odkaz ke stažení. Stáhněte, vložte na server a nainstalujte:

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.

Jedeme dál.

Na gith jsem připravil vše, co potřebujete.

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

Do složky iso musíte vložit distribuční sadu operačního systému. V mém případě je to 7 centů.

Musíte také upravit soubor. centos-7-base.json:

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

Po všech změnách spusťte sestavu:

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

Pokud je vše správně nakonfigurováno a specifikováno, zobrazí se obrázek automatické instalace operačního systému. Tento proces mi trvá 7-8 minut.

Po úspěšném dokončení ve složce output-packer-centos7-x86_64 ova soubor bude umístěn.

Nainstalujte 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

Protože Terraform nemá poskytovatele pro ESXi, musíte si ho vytvořit.

Pustili jsme se:

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

Dále shromažďujeme poskytovatele:

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

Jsme v cíli. Pojďme rozvinout náš obrázek.

Pojďme do složky:

cd /root/create-and-deploy-esxi/centos7

Nejprve upravte soubor proměnné.tf. Musíte zadat připojení k serveru ESXi.

V souboru network_config.cfg obsahovat síťová nastavení budoucího virtuálního stroje. Změňte své potřeby a spusťte jednolinkový:

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

No, v souboru main.tf změňte cestu k souboru ova na svou vlastní, pokud se liší.

Okamžik pravdy.

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.

Dokončit:

terraform apply

Pokud je vše provedeno správně, bude za 2-3 minuty nasazen nový virtuální stroj z dříve vytvořeného obrazu.

Využití toho všeho je omezeno pouze vaší fantazií.

Chtěl jsem se jen podělit o osvědčené postupy a ukázat hlavní body při práci s těmito produkty.

Děkuji za pozornost!

PS: Budu rád za konstruktivní kritiku.

Zdroj: www.habr.com

Přidat komentář