Brza implementacija vm ESXi putem Terraform

Pozdrav svima, ja sam Ivan i sistemski administrator alkoholičar (OPS).

Želio bih pričati o tome kako postavljam virtualne mašine na ESXi bez vCenter-a koristeći Terraform.

Prilično često je potrebno postavljati/ponovno kreirati virtualke kako bih testirao neku aplikaciju. Zbog lenjosti razmišljao sam o automatizaciji tog procesa. Moje pretrage odvele su me do nevjerojatnog proizvoda kompanije hashicorp, terraform.

Mislim da mnogi znaju što je Terraform, a tko ne zna, to je aplikacija za upravljanje bilo kojim oblakom, infrastrukturom ili uslugom koristeći koncept IasC (Infrastruktura kao kod).

Za okruženje virtualizacije koristim ESXi. Prilično je jednostavan, udoban i pouzdan.
Predviđam pitanje.

Zašto Terraform ako se može koristiti vCenter Server?

Naravno, može se koristiti, ali. Prvo, to je dodatna licenca, drugo, taj proizvod je vrlo resursno zahtjevan i jednostavno ne može stati na moj kućni server, i treće, mogućnost usavršavanja vještina.

Kao server koristi se Intel NUC platforma:

CPU: 2 CPU-a x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
ESXi verzija: ESXi-6.5.0-4564106-standard (VMware, Inc.)

I tako, o svemu redom.

Za sada, postavimo ESXi, odnosno otvorimo VNC port u postavkama vatrozida.

Po zadanim postavkama, datoteka je zaštićena od pisanja. Provedi sljedeće manipulacije:

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

dodaj u kraj datoteke sljedeći blok:

packer-vnc
  
    inbound
    tcp
    dst
    
      5900
      6000
    
  
  true
  true

Izlazimo, spremamo. Vraćamo prava i ponovo pokrećemo uslugu:

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

Aktivno je do ponovnog pokretanja hosta. Nakon toga, ovu manipulaciju će biti potrebno ponoviti.

Dalje, sav posao ću raditi na virtualnoj mašini na ovom serveru.

Karakteristike:

OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: onemogućen
firewalld: onemogućen

Dalje nam je potreban packer, također proizvod kompanije HashiCorp.

Treba nam za automatsko kreiranje ‘zlatne’ slike. Koju ćemo koristiti u budućnosti.

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 verzija
Packer v1.5.5

Na koraku packer verzija može doći do greške, jer u RedHat-based može postojati paket s istim imenom.

which -a packer
/usr/sbin/packer

Za rješenje možete stvoriti simboličku vezu ili koristiti apsolutnu putanju /usr/bin/packer.

Sada će nam biti potreban ovftool link za preuzimanje. Preuzimamo, stavljamo na server i instaliramo:

chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Izdvajanje VMware instalatera...urađeno.
Morate prihvatiti VMware OVF Tool komponentu za Linux Ugovor o licenci krajnjeg korisnika da biste nastaviti. Pritisnite Enter za nastavak.
VMWARE UGOVOR O LICENCI KRAJNJEG KORISNIKA
Slažete li se? [yes/no]:yes
Proizvod je spreman za instalaciju. Pritisnite Enter za početak
instalacije ili Ctrl-C za otkazivanje.
Instalacija VMware OVF Tool komponente za Linux 4.4.0
    Konfiguriranje...
[######################################################################] 100%
Instalacija je bila uspješna.

Idemo dalje.

Na gitu sam pripremio sve što je potrebno.

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

U mapu iso treba staviti distribuciju operativnog sustava. U mom slučaju to je centos 7.

Također je potrebno urediti datoteku centos-7-base.json:

variables: navesti svoje podatke za povezivanje
iso_urls: navesti aktualni
iso_checksum: checksum vašeg imidža 

Nakon svih promjena pokrećemo izgradnju:

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

Ako je sve podešeno i točno navedeno, vidjet ćete prizor automatske instalacije operativnog sustava. Ovaj proces traje 7-8 minuta.

Nakon uspješnog završetka u mapi output-packer-centos7-x86_64 bit će se nalaziti ova datoteka.

Instaliramo 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

Budući da Terraform nema provajder za ESXi, potrebno je izraditi ga.

Instaliramo 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

Zatim sastavljamo provajder:

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

Na smo završnom dijelu. Krenimo s postavljanjem našeg imidža.

Prelazimo u mapu:

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

Prvo, uređujemo datoteku variables.tf. Potrebno je navesti vezu sa serverom ESXi.

U datoteci network_config.cfg nalaze se mrežne postavke buduće virtualne mašine. Promijenite prema svojim potrebama i pokrenite jednostruki redak:

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

I u datoteci main.tf promijenite put do ova datoteke na svoj, ako se razlikuje.

Trenutak istine.

terraform init
Inicijalizacija backenda...

Inicijalizacija dodataka pružatelja...

Sljedeći pružatelji nemaju nikakve verzijske ograničenja u konfiguraciji,
pa je instalirana najnovija verzija.

Da biste spriječili automatske nadogradnje na nove glavne verzije koje mogu sadržavati
sukobljene promjene, preporučuje se dodavanje ograničenja verzije = "..." u
odgovarajuće blokove pružatelja u konfiguraciji, s predloženim stringovima ograničenja
u nastavku.

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

Terraform je uspješno inicijaliziran!

Sada možete započeti rad s Terraformom. Pokušajte pokrenuti "terraform plan" da vidite
bilo kakve promjene koje su potrebne za vašu infrastrukturu. Sve Terraform naredbe
bi sada trebale raditi.

Ako ikada postavite ili promijenite module ili konfiguraciju backenda za Terraform,
ponovno pokrenite ovu naredbu da ponovno inicijalizirate svoj radni direktorij. Ako zaboravite, druge
naredbe će to zapaziti i podsjetiti vas na to ako bude potrebno.

terraform plan
Obnavljanje stanja Terraform-a u memoriji prije plana...
Obnovljeno stanje će se koristiti za izračun ovog plana, ali neće biti
istraženo u lokalnom ili daljinskom skladištu stanja.

data.template_file.Default: Obnavljanje stanja...
data.template_file.network_config: Obnavljanje stanja...

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

Plan izvršenja je generiran i prikazan je u nastavku.
Akcije resursa označene su sljedećim simbolima:
  + kreirati

Terraform će izvesti sljedeće radnje:

  # esxi_guest.Default će biti kreiran
  + resurs "esxi_guest" "Default" {
      + boot_disk_size         = (poznato nakon primjene)
      + disk_store             = "datastore1"
      + guest_name             = "centos7-test"
      + guest_shutdown_timeout = (poznato nakon primjene)
      + guest_startup_timeout  = (poznato nakon primjene)
      + guestinfo              = {
          + "metadata"          = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata"          = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + guestos                = (poznato nakon primjene)
      + id                     = (poznato nakon primjene)
      + ip_address             = (poznato nakon primjene)
      + memsize                = "1024"
      + notes                  = (poznato nakon primjene)
      + numvcpus               = (poznato nakon primjene)
      + ovf_properties_timer   = (poznato nakon primjene)
      + ovf_source             = "\root\create-and-deploy-esxi\output-packer-centos7-x86_64\packer-centos7-x86_64.ova"
      + power                  = "uključen"
      + resource_pool_name     = (poznato nakon primjene)
      + virthwver              = (poznato nakon primjene)

      + mrežno sučelje {
          + mac_address     = (poznato nakon primjene)
          + nic_type        = (poznato nakon primjene)
          + virtual_network = "VM Network"
        }
    }

Plan: 1 za dodavanje, 0 za promjenu, 0 za uništavanje.

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

Napomena: Niste odredili parametar "-out" za spremanje ovog plana, tako da Terraform
ne može jamčiti da će se točno ove radnje izvršiti ako
"terraform apply" bude naknadno pokrenut.

Završeno:

terraform apply

Ako je sve učinjeno ispravno, nova virtualna mašina će se implementirati iz prethodno napravljenog predloška za 2-3 minute.

Mogućnosti korištenja svega ovoga ograničene su samo maštom.

Samo sam želio podijeliti svoja iskustva i pokazati glavne aspekte rada s tim proizvodima.

Hvala na pozornosti!

P.S.: Bio bih zahvalan na konstruktivnoj kritici.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster