Ahoj všichni, jmenuji se Ivan a jsem alkoholik systémový administrátor (OPS).
Rád bych vám řekl, jak nasazuji virtuální stroje na ESXi bez vCenter pomocí Terraform.
Docela často musím nasazovat/přetvářet virtuální stroje, abych otestoval různé aplikace. Z lenosti jsem přemýšlel o automatizaci tohoto procesu. Moje hledání mě dovedlo k úžasnému produktu společnosti , .
Myslím, že mnozí vědí, co je Terraform, a pro ty, kdo neví, je to aplikace pro správu jakéhokoliv cloudu, infrastruktury nebo služby pomocí konceptu IasC (Infrastruktura jako kód).
Jako prostředí virtualizace používám ESXi. Docela jednoduché, pohodlné a spolehlivé.
Předvídám otázku.
Proč terraform, když mohu použít vCenter Server?
Jasně, ale. Za prvé, je to další licence, za druhé, tento produkt je velmi náročný na zdroje a jednoduše se nevejde na můj domácí server, a za třetí příležitost zlepšit dovednosti.
Jako server slouží platforma Intel NUC:
CPU: 2 CPU x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
Verze ESXi: ESXi-6.5.0-4564106-standard (VMware, Inc.)A teď, o všem postupně.
Než začneme, nastavíme esxi, konkrétně otevřeme VNC port v nastavení firewallu.
Ve výchozím nastavení je soubor chráněn proti zápisu. Provádíme následující manipulace:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlNa konec souboru přidáme následující blok:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueVycházíme, ukládáme. Opět měníme práva a restartujeme službu:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshTo platí do restartu hostitele. Po něm tuto manipulaci bude třeba zopakovat.
Dál veškerou práci budu provádět na virtuálním stroji na tomto serveru.
Specifikace:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: zakázáno
firewalld: zakázánoNyní budeme potřebovat , také produkt společnosti HashiCorp.
Je potřeba pro automatickou stavbu „zlatého“ obrazu. Který budeme používat v budoucnu.
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.5V kroku packer version může se objevit chyba, protože v RedHat-based může být balíček se stejným názvem.
which -a packer
/usr/sbin/packerPro řešení můžete vytvořit symlink nebo použít absolutní cestu /usr/bin/packer.
Nyní potřebujeme ovftool . Stahujeme, umístíme na server a nainstalujeme:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Rozbalování VMware Installer...hotovo.
Musíte přijmout smlouvu o licencování koncového uživatele pro VMware OVF Tool pro Linux, abyste mohli pokračovat. Stiskněte Enter pro pokračování.
VMWARE SMLOUVA O LICENCOVÁNÍ KONCOVÉHO UŽIVATELE
Souhlasíte? [yes/no]:yes
Produkt je připraven k instalaci. Stiskněte Enter pro zahájení
instalace nebo Ctrl-C pro zrušení.
Instalace komponenty VMware OVF Tool pro Linux 4.4.0
Konfigurace...
[######################################################################] 100%
Instalace byla úspěšná.Pokračujeme dál.
Na Gitu jsem připravil všechno potřebné.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiDo složky iso je třeba umístit distribuci operačního systému. V mém případě to je centos 7.
Také je nutné upravit soubor centos-7-base.json:
variables: uvést své údaje pro připojení
iso_urls: uvést aktuální
iso_checksum: kontrolní součet vašeho obrazu Po všech změnách spustíme sestavení:
/usr/bin/packer build centos-7-base.jsonPokud je vše správně nastaveno a uvedeno, pak uvidíte obraz automatické instalace operačního systému. Tento proces mi zabere 7-8 minut.
Po úspěšném dokončení v adresáři output-packer-centos7-x86_64 se nachází soubor ova.
Nainstalujeme 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.24Protože Terraform nemá poskytovatele pro ESXi, musíme ho sestavit.
Nainstalujeme 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ále sestavujeme poskytovatele:
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/binJsme na cílové čáře. Jdeme na nasazení našeho obrazu.
Přejdeme do složky:
cd /root/create-and-deploy-esxi/centos7Nejprve upravíme soubor variables.tf. Je třeba uvést připojení k serveru ESXi.
V souboru network_config.cfg bude obsahovat síťová nastavení budoucí virtuální stroje. Změňte podle svých potřeb a spusťte příkaz:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonA v souboru main.tf změňte cestu k souboru ova na svou, pokud je jiná.
Okamžik pravdy.
terraform init
Inicializace backendu...
Inicializace pluginů poskytovatelů...
Následující poskytovatelé nemají žádné verze v konfiguraci,
a proto byla nainstalována nejnovější verze.
Abychom zabránili automatickým aktualizacím na nové hlavní verze, které mohou obsahovat
zlomové změny, doporučuje se přidat do bloků odpovídajících poskytovatelů
v konfiguraci omezení verze = "...", přičemž níže jsou navrženy omezení.
* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"
Terraform byl úspěšně inicializován!
Můžete nyní začít pracovat s Terraform. Zkuste spustit "terraform plan"
ke zobrazení jakýchkoli změn, které jsou potřeba pro vaši infrastrukturu. Všechny příkazy Terraform
by měly nyní fungovat.
Pokud někdy nastavíte nebo změníte moduly nebo konfiguraci backendu pro Terraform,
spusťte znovu tento příkaz k znovu inicializaci vašeho pracovního adresáře.
Pokud zapomenete, ostatní příkazy to zjistí a připomenou vám to, pokud to bude nutné.terraform plan
Obnovování stavu Terraformu v paměti před plánem...
Obnovovaný stav bude použit k výpočtu tohoto plánu, ale nebude
uložen do místního nebo vzdáleného úložiště stavu.
data.template_file.Default: Obnovování stavu...
data.template_file.network_config: Obnovování stavu...
------------------------------------------------------------------------
Byl vygenerován plán provedení a je zobrazen níže.
Akce zdrojů jsou označeny následujícími symboly:
+ vytvořit
Terraform provede následující akce:
# esxi_guest.Default bude vytvořen
+ resource "esxi_guest" "Default" {
+ boot_disk_size = (známé po použití)
+ disk_store = "datastore1"
+ guest_name = "centos7-test"
+ guest_shutdown_timeout = (známé po použití)
+ guest_startup_timeout = (známé po použití)
+ guestinfo = {
+ "metadata" = "base64text"
+ "metadata.encoding" = "gzip+base64"
+ "userdata" = "base64text"
+ "userdata.encoding" = "gzip+base64"
}
+ guestos = (známé po použití)
+ id = (známé po použití)
+ ip_address = (známé po použití)
+ memsize = "1024"
+ notes = (známé po použití)
+ numvcpus = (známé po použití)
+ ovf_properties_timer = (známé po použití)
+ ovf_source = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
+ power = "on"
+ resource_pool_name = (známé po použití)
+ virthwver = (známé po použití)
+ network_interfaces {
+ mac_address = (známé po použití)
+ nic_type = (známé po použití)
+ virtual_network = "VM Network"
}
}
Plán: 1 k přidání, 0 ke změně, 0 k zničení.
------------------------------------------------------------------------
Poznámka: Neurčili jste "-out" parametr pro uložení tohoto plánu, tak Terraform
nemůže zaručit, že budou tyto akce provedeny, pokud bude následně spuštěn "terraform apply".
Konec:
terraform applyPokud je vše provedeno správně, nový virtuální stroj bude nasazen z předchozího obrazu za 2-3 minuty.
Možnosti využití toho všeho jsou omezeny pouze fantazií.
Chtěl jsem se jen podělit o své poznatky a ukázat hlavní body při práci s těmito produkty.
Děkuji za pozornost!
P.S.: Bude mi potěšením slyšet konstruktivní kritiku.
Zdroj: habr.com
