Terraform-тай VM ESXi-г хурдан байрлуулах

Бүгдээрээ сайн уу, намайг Иван гэдэг, би архины системийн администратор (OPS) хүн.

Би Terraform ашиглан vCenter-гүйгээр ESXi дээр виртуал машинуудыг хэрхэн байрлуулж байгаагаа хэлмээр байна.

Ихэнхдээ та энэ эсвэл тэр програмыг туршихын тулд виртуал машинуудыг байрлуулах / дахин үүсгэх шаардлагатай болдог. Залхуугаас болоод процессыг автоматжуулах талаар бодсон. Миний хайлт намайг компанийн гайхалтай бүтээгдэхүүн рүү хөтөлсөн hashicorp, terraform.

Олон хүмүүс Terraform гэж юу болохыг мэддэг, мэдэхгүй хүн бол IasC концепцийг ашиглан аливаа үүл, дэд бүтэц, үйлчилгээг удирдах програм юм гэж би бодож байна (Дэд бүтцийг код болгон).

Би ESXi-г виртуалчлалын орчин болгон ашигладаг. Маш энгийн, тохиромжтой, найдвартай.
Би асуулт хүлээж байна.

Та vCenter серверийг ашиглах боломжтой байхад яагаад terraform гэж?

Та мэдээж чадна, гэхдээ. Нэгдүгээрт, энэ бол нэмэлт лиценз, хоёрдугаарт, энэ бүтээгдэхүүн нь маш их нөөц шаарддаг бөгөөд миний гэрийн серверт тохирохгүй, гуравдугаарт, ур чадвараа дээшлүүлэх чадвар юм.

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.

Бид цаашаа.

Гит дээр би танд хэрэгтэй бүх зүйлийг бэлдсэн.

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

Юуны өмнө файлыг засах хэрэгтэй хувьсагч.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 минутын дараа өмнө нь хийсэн зургаас шинэ виртуал машин тавигдах болно.

Энэ бүхний хэрэглээ нь зөвхөн таны төсөөллөөр хязгаарлагддаг.

Би эдгээр бүтээгдэхүүнтэй ажиллахдаа хамгийн сайн туршлагыг хуваалцаж, гол санааг харуулахыг хүссэн.

Анхаарал тавьсанд баярлалаа!

Жич: Би бүтээлч шүүмжлэлд баяртай байх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх