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 , .
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.xmlNa konec datoteke dodamo naslednji blok:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueIzstopimo, shranimo. Spremenimo pravice nazaj in ponovno zaženemo storitev:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshTo 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čenoNato bomo potrebovali , 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.5Na koraku packer version lahko pride do napake, saj je v sistemu RedHat-based lahko paket s tako istim imenom.
which -a packer
/usr/sbin/packerZa rešitev lahko ustvarite simbolično povezavo ali uporabite absolutno pot. /usr/bin/packer.
Zdaj potrebujemo ovftool. . 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-esxiV 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.24Ker 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/amd64Nato 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/binNa ciljni ravnini smo. Pojdimo razširiti našo sliko.
Preidemo v mapo:
cd /root/create-and-deploy-esxi/centos7Najprej 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.jsonIn 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 applyAko 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
