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 , .
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.xmlAdjuk hozzá a fájl végéhez a következő blokkot:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueKijö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 refreshEz ú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: disableEzután szükségünk lesz , 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.5A 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/packerA 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. . 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-esxiA 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.jsonHa 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.24Mivel 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/amd64Ezutá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/binA célegyenesben vagyunk. Induljunk és telepítsük az imázsunkat.
Lépjünk be a mappába:
cd /root/create-and-deploy-esxi/centos7Első 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 applyHa 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
