Hej alle, mit navn er Ivan, og jeg er en systemadministrator (OPS) alkoholiker.
Jeg vil gerne tale om, hvordan jeg deployer virtuelle maskiner på ESXi uden vCenter ved hjælp af Terraform.
Ofte skal jeg deploye/genskabe virtuelle maskiner for at teste en given applikation. Af faulhed overvejede jeg at automatisere processen. Mine søgninger førte mig til et fantastisk produkt fra virksomheden , .
Jeg tror mange ved, hvad Terraform er, men for dem, der ikke ved det, er det et program til at administrere enhver cloud, infrastruktur eller service ved hjælp af IasC-konceptet (Infrastruktur som kode).
Som virtualiseringsmiljø bruger jeg ESXi. Ret enkelt, praktisk og pålideligt.
Jeg forudser spørgsmålet.
Hvorfor Terraform, hvis man kan bruge vCenter Server?
Det kan man selvfølgelig, men. For det første, det er en ekstra licens, for det andet, dette produkt er meget ressourcekrævende og vil simpelthen ikke kunne være på min hjemme-server, og for det tredje muligheden for at forbedre mine færdigheder.
Serveren er Intel NUC platformen:
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.)Og så, lad os tage det hele i rækkefølge.
Lad os først konfigurere ESXi, specifikt åbne VNC-porten i firewallindstillingerne.
Som standard er filen skrivebeskyttet. Vi laver følgende manipulationer:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlvi tilføjer følgende blok til slutningen af filen:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueVi afslutter, gemmer. Ændrer rettighederne tilbage, og genstarter tjenesten:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshGælder indtil hosten genstartes. Efter det skal denne manipulation gentages.
Fremover vil jeg udføre alt arbejde i en virtuel maskine på denne samme server.
Specifikationer:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: disable
firewalld: disableDerefter har vi brug for , også et produkt fra HashiCorp.
Det er nødvendigt til automatisk opbygning af et "guld" billede. Som vi vil bruge i fremtiden.
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å trinnet packer version Der kan opstå en fejl, da der i RedHat-baserede systemer muligvis findes en pakke med det samme navn.
which -a packer
/usr/sbin/packerFor at løse dette kan man oprette et symlink eller bruge en absolut sti. /usr/bin/packer.
Nu har vi brug for ovftool. . Downloader, lægger det på serveren og installerer:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Uddrager VMware Installer...færdig.
Du skal acceptere VMware OVF Tool komponentens for Android-bruger
Licensaftale for at fortsætte. Tryk Enter for at fortsætte.
VMWARE BRUGER LICENSE AFTALE
Accepterer du? [yes/no]:yes
Produktet er klar til installation. Tryk Enter for at begynde
installationen eller Ctrl-C for at annullere.
Installerer VMware OVF Tool komponent til Linux 4.4.0
Konfigurerer...
[######################################################################] 100%
Installationen var succesfuld.Lad os gå videre.
På Git har jeg forberedt alt det nødvendige.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiI mappen iso man skal placere distributionsfilen til operativsystemet. I mit tilfælde er det centos 7.
Det er også nødvendigt at redigere filen centos-7-base.json:
variables: angiv dine data til forbindelse
iso_urls: angiv aktuel
iso_checksum: checksum for dit billede Efter alle ændringerne starter vi bygningen:
/usr/bin/packer build centos-7-base.jsonHvis alt er konfigureret korrekt, vil du se billedet af den automatiske installation af operativsystemet. Denne proces tager mig 7-8 minutter.
Efter vellykket afslutning vil der være en mappe output-packer-centos7-x86_64 hvor ova-filen vil befinde sig.
Vi installerer 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
terraform version
Terraform v0.12.24Da Terraform ikke har en udbyder til ESXi, skal den samles.
Installerer 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/amd64Herefter samler vi udbyderen:
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 er ved at være færdige. Lad os begynde at distribuere vores billede.
Lad os gå til mappen:
cd /root/create-and-deploy-esxi/centos7Først redigerer vi filen variables.tf. Vi skal angive forbindelsen til ESXi-serveren.
I filen network_config.cfg vil indeholde netværksindstillingerne for den kommende virtuelle maskine. Ændre dem efter behov og køre en enkelt linje:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonOg i filen main.tf ændrer vi stien til ova-filen til vores, hvis den er anderledes.
Det er det afgørende øjeblik.
terraform init
Initialiserer backend...
Initialiserer udbyderplugins...
De følgende udbydere har ikke nogen versionsbegrænsninger i konfigurationen,
så den nyeste version blev installeret.
For at forhindre automatiske opgraderinger til nye hovedversioner, der kan indeholde breaking
ændringer, anbefales det at tilføje version = "..." begrænsninger til de
tilsvarende udbyderblokke i konfigurationen, med de foreslåede begrænsningsstrenge nedenfor.
* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"
Terraform er blevet succesfuldt initialiseret!
Du kan nu begynde at arbejde med Terraform. Prøv at køre "terraform plan" for at se
eventuelle ændringer, der er nødvendige for din infrastruktur. Alle Terraform-kommandoer
bør nu fungere.
Hvis du nogensinde sætter eller ændrer moduler eller backend-konfiguration for Terraform,
skal du køre denne kommando igen for at geninitialisere din arbejdsmappe. Hvis du glemmer det, vil andere
kommandoer opdage det og minde dig om at gøre det, hvis det er nødvendigt.terraform plan
Opdaterer Terraform-tilstand i hukommelsen inden plan...
Den opdaterede tilstand vil blive brugt til at beregne denne plan, men vil ikke blive
beholdt i lokal eller fjern tilstandslager.
data.template_file.Default: Opdaterer tilstand...
data.template_file.network_config: Opdaterer tilstand...
------------------------------------------------------------------------
En udførelsesplan er blevet genereret og vises nedenfor.
Ressourcehandlinger er angivet med følgende symboler:
+ opret
Terraform vil udføre de følgende handlinger:
# esxi_guest.Default vil blive oprettet
+ resource "esxi_guest" "Default" {
+ boot_disk_size = (kendt efter anvendelse)
+ disk_store = "datastore1"
+ guest_name = "centos7-test"
+ guest_shutdown_timeout = (kendt efter anvendelse)
+ guest_startup_timeout = (kendt efter anvendelse)
+ guestinfo = {
+ "metadata" = "base64text"
+ "metadata.encoding" = "gzip+base64"
+ "userdata" = "base64text"
+ "userdata.encoding" = "gzip+base64"
}
+ guestos = (kendt efter anvendelse)
+ id = (kendt efter anvendelse)
+ ip_address = (kendt efter anvendelse)
+ memsize = "1024"
+ notes = (kendt efter anvendelse)
+ numvcpus = (kendt efter anvendelse)
+ ovf_properties_timer = (kendt efter anvendelse)
+ ovf_source = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
+ power = "on"
+ resource_pool_name = (kendt efter anvendelse)
+ virthwver = (kendt efter anvendelse)
+ network_interfaces {
+ mac_address = (kendt efter anvendelse)
+ nic_type = (kendt efter anvendelse)
+ virtual_network = "VM Network"
}
}
Plan: 1 tilføjelse, 0 ændringer, 0 ødelæggelser.
------------------------------------------------------------------------
Bemærk: Du specificerede ikke en "-out" parameter til at gemme denne plan, så Terraform
kan ikke garantere, at præcis disse handlinger vil blive udført, hvis
"terraform apply" senere køres.
Afslutning:
terraform applyHvis alt er gjort korrekt, vil en ny virtuel maskine blive udrullet fra det tidligere gjorte image om 2-3 minutter.
Mulighederne for at bruge alt dette er kun begrænset af fantasien.
Jeg ville bare dele mine erfaringer og vise de væsentlige punkter ved arbejde med disse produkter.
Tak for opmærksomheden!
P.S.: Jeg vil være glad for konstruktiv kritik.
Kilde: habr.com
