Përshëndetje, unë quhem Ivan dhe jam një administrator sistemesh (OPS) që ka probleme me alkoolin.
Do doja të flisja se si i vendos makinën virtuale në ESXi pa vCenter duke përdorur Terraform.
Shpesh më duhet të krijoj/rikrijoj virtuale për të testuar ndonjë aplikacion. për shkak të lenies mendova për automatizimin e procesit. Kërkimet e mia më çuan te një produkt të shkëlqyer nga , .
Mendoj se shumë janë të vetëdijshëm se çfarë është Terraform, dhe për ata që nuk e dinë, ky është një aplikacion për menaxhimin e çdo cloud-i, infrastrukture ose shërbimi duke përdorur konceptin IasC (Infrastruktura si kod).
Si mjedis virtualizimi përdor ESXi. Mjaft i thjeshtë, i përshtatshëm dhe i besueshëm.
E parashikoj pyetjen.
Pse terraform nëse mund të përdorësh vCenter Server?
Natyrisht, mundesh, por: Së pari, kjo do të ishte një licencë shtesë, së dyti, ky produkt është shumë kërkues ndaj burimeve dhe thjesht nuk do të mund të vendoset në serverin tim shtëpiak, dhe së treti, kjo është një mundësi për të përmirësuar aftësitë e mia.
Si server po shërben platforma Intel NUC:
CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
Versioni ESXi: ESXi-6.5.0-4564106-standard (VMware, Inc.)Dhe tani, le të fillojmë nga fillimi.
Më parë le të konfigurojmë esxi, dhe specifikisht të hapim portin VNC në cilësimet e firewall-it.
Së pari, skedari është i mbrojtur nga shkrimi. Kryejmë veprimet e mëposhtme:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlShtojmë në fund të skedarit bllokun e mëposhtëm:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueDalim, ruajmë. Ndryshojmë të drejtat dhe rinisim shërbimin:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshKjo është e vlefshme deri në rinisjen e hostit. Pas kësaj, do të duhet të përsërisim këtë veprim.
Më pas, të gjitha punët do t'i kryej në makinën virtuale në këtë server.
Karakteristikat:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: çaktivizuar
firewalld: çaktivizuarMë pas do na nevojitet , gjithashtu një produkt i HashiCorp.
Kjo Ă«shtĂ« e nevojshme pĂ«r ndĂ«rtimin automatik tĂ« njĂ« imazhi âtĂ« artĂ«â. I cili do tĂ« pĂ«rdoret nĂ« tĂ« ardhmen.
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.5Në hapin packer version mund të ketë një gabim, pasi në RedHat-based mund të ndodhet një paketë me të njëjtin emër.
which -a packer
/usr/sbin/packerPër të zgjidhur mund të krijoni një simlink, ose të përdorni rrugën absolute /usr/bin/packer.
Tani na nevojitet ovftool . E shkarkojmë, e vendosim në server dhe e instalim:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Ekstraktimi i Installer VMware...përfundoi.
Duhet të pranoni Marrëveshjen e Licencës për Përdoruesin Fundor të VMware OVF Tool për Linux për të vazhduar. Shtypni Enter për të vazhduar.
MARRĂVESHJA E LICENCĂS PĂR PĂRDORUESIN FUNDOR VMWARE
A pajtoheni? [po/jo]:po
Produkti është gati për t'u instaluar. Shtypni Enter për të filluar
instalimin ose Ctrl-C për të anuluar.
Instalimi i komponentit VMware OVF Tool për Linux 4.4.0
Konfigurimi...
[######################################################################] 100%
Instalimi ishte i suksesshëm.Të vazhdojmë.
Në git kam përgatitur gjithçka që na nevojitet.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiNë dosjen iso duhet të vendosni distribucionin e sistemit operativ. Në rastin tim, kjo është centos 7.
Po ashtu, është e nevojshme të redaktoni skedarin centos-7-base.json:
variables: të specifikoni të dhënat tuaja për lidhjen
iso_urls: të specifikoni të dhënat aktuale
iso_checksum: kontrolli i imazhit tuaj Pas të gjitha ndryshimeve, nisim ndërtimin:
/usr/bin/packer build centos-7-base.jsonNëse gjithçka është konfiguruar dhe specifikuar saktë, atëherë do të shihni procesin e instalimit automatizuar të sistemit operativ. Ky proces do të zgjaste 7-8 minuta për mua.
Pas përfundimit të suksesshëm, në dosjen output-packer-centos7-x86_64 do të gjendet skedari ova.
Instalojmë 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
tf -v
Terraform v0.12.24Duke qenë se Terraform nuk ka provajder për ESXi, duhet ta krijojmë atë.
Instalo go:
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/amd64Pastaj krijojmë provajderin:
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/binJemi në finish. Le të fillojmë të shpërndajmë imazhin tonë.
Kalojmë në dosjen:
cd /root/create-and-deploy-esxi/centos7Së pari, redaktojmë skedarin variables.tf. Duhet të specifikoni lidhjen me serverin ESXi.
Në skedar network_config.cfg do të përmbajë konfigurimet e rrjetit për makinat virtuale të ardhshme. I ndryshojmë sipas nevojave tona dhe nisim komandën e vetme:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonDhe në skedarin main.tf ndryshoni rrugën për skedarin ova në tuajën, nëse është e ndryshme.
Momenti i vërtetë.
terraform init
Duke initializing the backend...
Duke 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.
Finish:
terraform applyIf everything is done correctly, a new virtual machine will be deployed in 2-3 minutes from the previously created image.
The usage options for all this are limited only by imagination.
I just wanted to share my developments and show the main points when working with these products.
Thank you for your attention!
P.S.: I would appreciate constructive criticism.
Burimi: habr.com
