د Terraform سره vm ESXi ګړندي ځای په ځای کړئ

ټولو ته سلام، زما نوم ایوان دی او زه د الکولي سیسټم مدیر یم (OPS).

زه غواړم تاسو ته ووایم چې څنګه زه د Terraform په کارولو سره د vCenter پرته په ESXi کې مجازی ماشینونه ځای په ځای کړم.

ډیری وختونه تاسو باید د دې یا هغه غوښتنلیک ازموینې لپاره مجازی ماشینونه ځای په ځای کړئ / بیا جوړ کړئ. د سستۍ له امله، ما د پروسې اتومات کولو په اړه فکر وکړ. زما لټون ما د شرکت څخه په زړه پوري محصول ته لاره هواره کړه hashicorp, خاوره.

زه فکر کوم چې ډیری خلک پوهیږي چې 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-based کېدای شي د ورته نوم یوه بسته ولري.

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 دقیقې وخت نیسي.

په فولډر کې د بریالیتوب بشپړولو وروسته output-packer-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: زه به خوښ شم چې رغنده انتقاد ترلاسه کړم.

سرچینه: www.habr.com

Add a comment