Terapkan Cepat vm ESXi dengan Terraform

Halo semuanya, nama saya Ivan dan saya seorang alkoholic system administrator (OPS).

Saya ingin memberi tahu Anda cara menerapkan mesin virtual di ESXi tanpa vCenter menggunakan Terraform.

Cukup sering, Anda harus menggunakan / membuat ulang mesin virtual untuk menguji aplikasi ini atau itu. Karena kemalasan, saya berpikir untuk mengotomatiskan prosesnya. Pencarian saya membawa saya ke produk perusahaan yang luar biasa hashicorp, terraform.

Saya rasa banyak orang yang tahu apa itu Terraform, dan siapa yang tidak tahu, ini adalah aplikasi untuk mengelola cloud, infrastruktur, atau layanan apa pun menggunakan konsep IasC (Infrastruktur sebagai kode).

Saya menggunakan ESXi sebagai lingkungan virtualisasi saya. Cukup sederhana, nyaman dan dapat diandalkan.
Saya mengantisipasi sebuah pertanyaan.

Mengapa terraform ketika Anda dapat menggunakan vCenter Server?

Anda tentu saja bisa, tapi. Pertama, ini adalah lisensi tambahan, kedua, produk ini sangat intensif sumber daya dan tidak muat di server rumah saya, dan ketiga, kemampuan untuk meningkatkan keterampilan.

Platform Intel NUC bertindak sebagai 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.)

Jadi, hal pertama yang pertama.

Untuk saat ini mari kita setting esxi yaitu buka port VNC di setting firewall.

Secara default, file tersebut dilindungi dari penulisan. Kami melakukan manipulasi berikut:

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

tambahkan blok berikut ke akhir file:

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

Keluar, simpan. Ubah kembali hak dan mulai ulang layanan:

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

Aktual hingga host di-boot ulang. Setelah itu, manipulasi ini harus diulangi.

Selanjutnya, saya akan melakukan semua pekerjaan di mesin virtual di server yang sama.

Fitur:

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

Selanjutnya, kita perlu pengepak, juga produk dari HashiCorp.

Diperlukan untuk merakit gambar "emas" secara otomatis. yang akan kita gunakan di masa depan.

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

Sedang bergerak versi pengepakan kesalahan mungkin terjadi, karena berbasis RedHat mungkin berisi paket dengan nama yang sama.

which -a packer
/usr/sbin/packer

Untuk solusinya, Anda bisa membuat symlink, atau menggunakan absolute path /usr/bin/packer.

Sekarang kita membutuhkan ovftool link download. Unduh, pasang di server dan instal:

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.

Kami melanjutkan.

Di gipsum saya menyiapkan semua yang Anda butuhkan.

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

Ke folder iso Anda perlu meletakkan kit distribusi sistem operasi. Dalam kasus saya, ini adalah centos 7.

Anda juga perlu mengedit file. centos-7-base.json:

variables: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свои Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
iso_urls: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ
iso_checksum: чСксумма вашСго ΠΎΠ±Ρ€Π°Π·Π° 

Setelah semua perubahan, jalankan perakitan:

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

Jika semuanya sudah dikonfigurasi dan ditentukan dengan benar, maka Anda akan melihat gambar penginstalan otomatis sistem operasi. Proses ini membutuhkan waktu 7-8 menit.

Setelah berhasil menyelesaikan dalam folder keluaran-packer-centos7-x86_64 File ova akan ditemukan.

Instal 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

Karena Terraform tidak memiliki penyedia untuk ESXi, Anda perlu membuatnya.

Kami menempatkan pergi:

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

Selanjutnya, kami mengumpulkan penyedia:

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

Kami berada di garis finish. Ayo luncurkan gambar kita.

Mari kita pergi ke folder:

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

Pertama-tama, edit file variabel.tf. Anda perlu menentukan koneksi ke server ESXi.

Dalam file jaringan_config.cfg berisi pengaturan jaringan mesin virtual masa depan. Ubah sesuai kebutuhan Anda dan jalankan one-liner:

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

Nah, di dalam file utama.tf ubah jalur ke file ova menjadi milik Anda, jika berbeda.

Momen kebenaran.

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.

Menyelesaikan:

terraform apply

Jika semuanya dilakukan dengan benar, maka dalam 2-3 menit mesin virtual baru akan diterapkan dari image yang dibuat sebelumnya.

Penggunaan semua ini hanya dibatasi oleh imajinasi Anda.

Saya hanya ingin berbagi praktik terbaik dan menunjukkan poin utama saat bekerja dengan produk ini.

Terima kasih atas perhatian anda!

PS: Saya akan senang untuk kritik yang membangun.

Sumber: www.habr.com

Tambah komentar