Hallo allemaal, mijn naam is Ivan en ik ben een system administrator (OPS) verslaafde.
Ik wil graag delen hoe ik virtuele machines op ESXi zonder vCenter opzet met Terraform.
Het komt nogal vaak voor dat ik virtuele machines moet opzetten/ opnieuw moet creëren om een bepaalde applicatie te testen. Vanwege luiheid dacht ik na over het automatiseren van dit proces. Mijn zoektocht leidde me naar een geweldig product van het bedrijf , .
Ik denk dat velen weten wat Terraform is, en voor degenen die het niet weten, dit is een applicatie voor het beheren van elke cloud, infrastructuur of dienst met behulp van het concept Infrastructure as Code (Infrastructuur als code).
Als virtualisatieomgeving gebruik ik ESXi. Heel eenvoudig, handig en betrouwbaar.
Ik voorspel de vraag.
Waarom Terraform als we vCenter Server kunnen gebruiken?
Dat kan zeker, maar. Ten eerste is dit een extra licentie, ten tweede is dit product heel resource-intensief en past het gewoon niet op mijn thuisserver, en ten derde de mogelijkheid om vaardigheden te verbeteren.
De server is een Intel NUC-platform:
CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
ESXi-versie: ESXi-6.5.0-4564106-standard (VMware, Inc.)En zo, alles op volgorde.
Laten we ESXi configureren, namelijk de VNC-poort openen in de firewallinstellingen.
Standaard is het bestand schrijfbeveiligd. We voeren de volgende handelingen uit:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlvoeg het volgende blok aan het einde van het bestand toe:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueWe verlaten, slaan op. Herstellen de rechten en herstarten de service:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshDit is van toepassing tot de host opnieuw wordt opgestart. Daarna moet deze handeling worden herhaald.
Verder zal ik al het werk in de virtuele machine op dezelfde server uitvoeren.
Specificaties:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: uitschakelen
firewalld: uitschakelenVervolgens hebben we nodig , ook een product van HashiCorp.
Het is nodig voor het automatisch bouwen van een 'gouden' afbeelding. Die we in de toekomst gaan gebruiken.
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 versie
Packer v1.5.5Op de stap packer versie Er kan een fout optreden, omdat er in RedHat-gebaseerde systemen een pakket met dezelfde naam kan zijn.
which -a packer
/usr/sbin/packerOm dit op te lossen, kun je een symlink maken of het absolute pad gebruiken. /usr/bin/packer.
Nu hebben we ovftool nodig. . Download, plaats het op de server en installeer het:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Extractie van VMware-installatieprogramma... gedaan.
Je moet de VMware OVF Tool component voor Linux EULA accepteren om door te gaan. Druk op Enter om verder te gaan.
VMWARE EINDGEBRUIKERSLICENTIEOVEREENKOMST
Ga je akkoord? [ja/nee]:ja
Het product is klaar om te worden geïnstalleerd. Druk op Enter om de installatie te starten of Ctrl-C om te annuleren.
Installatie van VMware OVF Tool component voor Linux 4.4.0
Configureren...
[######################################################################] 100%
Installatie was succesvol.Laten we verder gaan.
Op Git heb ik alles voorbereid.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiIn de map iso moet je de distributie van het besturingssysteem plaatsen. In mijn geval is dit CentOS 7.
Je moet ook het bestand bewerken centos-7-base.json:
variabelen: geef je connectiegegevens op
iso_urls: geef de actuele urls op
iso_checksum: checksum van je afbeelding Na alle wijzigingen starten we de build:
/usr/bin/packer build centos-7-base.jsonAls alles goed is ingesteld en correct is opgegeven, zie je het proces van automatische installatie van het besturingssysteem. Dit proces duurt bij mij 7-8 minuten.
Na een succesvolle voltooiing bevindt de OVA-bestand zich in de map output-packer-centos7-x86_64 .
Installeer 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.24Omdat er geen provider voor ESXi voor Terraform is, moeten we het zelf bouwen.
Installeer 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 versie go1.14.2 linux/amd64Vervolgens bouwen we de provider:
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/binWe zijn bijna aan de finish. Laten we onze afbeelding uitrollen.
Ga naar de map:
cd /root/create-and-deploy-esxi/centos7Als eerste bewerken we het bestand variables.tf. We moeten de verbinding met de ESXi-server opgeven.
In het bestand network_config.cfg zal de netwerkinstellingen van de toekomstige virtuele machine bevatten. Pas het aan naar jouw wensen en voer de oneliners uit:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonEn in het bestand main.tf verander je pad naar het OVA-bestand als het anders is.
Het moment van de waarheid.
terraform init
De backend wordt geïnitieerd...
De provider plugins worden geïnitieerd...
De volgende providers hebben geen versiebeperkingen in de configuratie,
waardoor de laatste versie is geïnstalleerd.
Om automatische upgrades naar nieuwe grote versies die mogelijk breaking
wijzigingen bevatten te voorkomen, wordt aangeraden om versie = "..." beperkingen toe te voegen aan de
overeenkomstige providerblokken in de configuratie, met de onderstaande gesuggereerde beperkingsteksten.
* provider.esxi: versie = "~> 1.6"
* provider.template: versie = "~> 2.1"
Terraform is succesvol geïnitieerd!
Je kunt nu beginnen met werken met Terraform. Probeer "terraform plan" uit te voeren om te zien
of er wijzigingen nodig zijn voor jouw infrastructuur. Alle Terraform-opdrachten
zouden nu moeten werken.
Als je ooit modules of backendconfiguraties voor Terraform instelt of wijzigt,
voer deze opdracht opnieuw uit om je werkdirectory te reinitialiseren. Mocht je het vergeten, dan
zullen andere opdrachten dit detecteren en je eraan herinneren om het indien nodig te doen.terraform plan
De Terraform-status in het geheugen wordt vernieuwd voor de planning...
De vernieuwde status wordt gebruikt om dit plan te berekenen, maar zal niet
worden opgeslagen in lokale of externe statusopslag.
data.template_file.Default: Status wordt vernieuwd...
data.template_file.network_config: Status wordt vernieuwd...
------------------------------------------------------------------------
Een uitvoeringsplan is gegenereerd en wordt hieronder weergegeven.
Resourceacties worden aangeduid met de volgende symbolen:
+ maken
Terraform zal de volgende acties uitvoeren:
# esxi_guest.Default zal worden gemaakt
+ resource "esxi_guest" "Default" {
+ boot_disk_size = (bekend na toepassen)
+ disk_store = "datastore1"
+ guest_name = "centos7-test"
+ guest_shutdown_timeout = (bekend na toepassen)
+ guest_startup_timeout = (bekend na toepassen)
+ guestinfo = {
+ "metadata" = "base64text"
+ "metadata.encoding" = "gzip+base64"
+ "userdata" = "base64text"
+ "userdata.encoding" = "gzip+base64"
}
+ guestos = (bekend na toepassen)
+ id = (bekend na toepassen)
+ ip_address = (bekend na toepassen)
+ memsize = "1024"
+ notes = (bekend na toepassen)
+ numvcpus = (bekend na toepassen)
+ ovf_properties_timer = (bekend na toepassen)
+ ovf_source = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
+ power = "aan"
+ resource_pool_name = (bekend na toepassen)
+ virthwver = (bekend na toepassen)
+ netwerkinterfaces {
+ mac_address = (bekend na toepassen)
+ nic_type = (bekend na toepassen)
+ virtual_network = "VM Network"
}
}
Plan: 1 toe te voegen, 0 te wijzigen, 0 te vernietigen.
------------------------------------------------------------------------
Opmerking: Je hebt geen "-out" parameter opgegeven om dit plan op te slaan,
waardoor Terraform niet kan garanderen dat deze acties precies worden uitgevoerd als
"terraform apply" vervolgens wordt uitgevoerd.
Einde:
terraform applyAls alles correct is gedaan, zal er binnen 2-3 minuten een nieuwe virtuele machine worden uitgerold uit het eerder gemaakte beeld.
De toepassingsmogelijkheden van dit alles zijn beperkt door enkel de verbeelding.
Ik wilde gewoon mijn bevindingen delen en de belangrijkste punten tonen bij het werken met deze producten.
Bedankt voor uw aandacht!
P.S.: Ik sta open voor constructieve kritiek.
Bron: habr.com
