Hej alla, jag heter Ivan och jag Àr en systemadministratör (OPS) som har problem med alkohol.
Jag skulle vilja berÀtta om hur jag distribuerar virtuella maskiner pÄ ESXi utan vCenter med hjÀlp av Terraform.
Ganska ofta behöver jag distribuera/Äterskapa virtuella maskiner för att testa olika applikationer. PÄ grund av lathet tÀnkte jag pÄ att automatisera processen. Mina sökningar ledde mig till en fantastisk produkt frÄn företaget , .
Jag tror mÄnga vet vad Terraform Àr, och för de som inte vet, Àr det en applikation för att hantera vilken moln-, infrastruktur- eller tjÀnst som helst med hjÀlp av konceptet IasC (Infrastruktur som kod).
Som virtualliseringsmiljö anvÀnder jag ESXi. Ganska enkel, bekvÀm och pÄlitlig.
Jag förutser frÄgan.
Varför terraform om man kan anvÀnda vCenter Server?
Visst kan man, men. För det första Àr det en extra licens, för det andra Àr denna produkt mycket resurskrÀvande och helt enkelt inte fÄr plats pÄ min hemmaserver, och för det tredje ger det möjlighet att förbÀttra fÀrdigheterna.
Som server anvÀnds plattformen Intel NUC:
CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
ESXi version: ESXi-6.5.0-4564106-standard (VMware, Inc.)Och sÄ, lÄt oss ta det i ordning.
LÄt oss nu konfigurera esxi, det vill sÀga öppna VNC-porten i brandvÀggens instÀllningar.
Som standard Àr filen skrivskyddad. Vi gör följande manipulationer:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlLÀgg till följande block i slutet av filen:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueVi gĂ„r ut, sparar. Ăndrar rĂ€ttigheterna tillbaka och startar om tjĂ€nsten:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshGÀller tills vÀrden startas om. Efter det mÄste denna ÄtgÀrd upprepas.
Vidare kommer jag att utföra allt arbete i en virtuell maskin pÄ denna server.
Specifikationer:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: disable
firewalld: disableDÀrefter behövde vi , ocksÄ en produkt frÄn HashiCorp.
Det behövs för automatisk skapning av en "guld" bild. Som vi kommer att anvÀnda i framtiden.
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.5PÄ steg packer version Det kan uppstÄ ett fel, eftersom det kan finnas ett paket med samma namn i RedHat-baserade system.
which -a packer
/usr/sbin/packerFör att lösa detta kan du skapa en symlink eller anvÀnda den absoluta sökvÀgen. /usr/bin/packer.
Nu behöver vi ovftool. . Ladda ner, placera pÄ servern och installera:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Extraherar VMware-installatören... klart.
Du mÄste acceptera VMware OVF Tool-komponenten för Linux slutanvÀndarlicensavtal för att fortsÀtta. Tryck pÄ Enter för att fortsÀtta.
VMWARE SLUTANVĂNDARLICENSAVTAL
Accepterar du? [yes/no]:yes
Produkten Àr redo att installeras. Tryck pÄ Enter för att börja installationen eller Ctrl-C för att avbryta.
Installerar VMware OVF Tool-komponenten för Linux 4.4.0
Konfigurerar...
[######################################################################] 100%
Installationen var framgÄngsrik.Vi gÄr vidare.
PÄ Git har jag förberett allt som behövs.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiI mappen iso mÄste distributionsfilen för operativsystemet placeras. I mitt fall Àr det CentOS 7.
Det Àr ocksÄ nödvÀndigt att redigera filen centos-7-base.json:
variables: ange dina uppgifter för anslutning
iso_urls: ange den aktuella
iso_checksum: checksum för din bild. Efter alla Àndringar kör vi byggandet:
/usr/bin/packer build centos-7-base.jsonOm allt Àr korrekt konfigurerat kommer du att se en bild av den automatiska installationen av operativsystemet. Denna process tar 7-8 minuter för mig.
Efter att installationen har slutförts kommer mappen output-packer-centos7-x86_64 att innehÄlla OVA-filen.
Vi installerar 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 version
Terraform v0.12.24Eftersom Terraform inte har en leverantör för ESXi, mÄste den byggas.
Installerar 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/amd64DÀrefter bygger vi leverantören:
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/binVi Àr pÄ slutet av vÀgen. LÄt oss börja rulla ut vÄr bild.
Vi gÄr till mappen:
cd /root/create-and-deploy-esxi/centos7Först redigerar vi filen variables.tf. Vi mÄste ange anslutningen till ESXi-servern.
I filen network_config.cfg innehÄller nÀtverksinstÀllningarna för den framtida virtuella maskinen. Vi Àndrar enligt vÄra behov och kör en oneliners:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonOch i filen main.tf Àndrar vi vÀgen till OVA-filen om den skiljer sig.
Det Àr ögonblicket av sanning.
terraform init
Initierar backend...
Initierar leverantörsplugins...
Följande leverantörer har inga versionsbegrÀnsningar i konfigurationen,
sÄ den senaste versionen installerades.
För att förhindra automatiska uppgraderingar till nya större versioner som kan innehÄlla brytande
Àndringar rekommenderas det att lÀgga till version = "..." begrÀnsningar i de
motsvarande leverantörsblocken i konfigurationen, med de föreslagna begrÀnsningsstrÀngarna nedan.
* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"
Terraform har framgÄngsrikt initierats!
Du kan nu börja arbeta med Terraform. Försök att köra "terraform plan" för att se
eventuella Àndringar som krÀvs för din infrastruktur. Alla Terraform-kommandon
borde nu fungera.
Om du nÄgonsin stÀller in eller Àndrar moduler eller backendkonfiguration för Terraform,
fÄr du köra det hÀr kommandot igen för att Äterinitiera din arbetskatalog. Om du glömmer det kommer andra
kommandon att upptÀcka det och pÄminna dig om att göra det om det behövs.terraform plan
Uppdaterar Terraform-status i minnet innan planen...
Den uppdaterade statusen kommer att anvÀndas för att berÀkna denna plan, men kommer inte att persistenteras till lokal eller fjÀrrlagring.
data.template_file.Default: Uppdaterar status...
data.template_file.network_config: Uppdaterar status...
------------------------------------------------------------------------
En exekveringsplan har genererats och visas nedan.
ResursÄtgÀrder indikeras med följande symboler:
+ skapa
Terraform kommer att utföra följande ÄtgÀrder:
# esxi_guest.Default kommer att skapas
+ resource "esxi_guest" "Default" {
+ boot_disk_size = (kÀnt efter tillÀmpning)
+ disk_store = "datastore1"
+ guest_name = "centos7-test"
+ guest_shutdown_timeout = (kÀnt efter tillÀmpning)
+ guest_startup_timeout = (kÀnt efter tillÀmpning)
+ guestinfo = {
+ "metadata" = "base64text"
+ "metadata.encoding" = "gzip+base64"
+ "userdata" = "base64text"
+ "userdata.encoding" = "gzip+base64"
}
+ guestos = (kÀnt efter tillÀmpning)
+ id = (kÀnt efter tillÀmpning)
+ ip_address = (kÀnt efter tillÀmpning)
+ memsize = "1024"
+ notes = (kÀnt efter tillÀmpning)
+ numvcpus = (kÀnt efter tillÀmpning)
+ ovf_properties_timer = (kÀnt efter tillÀmpning)
+ ovf_source = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
+ power = "on"
+ resource_pool_name = (kÀnt efter tillÀmpning)
+ virthwver = (kÀnt efter tillÀmpning)
+ nÀtverksgrÀnssnitt {
+ mac_address = (kÀnt efter tillÀmpning)
+ nic_type = (kÀnt efter tillÀmpning)
+ virtual_network = "VM Network"
}
}
Plan: 1 att lÀgga till, 0 att Àndra, 0 att förstöra.
------------------------------------------------------------------------
Observera: Du specificerade inte en "-out" parameter för att spara denna plan, sÄ Terraform
kan inte garantera att just dessa ÄtgÀrder kommer att utföras om
"terraform apply" körs i efterhand.
Slut:
terraform applyOm allt har gjorts rÀtt, sÄ kommer en ny virtuell maskin att rullas ut frÄn den tidigare skapade bilden om 2-3 minuter.
Möjligheterna att anvÀnda allt detta begrÀnsas endast av fantasin.
Jag ville bara dela med mig av mina insikter och visa de viktigaste punkterna vid arbete med dessa produkter.
Tack för din uppmÀrksamhet!
P.S.: Jag ser fram emot konstruktiv kritik.
KĂ€lla: habr.com
