Quick Deploy vm ESXi með Terraform

Halló allir, ég heiti Ivan og ég er alkóhólisti kerfisstjóri (OPS).

Mig langar til að segja þér hvernig ég set sýndarvélar á ESXi án vCenter með Terraform.

Oft þarftu að dreifa / endurskapa sýndarvélar til að prófa þetta eða hitt forritið. Vegna leti hugsaði ég um að gera ferlið sjálfvirkt. Leit mín leiddi mig að dásamlegri vöru fyrirtækisins hashicorp, terraform.

Ég held að margir viti hvað Terraform er, og hver veit ekki, þetta er forrit til að stjórna hvaða skýi, innviði eða þjónustu sem er með IasC hugmyndinni (Innviðir sem kóða).

Ég nota ESXi sem sýndarvæðingarumhverfi mitt. Alveg einfalt, þægilegt og áreiðanlegt.
Ég býst við spurningu.

Hvers vegna terraform þegar þú getur notað vCenter Server?

Þú getur auðvitað, en. Í fyrsta lagi er þetta viðbótarleyfi, í öðru lagi er þessi vara mjög auðlindafrek og passar einfaldlega ekki á heimaþjóninn minn og í þriðja lagi hæfileikinn til að uppfæra færni.

Intel NUC vettvangurinn virkar sem þjónn:

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 svo, fyrst og fremst.

Í bili skulum við setja upp esxi, nefnilega opna VNC tengið í eldveggstillingunum.

Sjálfgefið er að skráin er skrifvarin. Við framkvæmum eftirfarandi meðferð:

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

bættu eftirfarandi blokk við lok skráarinnar:

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

Hætta, vista. Breyttu réttunum aftur og endurræstu þjónustuna:

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

Raunverulegt þar til gestgjafinn er endurræstur. Eftir það verður að endurtaka þessa meðferð.

Ennfremur mun ég framkvæma alla vinnu í sýndarvél á sama netþjóni.

Vara upplýsingar:

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

Næst þurfum við pakki, einnig vara frá HashiCorp.

Það er nauðsynlegt til að setja saman "gylltu" myndina sjálfkrafa. sem við munum nota í framtíðinni.

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

Á ferðinni pakkara útgáfa villa getur komið upp þar sem RedHat-based gæti innihaldið pakka með sama nafni.

which -a packer
/usr/sbin/packer

Fyrir lausnina geturðu búið til tákntengil eða notað algera slóð /usr/bin/packer.

Nú þurfum við ovftool sækja hlekkur. Hladdu niður, settu á netþjóninn og settu upp:

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.

Við höldum áfram.

Á gith útbjó ég allt sem þú þarft.

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

Til möppu ISO þú þarft að setja dreifingarsett stýrikerfisins. Í mínu tilfelli er þetta centos 7.

Þú þarft líka að breyta skránni. centos-7-base.json:

variables: указать свои данные для подключения
iso_urls: указать актуальный
iso_checksum: чексумма вашего образа 

Eftir allar breytingar skaltu keyra samsetninguna:

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

Ef allt er stillt og tilgreint rétt, þá muntu sjá mynd af sjálfvirkri uppsetningu stýrikerfisins. Þetta ferli tekur mig 7-8 mínútur.

Eftir vel lokið í möppunni output-packer-centos7-x86_64 ova skrá verður staðsett.

Settu upp 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

Þar sem Terraform er ekki með þjónustuaðila fyrir ESXi þarftu að smíða einn.

Við settum af stað:

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

Næst söfnum við þjónustuveitunni:

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

Við erum komin í mark. Við skulum birta myndina okkar.

Förum í möppuna:

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

Fyrst af öllu, breyttu skránni breytur.tf. Þú þarft að tilgreina tengingu við ESXi netþjóninn.

Í skrá network_config.cfg innihalda netstillingar framtíðar sýndarvélarinnar. Við breytum til að passa þarfir okkar og keyrum einnar línu:

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

Jæja, í skránni aðal.tf breyttu slóðinni að ova skránni í þína eigin, ef hún er önnur.

Stund sannleikans.

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.

Klára:

terraform apply

Ef allt er gert á réttan hátt verður ný sýndarvél sett upp á 2-3 mínútum úr fyrri myndinni.

Notkunin á þessu öllu er aðeins takmörkuð af ímyndunarafli þínu.

Mig langaði bara að deila bestu starfsvenjunum og sýna helstu atriðin þegar unnið er með þessar vörur.

Takk fyrir athyglina!

PS: Ég mun vera ánægður með uppbyggilega gagnrýni.

Heimild: www.habr.com

Bæta við athugasemd