Ota vm ESXi nopeasti käyttöön Terraformin kanssa

Hei kaikki, nimeni on Ivan ja olen alkoholisti järjestelmänvalvoja (OPS).

Haluaisin kertoa sinulle, kuinka otan virtuaalikoneita käyttöön ESXi:ssä ilman vCenteriä Terraformin avulla.

Melko usein sinun on otettava käyttöön / luotava uudelleen virtuaalikoneita tämän tai toisen sovelluksen testaamiseksi. Laiskuuden vuoksi ajattelin prosessin automatisoimista. Hakuni johti minut yrityksen upeaan tuotteeseen hashicorp, terraformi.

Luulen, että monet ihmiset tietävät mitä Terraform on, ja kuka ei tiedä, tämä on sovellus minkä tahansa pilven, infrastruktuurin tai palvelun hallintaan IasC-konseptilla (Infrastruktuuri koodina).

Käytän ESXi virtualisointiympäristönä. Melko yksinkertainen, kätevä ja luotettava.
Odotan kysymystä.

Miksi terraformoida, kun voit käyttää vCenter Serveriä?

Voit tietysti, mutta. Ensinnäkin tämä on lisälisenssi, toiseksi tämä tuote on erittäin resurssiintensiivinen eikä yksinkertaisesti sovi kotipalvelimelleni, ja kolmanneksi kyky päivittää taitoja.

Intel NUC -alusta toimii palvelimena:

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

Ja niin, ensimmäiset asiat ensin.

Toistaiseksi asetetaan esxi, eli avataan VNC-portti palomuurin asetuksista.

Oletusarvoisesti tiedosto on kirjoitussuojattu. Suoritamme seuraavat manipulaatiot:

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

Liitä seuraava lohko tiedoston loppuun:

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

Poistu, tallenna. Vaihda oikeudet takaisin ja käynnistä palvelu uudelleen:

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

Todellinen, kunnes isäntä käynnistetään uudelleen. Sen jälkeen tämä manipulointi on toistettava.

Lisäksi teen kaikki työt virtuaalikoneessa samalla palvelimella.

Tuotetiedot:

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

Seuraavaksi tarvitsemme pakkaaja, myös HashiCorpin tuote.

Sitä tarvitaan "kultaisen" kuvan automaattiseen kokoamiseen. joita tulemme käyttämään jatkossa.

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

Liikkeellä pakkaaja versio voi tapahtua virhe, koska RedHat-pohjainen voi sisältää samannimisen paketin.

which -a packer
/usr/sbin/packer

Ratkaisua varten voit luoda symlinkin tai käyttää absoluuttista polkua /usr/bin/packer.

Nyt tarvitsemme ovftoolin latauslinkki. Lataa, laita palvelimelle ja asenna:

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.

Siirrymme eteenpäin.

Githissä valmistin kaiken mitä tarvitset.

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

Kansioon iso sinun on asennettava käyttöjärjestelmän jakelupaketti. Minun tapauksessani tämä on centos 7.

Sinun on myös muokattava tiedostoa. centos-7-base.json:

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

Suorita kokoonpano kaikkien muutosten jälkeen:

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

Jos kaikki on määritetty ja määritetty oikein, näet kuvan käyttöjärjestelmän automaattisesta asennuksesta. Tämä prosessi kestää minulta 7-8 minuuttia.

Onnistuneen suorittamisen jälkeen kansioon output-packer-centos7-x86_64 ova-tiedosto löytyy.

Asenna 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

Koska Terraformilla ei ole ESXi-toimittajaa, sinun on rakennettava sellainen.

Laitamme liikkeelle:

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

Seuraavaksi keräämme palveluntarjoajan:

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

Olemme maaliviivalla. Lähdetään levittämään kuvaamme.

Mennään kansioon:

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

Ensinnäkin muokkaa tiedostoa muuttujat. tf. Sinun on määritettävä yhteys ESXi-palvelimeen.

Tiedostossa network_config.cfg sisältää tulevan virtuaalikoneen verkkoasetukset. Muuta tarpeitasi ja suorita yksilinjainen:

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

No, tiedostossa main.tf muuta ova-tiedoston polku omaksi, jos se on eri.

Totuuden hetki.

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.

Suorittaa loppuun:

terraform apply

Jos kaikki on tehty oikein, 2-3 minuutin kuluttua otetaan käyttöön uusi virtuaalikone aiemmin tehdystä kuvasta.

Tämän kaiken käyttötapoja rajoittaa vain mielikuvituksesi.

Halusin vain jakaa parhaat käytännöt ja näyttää tärkeimmät kohdat näiden tuotteiden kanssa työskennellessäni.

Kiitos huomiosta!

PS: Otan mielelläni rakentavaa kritiikkiä vastaan.

Lähde: will.com

Lisää kommentti