Gyors vm telepítés ESXi-re Terraform segítségével

Helló mindenkinek, Ivan vagyok, és rendszergazda alkoholista (OPS).

Szeretném elmondani, hogyan állítok be virtuális gépeket ESXi-n vCenter nélkül Terraform segítségével.

Elég gyakran szükséges virtuális gépeket telepíteni/újra létrehozni, hogy teszteljem ezt vagy azt az alkalmazást. A lustaságom miatt az automatizációs folyamatra gondoltam. Keresgélésem során ráakadtam a cég csodálatos termékére hashicorp, terraform.

Szerintem sokan tudják, mi a Terraform, de aki nem, annak elmondom, hogy ez egy alkalmazás bármely felhő, infrastruktúra vagy szolgáltatás kezelésére, amely az IasC (Infrastruktúra mint kód).

Virtualizációs környezetként az ESXi-t használom. Elég egyszerű, kényelmes és megbízható.
Előre látom a kérdést.

Miért a terraform, ha használhatjuk a vCenter Server-t?

Használhatjuk, de. Először is, ez egy további licenc, másodszor, ez a termék nagyon erőforrásigényes, és egyszerűen nem fér el az otthoni szerveremen, harmadszor pedig lehetőség a készségeink fejlesztésére.

A szerver egy Intel NUC platform:

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

Így tehát, minden a maga helyén.

Mielőtt nekilátnánk, állítsuk be az ESXi-t, azaz nyissuk meg a VNC portot a tűzfalszabályozásban.

Alapértelmezés szerint a fájl írhatóvé van védve. Végezzen el a következő lépéseket:

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

Adjuk hozzá a fájl végéhez a következő blokkot:

packer-vnc
  
    inbound
    tcp
    dst
    
      5900
      6000
    
  
  true
  true

Kijövünk, mentünk. Visszaállítjuk a jogokat és újraindítjuk a szolgáltatást:

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

Ez újraindításig érvényes. Utána ezt a műveletet meg kell ismételni.

További munkát a virtuális gépen fogom elvégezni ugyanazon a szerveren.

Jellemzők:

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

Ezután szükségünk lesz packer-rel., szintén a HashiCorp cég terméke.

Arra van szükség, hogy automatikusan létrejöjjön a "zöld" kép, amelyet a jövőben használni fogunk.

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

A lépésnél packer version Hiba léphet fel, mivel a RedHat-alapú rendszerekben előfordulhat egy ugyanolyan nevű csomag.

which -a packer
/usr/sbin/packer

A probléma megoldására létrehozhatunk egy szimbolt vagy használhatjuk az abszolút elérési utat. /usr/bin/packer.

Most szükségünk lesz az ovftool-ra. letöltési hivatkozás. Töltse le, helyezze el a szerveren és telepítse:

chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
A VMware telepítő kicsomagolása... kész.
A VMware OVF Tool összetevőjének Linux Felhasználói Licencszerződését el kell fogadnia a folytatáshoz.  Nyomja meg az Enter billentyűt a folytatáshoz.
VMWARE FELHASZNÁLÓI LICENC SZERZŐDÉS
Egyetért azzal? [igen/nem]:igen
A termék készen áll a telepítésre.  Nyomja meg az Enter billentyűt a telepítés megkezdéséhez, vagy a Ctrl-C billentyűkombinációt a megszakításhoz.
VMWARE OVF TOOL komponens telepítése Linuxra 4.4.0
    Konfigurálás...
[######################################################################] 100%
A telepítés sikeres volt.

Folytassuk.

A GitHub-on mindent előkészítettem.

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

A mappába iso a rendszer operációs rendszerének disztribúcióját kell elhelyezni. Az én esetemben ez a centos 7.

Szükséges továbbá a fájl módosítása: centos-7-base.json:

variables: adja meg saját adatait a csatlakozáshoz
iso_urls: adja meg az aktuálist
iso_checksum: az Ön képe ellenőrző összegyűjtése 

Minden módosítás után indítsa el a gyűjtést:

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

Ha minden be van állítva és helyes, akkor látni fogja az operációs rendszer automatikus telepítését. Ez a folyamat nálam 7-8 percet vesz igénybe.

A sikeres befejezés után a mappában output-packer-centos7-x86_64 ott lesz az ova fájl.

Telepítsük a Terraform-ot:

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

Mivel a Terraform-nak nincs provódera az ESXi-hez, azt össze kell állítani.

Telepítsük a go-t:

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

Ezután elkészítjük a provódert:

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

A célegyenesben vagyunk. Induljunk és telepítsük az imázsunkat.

Lépjünk be a mappába:

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

Első lépésként módosítsuk a fájlt: variables.tfMeg kell adni a kapcsolatot az ESXi szerverrel.

A fájlban network_config.cfg azok a hálózati beállítások szerepelnek, amelyek a jövőbeli virtuális géphez szükségesek. Módosítsa a maga igényei szerint, és indítsa el az egysoros parancsot:

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

És a fájlban main.tf változtassa meg az ova fájl elérési útját a sajátjára, ha az eltér.

Az igazság pillanata.

terraform init
A háttér inicializálása...

A szolgáltató pluginok inicializálása...

A következő szolgáltatók nem tartalmaznak verziókorlátozást a konfigurációban,
így a legújabb verzió lett telepítve.

Az automatikus frissítések megakadályozása érdekében, amelyek új fő verziókat tartalmazhatnak,
ami megszakító módosításokat tartalmazhat, javasolt verzió = "..." korlátozásokat hozzáadni a megfelelő szolgáltató blokkokhoz a konfigurációban, a javasolt korlátozó szöveg szerint:

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

A Terraform sikeresen inicializálva lett!

Most már elkezdheti a munkát a Terraformmal. Próbálja meg futtatni a "terraform plan" parancsot, hogy lássa
milyen változások szükségesek az infrastruktúrájához. Minden Terraform parancsnak most már működnie kell.

Ha valaha beállít vagy módosít modulokat vagy háttér konfigurációkat a Terraform számára,
újra futtassa ezt a parancsot a munkakönyvtár újrainicializálásához. Ha elfelejti, más
parancsok ezt észlelik és emlékeztetik Önöket, ha szükséges.

terraform plan
A Terraform állapot frissítése memóriában a terv előtt...
A frissített állapotot fogja használni a terv kiszámításához, de nem fogja
megőrizni a helyi vagy távoli állapot tárolóban.

data.template_file.Default: Az állapot frissítése...
data.template_file.network_config: Az állapot frissítése...

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

Egy végrehajtási terv készült és az alábbiakban látható.
Az erőforrás műveletek a következő szimbólumokkal vannak jelölve:
  + létrehozás

A Terraform a következő műveleteket fogja végrehajtani:

  # esxi_guest.Default létrehozva
  + resource "esxi_guest" "Default" {
      + boot_disk_size         = (alkalmazás után ismert)
      + disk_store             = "datastore1"
      + guest_name             = "centos7-teszt"
      + guest_shutdown_timeout = (alkalmazás után ismert)
      + guest_startup_timeout  = (alkalmazás után ismert)
      + guestinfo              = {
          + "metadata"          = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata"          = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + guestos                = (alkalmazás után ismert)
      + id                     = (alkalmazás után ismert)
      + ip_address             = (alkalmazás után ismert)
      + memsize                = "1024"
      + notes                  = (alkalmazás után ismert)
      + numvcpus               = (alkalmazás után ismert)
      + ovf_properties_timer   = (alkalmazás után ismert)
      + ovf_source             = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
      + power                  = "on"
      + resource_pool_name     = (alkalmazás után ismert)
      + virthwver              = (alkalmazás után ismert)

      + network_interfaces {
          + mac_address     = (alkalmazás után ismert)
          + nic_type        = (alkalmazás után ismert)
          + virtual_network = "VM Network"
        }
    }

Terv: 1 hozzáadás, 0 megváltoztatás, 0 megsemmisítés.

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

Megjegyzés: Nem adtál meg "-out" paramétert a terv mentéséhez, így a Terraform
nem tudja garantálni, hogy pontosan ezek a műveletek fognak végrehajtódni, ha a
"terraform apply" később futtatásra kerül.

Befejezés:

terraform apply

Ha minden jól ment, akkor 2-3 percen belül egy új virtuális gép lesz telepítve a korábban elkészített képből.

Ezek használati lehetőségei csak a képzelet korlátait jelölik.

Csak szerettem volna megosztani a tapasztalataimat és bemutatni a főbb pontokat a termékek használatakor.

Köszönöm a figyelmet!

P.S.: Örömmel fogadom az építő jellegű kritikát.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster