Inplementatu bizkorra vm ESXi Terraform-ekin

Kaixo guztioi, Ivan dut izena eta sistema alkoholikoen administratzailea (OPS) naiz.

Kontatu nahiko nuke nola inplementatzen ditudan makina birtualak ESXi-n vCenter gabe Terraform erabiliz.

Askotan, makina birtualak zabaldu / birsortu behar dituzu aplikazio hau edo hura probatzeko. Nagikeria dela eta, prozesua automatizatzea pentsatu nuen. Nire bilaketak konpainiaren produktu zoragarri batera eraman ninduen hashicorp, terraform.

Uste dut jende askok badakiela zer den Terraform, eta nork ez daki, IasC kontzeptua erabiliz edozein hodei, azpiegitura edo zerbitzu kudeatzeko aplikazio bat da (Azpiegitura kode gisa).

ESXi erabiltzen dut birtualizazio ingurune gisa. Nahiko sinplea, erosoa eta fidagarria.
Galdera bat aurreikusten dut.

Zergatik terraform vCenter Server erabil dezakezun?

Ahal duzu noski, baina. Lehenik eta behin, lizentzia gehigarri bat da, bigarrenik, produktu honek baliabide asko erabiltzen ditu eta ez da nire etxeko zerbitzarian sartzen, eta hirugarrenik, gaitasunak berritzeko gaitasuna.

Intel NUC plataformak zerbitzari gisa funtzionatzen du:

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

Eta horrela, lehenik eta behin.

Oraingoz, konfigura dezagun esxi, hots, ireki VNC ataka suebakiaren ezarpenetan.

Lehenespenez, fitxategia idazteko babestuta dago. Manipulazio hauek egiten ditugu:

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

erantsi hurrengo blokea fitxategiaren amaieran:

<service id="1000">
  <id>packer-vnc</id>
  <rule id="0000">
    <direction>inbound</direction>
    <protocol>tcp</protocol>
    <porttype>dst</porttype>
    <port>
      <begin>5900</begin>
      <end>6000</end>
    </port>
  </rule>
  <enabled>true</enabled>
  <required>true</required>
</service>

Irten, gorde. Aldatu eskubideak eta berrabiarazi zerbitzua:

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

Benetakoa ostalaria berrabiarazi arte. Horren ostean, manipulazio hori errepikatu beharko da.

Gainera, lan guztiak zerbitzari berean makina birtualean egingo ditut.

Produktuaren zehaztapenak:

OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: disable
firewalld: disable

Hurrengoa, behar dugu packer, HashiCorp-en produktua ere.

Beharrezkoa da "urrezko" irudia automatikoki muntatzeko. etorkizunean erabiliko duguna.

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

Mugimenduan packer bertsioa errore bat gerta daiteke, RedHat-en oinarritutako pakete bat izan baitezake izen bereko.

which -a packer
/usr/sbin/packer

Konponbiderako, esteka sinbolikoa sor dezakezu edo bide absolutu bat erabil dezakezu /usr/bin/packer.

Orain ovftool behar dugu deskargatzeko esteka. Deskargatu, jarri zerbitzarian eta instalatu:

chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Extracting VMware Installer...done.
You must accept the VMware OVF Tool component for Linux End User
License Agreement to continue.  Press Enter to proceed.
VMWARE END USER LICENSE AGREEMENT
Do you agree? [yes/no]:yes
The product is ready to be installed.  Press Enter to begin
installation or Ctrl-C to cancel. 
Installing VMware OVF Tool component for Linux 4.4.0
    Configuring...
[######################################################################] 100%
Installation was successful.

Aurrera goaz.

Gith-en behar duzun guztia prestatu dut.

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

Karpetara iso sistema eragilearen banaketa kita jarri behar duzu. Nire kasuan, hau centos 7 da.

Fitxategia ere editatu behar duzu. centos-7-base.json:

variables: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свои Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
iso_urls: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ
iso_checksum: чСксумма вашСго ΠΎΠ±Ρ€Π°Π·Π° 

Aldaketa guztien ondoren, exekutatu muntaia:

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

Dena behar bezala konfiguratuta eta zehaztuta badago, sistema eragilearen instalazio automatikoaren argazkia ikusiko duzu. Prozesu honek 7-8 minutu behar ditu.

Karpeta ondo amaitu ondoren output-packer-centos7-x86_64 ova fitxategia kokatuko da.

Instalatu 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

Terraformek ESXi-rako hornitzailerik ez duenez, bat eraiki behar duzu.

Goazen jarri dugu:

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

Ondoren, hornitzailea biltzen dugu:

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

Helmugan gaude. Goazen gure irudia zabaltzen.

Goazen karpetara:

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

Lehenik eta behin, editatu fitxategia aldagaiak.tf. ESXi zerbitzarirako konexio bat zehaztu behar duzu.

Fitxategian network_config.cfg etorkizuneko makina birtualaren sare-ezarpenak eduki. Aldatu zure beharretara eta exekutatu one-liner:

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

Tira, fitxategian nagusia.tf aldatu ova fitxategirako bidea zurea, desberdina bada.

Egiaren unea.

terraform init
Initializing the backend...

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

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

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

data.template_file.Default: Refreshing state...
data.template_file.network_config: Refreshing state...

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

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # esxi_guest.Default will be created
  + resource "esxi_guest" "Default" {
      + boot_disk_size         = (known after apply)
      + disk_store             = "datastore1"
      + guest_name             = "centos7-test"
      + guest_shutdown_timeout = (known after apply)
      + guest_startup_timeout  = (known after apply)
      + guestinfo              = {
          + "metadata"          = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata"          = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + guestos                = (known after apply)
      + id                     = (known after apply)
      + ip_address             = (known after apply)
      + memsize                = "1024"
      + notes                  = (known after apply)
      + numvcpus               = (known after apply)
      + ovf_properties_timer   = (known after apply)
      + ovf_source             = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
      + power                  = "on"
      + resource_pool_name     = (known after apply)
      + virthwver              = (known after apply)

      + network_interfaces {
          + mac_address     = (known after apply)
          + nic_type        = (known after apply)
          + virtual_network = "VM Network"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

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

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Amaiera:

terraform apply

Dena behar bezala egiten bada, 2-3 minututan makina birtual berri bat zabalduko da aurretik egindako iruditik.

Honen guztiaren erabilerak zure irudimenak soilik mugatzen ditu.

Praktika onenak partekatu eta produktu hauekin lan egitean puntu nagusiak erakutsi nahi nituen.

Eskerrik asko arretagatik!

PS: Pozik egingo dut kritika eraikitzaileak.

Iturria: www.habr.com

Gehitu iruzkin berria