Rask distribusjon vm ESXi med Terraform

Hei alle sammen, mitt navn er Ivan og jeg er en alkoholholdig systemadministrator (OPS).

Jeg vil gjerne fortelle deg hvordan jeg distribuerer virtuelle maskiner på ESXi uten vCenter ved å bruke Terraform.

Ganske ofte må du distribuere / gjenskape virtuelle maskiner for å teste denne eller den applikasjonen. På grunn av latskap tenkte jeg på å automatisere prosessen. Søket mitt førte meg til et fantastisk produkt fra selskapet hashicorp, terra.

Jeg tror mange vet hva Terraform er, og hvem vet ikke, dette er en applikasjon for å administrere hvilken som helst sky, infrastruktur eller tjeneste ved å bruke IasC-konseptet (Infrastruktur som kode).

Jeg bruker ESXi som mitt virtualiseringsmiljø. Ganske enkelt, praktisk og pålitelig.
Jeg forventer et spørsmål.

Hvorfor terraform når du kan bruke vCenter Server?

Du kan selvfølgelig, men. For det første er dette en tilleggslisens, for det andre er dette produktet veldig ressurskrevende og passer rett og slett ikke på hjemmeserveren min, og for det tredje muligheten til å oppgradere ferdigheter.

Intel NUC-plattformen fungerer som en server:

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 så, første ting først.

For nå, la oss sette opp esxi, nemlig åpne VNC-porten i brannmurinnstillingene.

Som standard er filen skrivebeskyttet. Vi utfører følgende manipulasjoner:

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

legg til følgende blokk på slutten av filen:

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

Avslutt, lagre. Endre rettighetene tilbake og start tjenesten på nytt:

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

Faktisk til verten startes på nytt. Etter det må denne manipulasjonen gjentas.

Videre vil jeg utføre alt arbeidet i en virtuell maskin på samme server.

Spesifikasjoner:

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

Deretter trenger vi pakningen, også et produkt fra HashiCorp.

Det er nødvendig for å automatisk sette sammen det "gyldne" bildet. som vi vil bruke i fremtiden.

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

På farten pakkerversjon en feil kan oppstå, siden RedHat-basert kan inneholde en pakke med samme navn.

which -a packer
/usr/sbin/packer

For løsningen kan du lage en symbolkobling, eller bruke en absolutt bane /usr/bin/packer.

Nå trenger vi ovftool nedlastingslink. Last ned, sett på serveren og installer:

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 går videre.

På gith forberedte jeg alt du trenger.

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

Til mappe iso du må sette distribusjonssettet til operativsystemet. I mitt tilfelle er dette centos 7.

Du må også redigere filen. centos-7-base.json:

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

Etter alle endringene, kjør sammenstillingen:

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

Hvis alt er konfigurert og spesifisert riktig, vil du se et bilde av den automatiske installasjonen av operativsystemet. Denne prosessen tar meg 7-8 minutter.

Etter vellykket gjennomføring i mappen output-packer-centos7-x86_64 ova-filen vil bli lokalisert.

Installer 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

Siden Terraform ikke har en leverandør for ESXi, må du bygge en.

Vi setter i gang:

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

Deretter samler vi inn leverandøren:

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 er i mål. La oss rulle ut bildet vårt.

La oss gå til mappen:

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

Først av alt, rediger filen variabler.tf. Du må spesifisere en tilkobling til ESXi-serveren.

I fil network_config.cfg inneholder nettverksinnstillingene til den fremtidige virtuelle maskinen. Endre til dine behov og kjør one-liner:

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

Vel, i filen main.tf endre banen til ova-filen til din egen, hvis den er annerledes.

Sannhetens øyeblikk.

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.

Bli ferdig:

terraform apply

Hvis alt er gjort riktig, vil en ny virtuell maskin bli distribuert fra det tidligere laget i løpet av 2-3 minutter.

Bruken av alt dette er bare begrenset av fantasien din.

Jeg ville bare dele de beste fremgangsmåtene og vise hovedpoengene når jeg jobber med disse produktene.

Takk for oppmerksomheten!

PS: Jeg tar gjerne imot konstruktiv kritikk.

Kilde: www.habr.com

Legg til en kommentar