Deployim i shpejtë i vm ESXi me Terraform

Përshëndetje të gjithëve, unë quhem Ivan dhe jam një administrator sistemi (OPS) alkoolist.

Dëshiroj të flas se si vendos virtuale mbi ESXi pa vCenter duke përdorur Terraform.

Shpesh herë më duhet të vendos/rikrijoj virtuale për të testuar një aplikacion të caktuar. Për shkak të lenes, mendova për automatizimin e procesit. Kërkimet e mia më çuan në një produkt të shkëlqyer nga kompania hashicorp, terraform.

Mendoj se shumë e dinë se çfarë është Terraform, ndërsa ata që nuk e dinë, është një aplikacion për menaxhimin e çdo re, infrastrukture ose shërbimi duke përdorur konceptin IaC (Infrastruktura si kod).

Si një ambient virtualizimi përdor ESXi. Mjaft e thjeshtë, e përshtatshme dhe e besueshme.
Parashikoj një pyetje.

Pse terraform nëse mund të përdorim vCenter Server?

Sigurisht, por. Së pari, kjo është një licencë shtesë, së dyti, ky produkt është shumë i kërkueshëm dhe thjesht nuk do të përputhet në serverin tim të shtëpisë, dhe së treti, mundësia për të përmirësuar aftësitë.

Si server shërben platforma Intel NUC:

CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
Versioni ESXi: ESXi-6.5.0-4564106-standard (VMware, Inc.)

Dhe kështu, për çdo gjë sipas rendit.

Së pari, le të konfigurojmë ESXi, duke hapur portin VNC në parametrat e firewall-it.

Në mënyrë default, skedari është i mbrojtur nga shkruaja. Kryejmë këto veprime:

chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xml

Shtojmë në fund të skedarit këtë bllok:

packer-vnc
  
    inbound
    tcp
    dst
    
      5900
      6000
    
  
  true
  true

Dalim, ruajmë. Ndryshojmë të drejtat mbrapsht dhe ribashkojmë shërbimin:

chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refresh

Kjo është e vlefshme deri në rindizjen e host-it. Pas kësaj, kërkohet të bëjmë përsëri këtë veprim.

Më pas, do të kryej gjithë punën në makinë virtuale në këtë server.

Karakteristikat:

OS: CentOS 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: çaktivizuar
firewalld: çaktivizuar

Më pas na nevojitet packer, gjithashtu një produkt i kompanisë HashiCorp.

Ne e duam, për ndërtimin automatik të 'imazhit të artë'. Që do ta përdorim në të ardhmen.

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.5

Në hap versioni i packer mund të ndodhi një gabim, pasi mund të ketë një paketë me të njëjtin emër në RedHat-based.

which -a packer
/usr/sbin/packer

Për zgjidhje, mund të krijoni një simlink ose të përdorni rrugën absolute. /usr/bin/packer.

Tani na nevojitet ovftool linku për shkarkim. E shkarkojmë, e vendosim në server dhe e instalojmë:

chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Ekstraktimi i Installer-it VMware... përfunduar.
Ju duhet të pranoni Marrëveshjen e Licencës për Përdoruesin Fundor të VMware OVF Tool për Linux për të vazhduar. Shtypni Enter për të vazhduar.
MARRËVESHJA E LICENCËS PËR PËRDORUESIN FUNDOR VMWARE
A e pranoni? [po/jo]: po
Produkti është gati për t'u instaluar. Shtypni Enter për të nisur instalimin ose Ctrl-C për të anuluar.
Instalimi i komponentës VMware OVF Tool për Linux 4.4.0
    Po konfigurohet...
[######################################################################] 100%
Instalimi ishte i suksesshëm.

Të ecim përpara.

Në git kam përgatitur gjithçka të nevojshme.

git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxi

Në dosjen iso duhet vendosur distribucioni i sistemit operativ. Në rastin tim, kjo është centos 7.

Po ashtu, është e nevojshme të redaktoni skedarin centos-7-base.json:

variables: tregoni të dhënat tuaja për lidhje
iso_urls: tregoni aktualin
iso_checksum: çeksuma e imazhit tuaj 

Pas të gjitha ndryshimeve, nisni ndërtimin:

/usr/bin/packer build centos-7-base.json

Nëse gjithçka është konfiguruar dhe specifikuar saktë, do të shihni procesin e instalimit automatik të sistemit operative. Ky proces më merr 7-8 minuta.

Pas përfundimit të suksesshëm, do të gjeni në dosjen output-packer-centos7-x86_64 një skedar ova.

Instalojmë 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.24

Duke qenë se Terraform nuk ka një ofrues për ESXi, duhet ta ndërtojmë atë.

Instalojmë 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/amd64

Pastaj ndërtojmë ofruesin:

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/bin

Jemi në finish. Le të shpërndajmë imazhin tonë.

Të kalojmë në dosjen:

cd /root/create-and-deploy-esxi/centos7

E para, redaktojmë skedarin variables.tf. Duhet të specifikojmë lidhjen me serverin ESXi.

Në skedar network_config.cfg përcaktohen cilësimet rrjetore të makinerisë virtuale të ardhshme. Ndryshoni sipas nevojave tuaja dhe nisni komandën:

sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.json

Po ashtu në skedarin main.tf ndryshoni rrugën e skedarit ova në të tuajin, nëse është e ndryshme.

Momenti i vërtetë.

terraform init
Po inicializohet backend-i...

Po inicializohen shtesat e ofruesve...

Ofruesit e mëposhtëm nuk kanë asnjë kufizim versioni në konfigurim,
dhe prandaj u instalua versioni më i fundit.

Për të parandaluar përditësimet automatike në versione të reja kryesore që mund të përmbajnë
ndryshime që dëmtojnë, rekomandohet të shtoni kufizimin version = "..." në blloqet përkatëse të ofruesve
në konfigurim, me stringjet e kufizimit të sugjeruara më poshtë.

* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"

Terraform është inicializuar me sukses!

Tani mund të filloni të punoni me Terraform. Provoni të ekzekutoni "terraform plan" për të parë
ndonjë ndryshim që është i nevojshëm për infrastrukturën tuaj. Të gjitha komandat Terraform
duhet tani të funksionojnë.

Nëse ndoni ndonjëherë konfiguroni ose ndryshoni modulet ose konfigurimin e backend-it për Terraform,
rifilloni këtë komandë për të rindezur direktorinë tuaj të punës. Nëse e harroni, komandat e tjera
do të e identifikojnë atë dhe do t'ju kujtojnë ta bëni atë nëse është e nevojshme.

terraform plan
Përditësimi i gjendjes së Terraform në memorje para planifikimit...
Gjendja e përditësuar do të përdoret për të llogaritur këtë plan, por nuk do të
ruhet në ruajtjen lokale ose të largët.

data.template_file.Default: Po përditësohet gjendja...
data.template_file.network_config: Po përditësohet gjendja...

------------------------------------------------------------------------

Një plan ekzekutimi është krijuar dhe tregohet më poshtë.
Veprimet ndaj burimeve shënohen me simbolet e mëposhtme:
  + krijo

Terraform do të kryejë veprimet e mëposhtme:

  # esxi_guest.Default do të krijohet
  + burimi "esxi_guest" "Default" {
      + boot_disk_size         = (e njohur pas aplikimit)
      + disk_store             = "datastore1"
      + guest_name             = "centos7-test"
      + guest_shutdown_timeout = (e njohur pas aplikimit)
      + guest_startup_timeout  = (e njohur pas aplikimit)
      + guestinfo              = {
          + "metadata"          = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata"          = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + guestos                = (e njohur pas aplikimit)
      + id                     = (e njohur pas aplikimit)
      + ip_address             = (e njohur pas aplikimit)
      + memsize                = "1024"
      + notes                  = (e njohur pas aplikimit)
      + numvcpus               = (e njohur pas aplikimit)
      + ovf_properties_timer   = (e njohur pas aplikimit)
      + ovf_source             = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
      + power                  = "on"
      + resource_pool_name     = (e njohur pas aplikimit)
      + virthwver              = (e njohur pas aplikimit)

      + network_interfaces {
          + mac_address     = (e njohur pas aplikimit)
          + nic_type        = (e njohur pas aplikimit)
          + virtual_network = "VM Network"
        }
    }

Plani: 1 për të shtuar, 0 për të ndryshuar, 0 për të shkatërruar.

------------------------------------------------------------------------

Shënim: Nuk keni specifikuar një parametrin "-out" për të ruajtur këtë plan, kështu që Terraform
nuk mund të garantojë që saktësisht këto veprime do të kryhen nëse
"terraform apply" zbatohet më pas.

Mbarimi:

terraform apply

Nëse gjithçka është bërë saktë, pas 2-3 minutash do të krijohet një makinë virtuale e re nga imazhi i mëparshëm.

Mundësitë e përdorimit të gjithasaj, kufizohen vetëm nga fantazia.

Unë thjesht doja të ndaja përvojat e mia dhe të tregoja momentet kryesore gjatë punës me këto produkte.

Faleminderit për vëmendjen!

P.S.: do të isha i lumtur për kritika konstruktive.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster