Hitro nalaganje vm ESXi s pomočjo Terraform

Pozdravljeni vsi, moje ime je Ivan in sem profesionalni sistemski administrator (OPS).

Rad bi delil, kako postavljam virtualne stroje na ESXi brez vCenter s pomočjo Terraform.

Dokaj pogosto je potrebno postaviti/presetaviti virtualne stroje za testiranje različnih aplikacij. Zaradi lenobe sem pomislil na avtomatizacijo tega procesa. Moje iskanje me je pripeljalo do čudovitega izdelka podjetja hashicorp, terraform.

Mislim, da mnogi vedo, kaj je Terraform, tisti, ki ne vedo, pa naj povem, da je to aplikacija za upravljanje z vsem oblakom, infrastrukturo ali storitvijo, ki uporablja koncept IasC (Infrastruktura kot koda).

Kot okolje virtualizacije uporabljam ESXi. Zelo preprosto, priročno in zanesljivo.
Predvidevam, da se bo pojavilo vprašanje.

Zakaj Terraform, če lahko uporabimo vCenter Server?

Seveda, ampak. Prvič, to je dodatna licenca, drugič, ta izdelek je zelo virovno zahteven in preprosto ne bo deloval na mojem domačem strežniku, in tretjič, gre za priložnost za izboljšanje veščin.

Kot strežnik deluje platforma Intel NUC:

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

In tako, na vse po vrsti.

Najprej nastavimo ESXi, torej odprejmo VNC port v nastavitvah požarnega zidu.

Privzeto je datoteka zaščitena pred zapisovanjem. Izvedimo naslednje manipulacije:

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

Na konec datoteke dodamo naslednji blok:

packer-vnc
  
    inbound
    tcp
    dst
    
      5900
      6000
    
  
  true
  true

Izstopimo, shranimo. Spremenimo pravice nazaj in ponovno zaženemo storitev:

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

To velja do ponovnega zagona gostitelja. Po tem bo potrebno to manipulacijo ponoviti.

Celotno delo bom nadaljeval v virtualnem stroju na tem istem strežniku.

Lastnosti:

OS: CentOS 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: onemogočeno
firewalld: onemogočeno

Nato bomo potrebovali packer, prav tako izdelek podjetja HashiCorp.

Potreben je za samodejno ustvarjanje „zlatega“ slike. Ki jo bomo uporabljali v prihodnosti.

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 koraku packer version lahko pride do napake, saj je v sistemu RedHat-based lahko paket s tako istim imenom.

which -a packer
/usr/sbin/packer

Za rešitev lahko ustvarite simbolično povezavo ali uporabite absolutno pot. /usr/bin/packer.

Zdaj potrebujemo ovftool. povezava za prenos. Prenesemo, naložimo na strežnik in namestimo:

chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Izvleče se VMware Installer...končano.
Sprejeti morate licenčno pogodbo za končnega uporabnika VMware OVF Tool za Linux, da lahko nadaljujete.  Pritisnite Enter, da nadaljujete.
PRAVILA LICENCE ZA KONČNE UPORABLJALCE VMWARE
Se strinjate? [yes/no]:yes
Izdelek je pripravljen za namestitev.  Pritisnite Enter za začetek
namestitve ali Ctrl-C za preklic.
Namestitev VMware OVF Tool komponenta za Linux 4.4.0
    Konfiguriranje...
[######################################################################] 100%
Namestitev je bila uspešna.

Gremo naprej.

Na Gitu sem pripravil vse potrebno.

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

V mapo iso moramo naložiti distribucijo operacijskega sistema. V mojem primeru je to centos 7.

Prav tako je potrebno urediti datoteko centos-7-base.json:

variables: navedite svoje podatke za povezavo
iso_urls: navedite aktualen
iso_checksum: checksum vašega obrazca 

Po vseh spremembah zagnamo gradnjo:

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

Če je vse ustrezno nastavljeno, boste videli sliko samodejne namestitve operacijskega sistema. Ta proces traja približno 7-8 minut.

Po uspešnem zaključku v mapi output-packer-centos7-x86_64 se bo nahajal ova datoteka.

Namestimo 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 različica
Terraform v0.12.24

Ker Terraform nima ponudnika za ESXi, ga je potrebno zgraditi.

Namestimo 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 različica
go različica go1.14.2 linux/amd64

Nato zgradimo ponudnika:

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 ciljni ravnini smo. Pojdimo razširiti našo sliko.

Preidemo v mapo:

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

Najprej uredimo datoteko variables.tf. Potrebno je navesti povezavo do strežnika ESXi.

V datoteki network_config.cfg vsebuje omrežne nastavitve prihodnje virtualne naprave. Spremenimo jih po svojih potrebah in zaženemo enovrstični ukaz:

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

In v datoteki main.tf spremenimo pot do ova datoteke, če se razlikuje.

Trenutek resnice.

terraform init
Inicializacija backend-a...

Inicializacija provider plugin-ova...

Sledeći provider-i nemaju ograničenja verzije u konfiguraciji,
pa je instalirana najnovija verzija.

Da biste sprečili automatske nadogradnje na nove glavne verzije koje mogu sadržati prekidne
promene, preporučuje se dodavanje ograničenja verzije = "..." u
odgovarajuće provider blokove u konfiguraciji, sa predloženim stringovima ograničenja
ispod.

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

Terraform je uspešno inicijalizovan!

Sada možete početi da radite sa Terraform-om. Pokušajte da pokrenete "terraform plan" da vidite
bilo koje promene koje su potrebne za vašu infrastrukturu. Svi Terraform komandi
bi sada trebali raditi.

Ako ikada postavite ili promenite module ili backend konfiguraciju za Terraform,
ponovo pokrenite ovu komandu da re-inicijalizujete svoj radni direktorijum. Ako zaboravite, druge
komande će to detektovati i podsetiti vas da to učinite ako je potrebno.

terraform plan
Osvežavanje Terraform stanja u memoriji pre plana...
Osveženo stanje će se koristiti za izračunavanje ovog plana, ali neće biti
snimljeno u lokalno ili daljinsko skladište.

data.template_file.Default: Osvežavanje stanja...
data.template_file.network_config: Osvežavanje stanja...

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

Generisan je plan izvršenja i prikazan je ispod.
Radnje resursa su označene sledećim simbolima:
  + kreirati

Terraform će izvršiti sledeće radnje:

  # esxi_guest.Default će biti kreiran
  + resurs "esxi_guest" "Default" {
      + veličina_boot_disk-a = (poznato nakon primene)
      + disk_store = "datastore1"
      + ime_gosta = "centos7-test"
      + vreme_čekanja_isključenja_gosta = (poznato nakon primene)
      + vreme_čekanja_pokretanja_gosta = (poznato nakon primene)
      + guestinfo = {
          + "metadata" = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata" = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + gost_os = (poznato nakon primene)
      + id = (poznato nakon primene)
      + ip_adresa = (poznato nakon primene)
      + veličina_memorije = "1024"
      + beleške = (poznato nakon primene)
      + broj_vcpu-a = (poznato nakon primene)
      + ovf_properties_timer = (poznato nakon primene)
      + ovf_izvor = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
      + napajanje = "uključeno"
      + ime_resursnog_pool-a = (poznato nakon primene)
      + virthwver = (poznato nakon primene)

      + mrežne_interfejse {
          + mac_adresa = (poznato nakon primene)
          + tip_nica = (poznato nakon primene)
          + virtuelna_mreža = "VM Network"
        }
    }

Plan: 1 da se doda, 0 da se promeni, 0 da se uništi.

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

Napomena: Niste odredili "-out" parametar za čuvanje ovog plana, tako da Terraform
ne može garantovati da će tačno ove radnje biti izvršene ako
"terraform apply" bude kasnije pokrenut.

Završetak:

terraform apply

Ako je sve urađeno ispravno, nova virtuelna mašina biće postavljena iz ranije napravljenog imidža za 2-3 minuta.

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

Samo sam želeo da podelim svoje napore i pokažem osnovne trenutke prilikom rada sa ovim proizvodima.

Hvala na pažnji!

P.S.: biću zahvalan na konstruktivnoj kritici.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster