Quick Deploy vm ESXi бо Terraform

Салом ба ҳама, номи ман Иван ва ман маъмури системаи спиртӣ (OPS) ҳастам.

Ман мехоҳам ба шумо бигӯям, ки чӣ гуна ман мошинҳои виртуалиро дар ESXi бидуни vCenter бо истифода аз Terraform ҷойгир мекунам.

Бисёр вақт, шумо бояд мошинҳои виртуалиро ҷойгир кунед / дубора эҷод кунед, то ин ё он барномаро санҷед. Аз сабаби танбалӣ дар бораи автоматикунонии раванд фикр мекардам. Ҷустуҷӯи ман маро ба маҳсулоти аҷиби ширкат овард hashicorp, terraform.

Ман фикр мекунам, ки бисёриҳо медонанд, ки Terraform чист ва кӣ намедонад, ин барнома барои идоракунии ҳама гуна абр, инфрасохтор ё хидмат бо истифода аз консепсияи IasC аст (Инфрасохтор ҳамчун код).

Ман ESXi-ро ҳамчун муҳити виртуализатсияи худ истифода мекунам. Хеле содда, қулай ва боэътимод.
Ман саволеро интизорам.

Чаро terraform вақте ки шумо метавонед сервери vCenter-ро истифода баред?

Шумо албатта метавонед, аммо. Якум, ин литсензияи иловагӣ аст, дуюм, ин маҳсулот хеле захираҳо аст ва танҳо ба сервери хонагии ман мувофиқат намекунад ва сеюм, қобилияти такмил додани малакаҳо.

Платформаи Intel NUC ҳамчун сервер амал мекунад:

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

Ва ҳамин тавр, аввалин чизҳои аввал.

Ҳоло биёед esxi-ро насб кунем, яъне порти VNC-ро дар танзимоти девори девор кушоем.

Бо нобаёнӣ, файл аз навиштан муҳофизат карда мешавад. Мо амалҳои зеринро иҷро мекунем:

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

блоки зеринро ба охири файл илова кунед:

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

Хуред, захира кунед. Ҳуқуқҳоро баргардонед ва хидматро аз нав оғоз кунед:

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

То он даме, ки мизбон бозоғоз карда шавад, амал мекунад. Баъд аз ин, ин манипуляция бояд такрор карда шавад.

Минбаъд, ман тамоми корҳоро дар як мошини виртуалӣ дар ҳамон сервер иҷро мекунам.

Меъёрҳои маҳсулот:

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

Баъд, ба мо лозим аст бастабандӣ, инчунин маҳсулоти HashiCorp.

Он барои ба таври автоматӣ ҷамъ овардани тасвири "тиллоӣ" лозим аст. ки мо дар оянда истифода мебарем.

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

Дар ҳаракат версияи бастабандӣ хатогӣ рӯй дода метавонад, зеро дар асоси RedHat метавонад бастаеро бо ҳамон ном дошта бошад.

which -a packer
/usr/sbin/packer

Барои ҳалли он, шумо метавонед пайванди рамзӣ эҷод кунед ё роҳи мутлақро истифода баред /usr/bin/packer.

Ҳоло ба мо ovftool лозим аст зеркашӣ. Зеркашӣ кунед, ба сервер ҷойгир кунед ва насб кунед:

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.

Мо пеш меравем.

Дар gith ман ҳама чизеро, ки ба шумо лозим аст, омода кардам.

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

Ба папка калон шумо бояд маҷмӯаи тақсимоти системаи пардозандаро гузоред. Дар ҳолати ман, ин centos 7 аст.

Шумо инчунин бояд файлро таҳрир кунед. centos-7-base.json:

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

Пас аз ҳама тағирот, маҷлисро иҷро кунед:

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

Агар ҳама чиз дуруст танзим ва муайян карда шуда бошад, пас шумо тасвири насби автоматии системаи оператсионӣ хоҳед дид. Ин раванд маро 7-8 дақиқа мегирад.

Пас аз анҷоми бомуваффақият дар папка баромади-пакер-centos7-x86_64 файли ova ҷойгир карда мешавад.

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

Азбаски Terraform провайдери ESXi надорад, шумо бояд онро созед.

Мо мегузорем:

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

Баъдан, мо провайдерро ҷамъ мекунем:

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

Мо дар хати марра ҳастем. Биёед тасвири худро паҳн кунем.

Биёед ба папка меравем:

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

Пеш аз ҳама, файлро таҳрир кунед variables.tf. Шумо бояд пайвастшавӣ ба сервери ESXi-ро муайян кунед.

Дар файл network_config.cfg дорои танзимоти шабакаи мошини виртуалии оянда. Ба эҳтиёҷоти худ тағир диҳед ва як лайнерро иҷро кунед:

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

Хуб, дар файл main.tf тағир додани роҳи файли ova ба худ, агар гуногун бошад.

Лаҳзаи ҳақиқат.

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.

Анҷом:

terraform apply

Агар ҳама чиз дуруст анҷом дода шавад, пас дар 2-3 дақиқа мошини нави виртуалӣ аз тасвири қаблан сохташуда ҷойгир карда мешавад.

Истифодаи ҳамаи инҳо танҳо бо тасаввуроти шумо маҳдуд аст.

Ман танҳо мехостам таҷрибаҳои беҳтаринро мубодила кунам ва нуктаҳои асосиро ҳангоми кор бо ин маҳсулот нишон диҳам.

Ташаккур барои таваҷҷӯҳатон!

PS: Ман аз танқиди созанда хушҳолам.

Манбаъ: will.com

Илова Эзоҳ