Kiire vm ESXi juurutamine Terraformi abil

Tere kĂ”igile, minu nimi on Ivan ja ma olen sĂŒsteemiadministraator (OPS).

Tahaksin rÀÀkida, kuidas ma kÀitan virtuaalmasinaid ESXi-s ilma vCenterita kasutades Terraformi.

Sage on, et pean virtuaalmasinaid ĂŒles seadma vĂ”i uuesti looma, et testida seda vĂ”i teist rakendust. Laiskuse tĂ”ttu mĂ”tlesin automaatimise protsessile. Minu otsingud viisid mind suurepĂ€rase toote juurde ettevĂ”ttelt hashicorp, terraform.

Usun, et paljud teavad, mis on Terraform, aga kes ei tea, siis see on rakendus, millega saab hallata igasugust pilve, infrastruktuuri vÔi teenust, kasutades IaaS kontseptsiooni (Infrastruktuur kui kood).

Virtuaaliseerimiskeskkonnana kasutan ESXi-d. See on ĂŒsna lihtne, mugav ja usaldusvÀÀrne.
Ette kujutan kĂŒsimust.

Miks Terraform, kui saab kasutada vCenter Serverit?

Muidugi saab, aga. Esiteks, see on lisalitsents, teiseks on see toode vÀga ressursinÔudlik ja lihtsalt ei mahtu mu koduserverisse, ning kolmandaks on vÔimalus oma oskusi arendada.

Serverina toimib Intel NUC platvorm:

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

Nii, rÀÀgime kÔigest korraga.

KĂ€ivitage esxi seadistamine, avades VNC pordi tulemĂŒĂŒris.

Vaikimisi on fail kirjutuskaitstud. Teeme jÀrgmised sammud:

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

Lisage faili lÔppu jÀrgmine plokk:

packer-vnc
  
    inbound
    tcp
    dst
    
      5900
      6000
    
  
  true
  true

VÀlju ja salvesta. Muuda Ôigused tagasi ja taaskÀivita teenus:

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

Kehtib kuni hosti taaskÀivitamiseni. PÀrast seda tuleb seda toimet uuesti korda saata.

Edasi teen kÔik tööd virtuaalses masinas samal serveril.

Tehnilised andmed:

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

Edasi vajame packer, samuti HashiCorpi tooteid.

See on vajalik „kuldse” pildi automaatseks loomiseks, mida me tulevikus kasutame.

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

Meistri sammul packer versioon vÔib esineda tÔrge, kuna RedHat-pÔhises vÔib olla pakett sama nimega.

which -a packer
/usr/sbin/packer

Probleemi lahendamiseks saad luua sĂŒmlink vĂ”i kasutada absoluutset teed /usr/bin/packer.

NĂŒĂŒd vajame ovftooli allalaadimise link. Laeme alla, paneme serverisse ja installime:

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.

JĂ€tkame.

Git'is olen ette valmistanud kÔik vajaliku.

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

Katalooge iso peame panema operatsioonisĂŒsteemi distributsiooni. Minu puhul on see CentOS 7.

Samuti tuleb redigeerida faili centos-7-base.json:

variables: mÀÀrake oma ĂŒhenduse andmed
iso_urls: mÀrkige aktuaalne
iso_checksum: teie pildi kontrollsumma 

PÀrast kÔiki muudatusi kÀivitame kogumise:

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

Kui kĂ”ik on Ă”igesti seadistatud, nĂ€ete operatsioonisĂŒsteemi automaatse installimise protsessi. See protsess kestab mul 7-8 minutit.

PÀrast edukat lÔpetamist kaustas output-packer-centos7-x86_64 oleb ova fail.

Installime Terraformi:

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

Kuna Terraformil pole ESXi jaoks pakkujat, peame selle kokku panema.

Installime 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

SeejÀrel koostame pakkuja:

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

Oleme finiĆĄis. Alustame meie pildi levitamist.

LĂ€heme kausta:

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

Esiteks redigeerime faili variables.tf. Peame mÀÀrama ĂŒhenduse ESXi serveriga.

Failis network_config.cfg siit on tulevase virtuaalmasina vĂ”rguseaded. Muuda vastavalt oma vajadustele ja kĂ€ivita ĂŒks rida:

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

Ja failis main.tf muuda ova faili tee oma vastavaks, kui see erineb.

TÔe hetk.

terraform init
Backend’i initsialiseerimine...

Pakettide pluginate initsialiseerimine...

JĂ€rgmised pakkujad ei oma konfiguratsioonis versioonipiiranguid,
seega installiti uusim versioon.

Automaatsete uuenduste vÀltimiseks uutele peamistele versioonidele,
mis vÔivad sisaldada purustavaid muudatusi, on soovitatav lisada versioon = "..." piirangud
vastavatesse pakkuja plokkidesse konfiguratsioonis, nagu on soovitatud allpool.

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

Terraform on edukalt initsialiseeritud!

NĂŒĂŒd saad alustada Terraformiga töötamist. Proovi kĂ€ivitada "terraform plan", et nĂ€ha
kÔiki muutusi, mis on vajalikud sinu infrastruktuuri jaoks. KÔik Terraformi kÀsud
peaksid nĂŒĂŒd töötama.

Kui kunagi seadistad vÔi muudad Terraformi mooduleid vÔi backend konfiguratsiooni,
kÀivita see kÀsk, et oma töökausta uuesti initsialiseerida. Kui unustad,
siis teised kÀsud tuvastavad selle ja tuletavad vajadusel meelde.

terraform plan
VÀrskendatakse Terraformi olekut mÀllu enne plaani...
VĂ€rskendatud olekut kasutatakse selle plaani arvutamiseks, kuid see ei
salvestata kohalikku ega kaugoleku salvestusse.

data.template_file.Default: Oleku vÀrskendamine...
data.template_file.network_config: Oleku vÀrskendamine...

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

Teostusplaan on genereeritud ja on nÀidatud allpool.
Ressursside toimingud on mĂ€rgitud jĂ€rgmiste sĂŒmbolitega:
  + loo

Terraform teostab jÀrgmised toimingud:

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

      + network_interfaces {
          + mac_address     = (teatakse pÀrast rakendamist)
          + nic_type        = (teatakse pÀrast rakendamist)
          + virtual_network = "VM Network"
        }
    }

Plaan: 1 lisada, 0 muuta, 0 hÀvitada.

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

MÀrkus: te ei mÀÀranud "-out" parameetrit selle plaani salvestamiseks, seega Terraform
ei saa garanteerida, et just need toimingud tehakse, kui
"terraform apply" kÀivitatakse.

LÔpp:

terraform apply

Kui kÔik on Ôigesti tehtud, siis 2-3 minuti jooksul kÀivitatakse uus virtuaalne masin varasemalt loodud pildist.

KasutusvÔimalused on piirdunud vaid kujutlusvÔimega.

Soovisin lihtsalt jagada teadmisi ja nÀidata peamisi punkte nende toodetega töötamisel.

AitÀh tÀhelepanu eest!

P.S.: Ootan konstruktiivset kriitikat.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster