
Selles artiklis vaatleme, millest Terraform koosneb, ning kĂ€ime samm-sammult lĂ€bi, kuidas ĂŒles seada oma infrastruktuur â valmistame ette kolm VM erinevateks eesmĂ€rkideks: proksi, failide salvestamine ja CMS.
Kogu teema detailides ja kolmes etapis:
1. Terraform â kirjeldus, eelised ja koostisosad
Terraform on IaC (Infrastructure-as-Code) tööriist virtuaalse infrastruktuuri loomiseks ja haldamiseks koodi abil.
Tööriista kasutamise kÀigus mÀrkisime mitmeid eeliseid:
Uute klientide virtuaalsete keskkondade kiirus (kasutajakeskkondade). Ăldiselt, mida rohkem uusi kliente, seda rohkem 'klikke' vajavad tehnilise toe töötajad uute ressursside avaldamiseks. Terraformi abil saavad kasutajad muuta virtuaalmasinate parameetreid (nt automaatselt vĂ€ljalĂŒlitada operatsioonisĂŒsteem ja suurendada virtuaalse ketta partitsiooni) ilma tehnilise toe ja masina vĂ€ljalĂŒlitamiseta.
Aktiveerimisplaani kohene kontrollimine uut teennust. Infrastruktuuri koodikirjelduste abil saame kohe kontrollida, mis ja millises jĂ€rjekorras lisatakse ning millises lĂ”ppseisundis on konkreetne virtuaalne masin vĂ”i virtuaalne vĂ”rk, mis on ĂŒhendatud virtuaalsete masinatega.
Enamik tuntud pilveteenuste platvormide kirjeldamine. Saate kasutada tööriista Amazonist ja Google Cloudist kuni era platvormideni, mis pÔhinevad VMware vCloud Directoril, pakkudes teenuseid IaaS, SaaS ja PaaS lahenduste raames.
Hallata mitmeid pilveteenuse pakkujaid ja jaotada infrastruktuuri nende vahel, et suurendada töökindlust, kasutades ĂŒhe konfiguratsiooni loomist, diagnostikat ja haldamist pilveressursside haldamiseks.
Mugav kasutamine demostendide loomiseks tarkvarade testimiseks ja silumiseks. Saate luua ja edastada stende testimisosakonnale, testida tarkvara erinevates keskkondades samal ajal ning kiiresti muuta ja eemaldada ressursse, luues vaid ĂŒhe ressursi loomise plaani.
âTerrariumâ Terraform
RÀÀkisime tööriista eeliste kohta, nĂŒĂŒd vaatame seda osade kaupa.
Teenusepakkujad.Â
Terraformis saab praktiliselt iga infrastruktuuritĂŒĂŒbi esindada ressursina. Ressursside ja API platvormi vahelise ĂŒhenduse tagavad teenusepakkuja moduld, mis vĂ”imaldavad luua ressursse teatud platvormi raames, nĂ€iteks Azure vĂ”i VMware vCloud Director.
Projekti raames saate suhelda erinevate teenusepakkujatega erinevates platvormides.
Ressursid (ressursside kirjeldus).
Ressursside kirjeldus vĂ”imaldab hallata platvormi komponente, nĂ€iteks virtuaalseid masinaid vĂ”i vĂ”rgusid.Â
Saate ise luua ressursi kirjeldusi VMware vCloud Directori teenusepakkuja jaoks ja kasutada seda kirjeldust ressursside loomiseks mis tahes hostiteenuse pakkuja juures, kes kasutab vCloud Directori. Peate vaid asendama autentimisparameetrid ja vajalikud vĂ”rguĂŒhenduse parameetrid soovitud hostiteenuse pakkujaga.
Provisionerid.
See komponent vĂ”imaldab teostada operatsioonisĂŒsteemi algse paigaldamise ja hooldamise toiminguid pĂ€rast virtuaalmasinate loomist. Kui olete virtuaalmasina ressursi loonud, saate provisioners'i abil seadistada ja ĂŒhenduda SSH kaudu, teostada operatsioonisĂŒsteemi vĂ€rskenduse ning laadida ja kĂ€ivitada skripti.Â
Sisendi ja vÀljundi muutujad.
Sisendi muutujad â sissepÀÀsuks mĂ”eldud muutujad igasuguste plokkide jaoks.Â
VÀljumise muutujad vÔimaldavad salvestada vÀÀrtusi pÀrast ressursside loomist ja neid saab kasutada sisendi muutujatena teiste moodulite, nÀiteks Provisioners'i plokkides.
Olekingud.
Olekufailid salvestavad teavet pakkujaressursside konfiguratsiooni kohta. Esmakordsel platvormi loomisel ei ole ressursiteavet ja enne iga operatsiooni uuendab Terraform olekut reaalse infrastruktuuriga juba kirjeldatud ressurssidest.
Oleku pÔhieesmÀrk on salvestada loodud ressursside objektide sidumine, et vÔrrelda lisatavate ressursside ja objektide konfiguratsiooni, vÀltimaks platvormi korduvat loomist ja muudatusi.
Vaikimisi oleku teave salvestatakse kohalikku faili terraform.tfstate, kuid vajadusel on vÔimalik kasutada ka kaughoidlat meeskonnatöötamiseks.
Samuti saate importida olemasolevad ressursid platvormilt olekusse, et hiljem interakteeruda teiste ressurssidega, mis omakorda on loodud ilma Terraformita. Â
2. Infrastruktuuri loomine
Oleme koostisosad lĂ€bi vaadanud, nĂŒĂŒd loome Terraformi abil samm-sammult infrastruktuuri, mis koosneb kolmest virtuaalsest masinast. Esimene on varustatud nginxi proxiserveriga, teine Nextcloudi andmete hoidla ja kolmas CMS Bitrixiga.
Kirjutame ja kÀitame koodi meie . Meie kasutajad saavad kontot, mille Ôigused on Organization Administrator. Kui kasutate teises VMware'i pilves sama Ôigusega kontot, saate meie nÀidiskoodiga töötada. Alustame!
Esmalt loome meie uue projekti jaoks kausta, kuhu paigutame infrastruktuuri kirjeldavad failid.
mkdir project01
SeejĂ€rel kirjeldame infrastruktuuri komponente. Terraform loob seosed ja töötleb faile vastavalt failides olevatele kirjeldustele. Faile saab nimetada vastavalt kirjeldatavate blokkide eesmĂ€rgile, nĂ€iteks network.tf â kirjeldab infrastruktuuri vĂ”rguparameetreid.
Meie infrastruktuuri komponentide kirjeldamiseks oleme loonud jÀrgmised failid:
Failide nimekiri.
main.tf â kirjeldus virtuaalse keskkonna parameetritest â virtuaalsed masinad, virtuaalsed konteinerid;
network.tf â virtuaalse vĂ”rgu parameetrite ja NAT, Firewall reeglite kirjeldus;
variables.tf â muutuja nimekiri, mida kasutame;
vcd.tfvars â projekti muutuja vÀÀrtused VMware vCloud Director mooduli jaoks.
Terraformi konfigureerimiskeel on deklareeriv ja plokkide jÀrjekord ei oma tÀhtsust, vÀlja arvatud provisioner plokkide puhul, kuna selles plokis kirjeldame infrastruktuuri ettevalmistamisel tÀidetavaid kÀske ning need tÀidetakse jÀrjestikku.
Plokkide struktuur.
"" "" {
# Block body
= # Argument
}
Plokkide kirjeldamiseks kasutatakse oma programmeerimiskeelt HCL (HashiCorp Configuration Language), infrastruktuuri saab vĂ”imalusel kirjeldada ka JSON-i abil. TĂ€iendavat teavet sĂŒntaksi kohta saab .
Keskkonna muutuja konfiguratsioon, variables.tf ja vcd.tfvars
Alustame kahe faili loomisega, mis kirjeldavad kÔiki kasutatavaid muutujaid ja nende vÀÀrtusi VMware vCloud Director'i Mooduli jaoks. Esiteks loome faili variables.tf.
File'i variables.tf sisu.
variable "vcd_org_user" {
  description = "vCD teenusekasutaja"
}
variable "vcd_org_password" {
  description = "vCD teenusekasutaja parool"
}
variable "vcd_org" {
  description = "vCD teenusekasutaja organisatsioon"
}
variable "vcd_org_vdc" {
  description = "vCD teenusekasutaja VDC"
}
variable "vcd_org_url" {
  description = "vCD teenusekasutaja URL"
}
variable "vcd_org_max_retry_timeout" {
  default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
  default = "true"
}
variable "vcd_org_edge_name" {
  description = "vCD servamisi nimi"
}
variable "vcd_org_catalog" {
  description = "vCD avalik kataloog"
}
variable "vcd_template_os_centos7" {
  description = "OS CentOS 7"
  default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
  description = "Salvestuspoliiid"
  default = "Kuldne salvestuspoliiid"
}
variable "vcd_org_hdd_sp" {
  description = "Salvestuspoliiid"
  default = "Pronksine salvestuspoliiid"
}
variable "vcd_edge_local_subnet" {
  description = "Organisatsiooni vÔrgu alamside"
}
variable "vcd_edge_external_ip" {
  description = "VÀline avalik IP"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
Muutujate vÀÀrtused, mille me saame teenusepakkujalt.
vcd_org_user â organisatsiooni administraatori Ă”igustega kasutajanimi,
vcd_org_password â kasutaja parool,
vcd_org â organisatsiooni nimetus,
vcd_org_vdc â virtuaalse andmekeskuse nimetus,
vcd_org_url â API URL,
vcd_org_edge_name â virtuaalse ruuteri nimetus,
vcd_org_catalog â virtuaalmasinate malli katalooge nimetus,
vcd_edge_external_ip â avalik IP-aadress,
vcd_edge_external_network â vĂ€lise vĂ”rgu nimetus,
vcd_org_hdd_sp â HDD salvestuspoliitika nimetus,
vcd_org_ssd_sp â SSD salvestuspoliitika nimetus.
Ja sisestame oma muutujad:
vcd_edge_local_ip_nginx â NGINX-i virtuaalmasina IP-aadress,
vcd_edge_local_ip_bitrix â 1C:Bitrixi virtuaalmasina IP-aadress,
vcd_edge_local_ip_nextcloud â Nextcloudi virtuaalmasina IP-aadress.
Teise failina loome ja mÀÀratleme parameetrid VMware vCloud Director mooduli jaoks failis vcd.tfvars: Meenutame, et nĂ€ites kasutame , kui töötate teise teenusepakkujaga, kĂŒsige temalt vÀÀrtusi.Â
Faili sisu vcd.tfvars.
vcd_org_url = "https://vcloud.mclouds.ru/api"
vcd_org_user = "orgadmin"
vcd_org_password = "*"
vcd = "org"
vcd_org_vdc = "orgvdc"
vcd_org_maxretry_timeout = 60
vcd_org_allow_unverified_ssl = true
vcd_org_catalog = "Templates"
vcd_templateos_centos7 = "CentOS7"
vcd_org_ssd_sp = "Kuldne salvestuspoliitika"
vcd_org_hdd_sp = "Pronksine salvestuspoliitika"
vcd_org_edge_name = "MCLOUDS-EDGE"
vcd_edge_external_ip = "185.17.66.1"
vcd_edge_local_subnet = "192.168.110.0/24"
vcd_edge_local_ip_nginx = "192.168.110.1"
vcd_edge_local_ip_bitrix = "192.168.110.10"
vcd_edge_local_ip_nextcloud = "192.168.110.11"
vcd_edge_external_network = "NET-185-17-66-0"
Network configuration, network.tf.
Keskkonfiguratsioon on mÀÀratud, nĂŒĂŒd seadistame virtuaalmasinate ĂŒhendusskeemi â igale virtuaalmasinale mÀÀrame privaatse IP-aadressi ning suuname Ports Destination NAT kaudu vĂ€lisse verre. Juhtimispordile ligipÀÀsu piiramiseks mÀÀrame ligipÀÀsu ainult meie IP-aadressile.
VÔrguskeem loodava Terraform platvormi jaoks.
Loodame virtuaalse organisatsiooni vÔrku nimega net_lan01, vaikimisi vÀravaga: 192.168.110.254, samuti aadressiruumi: 192.168.110.0/24.
Kirjeldame virtuaalset vÔrku.
resource "vcd_network_routed" "net" {
  name = "net_lan01"
  edge_gateway = var.vcd_org_edge_name
  gateway = "192.168.110.254"
  dns1 = "1.1.1.1"
  dns2 = "8.8.8.8"
 static_ip_pool {
start_address = "192.168.110.1"
end_address = "192.168.110.253"
  }
}
Loome tulemustereeglid, mis vĂ”imaldavad virtuaalmasinatel internetti pÀÀseda. Selle ploki raames on kĂ”ik pilveressursid ka internetti ĂŒhendatud:
Kirjeldame reegleid VM-i interneti ligipÀÀsuks.
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
  edge_gateway  = var.vcdorgedgename
  name = "Internet Access"
  source {
gateway_interfaces = ["internal"]
  }
  destination {
gateway_interfaces = ["external"]
  }
  service {
protocol = "any"
  }
  depends_on = [vcdnetworkrouted.net]
}
Seadetesse sÔltuvus, et pÀrast vcdnetworkrouted.net ploki töötlemist alustame vcdnsxvfirewallrule ploki konfigureerimist, kasutades dependson. Kasutame seda vÔimalust, kuna mÔned sÔltuvused vÔivad olla konfiguratsioonis vaikimisi tuvastatud.
SeejĂ€rel loome reeglid, mis lubavad juurdepÀÀsu portidele vĂ€lisest vĂ”rgust ja mÀÀrame oma IP-aadressi serveritesse SSH-ĂŒhenduse tegemiseks. IgaĂŒhel, kel on interneti juurdepÀÀs, on ligipÀÀs 80 ja 443 portidele veebiserveris, ning kasutajal, kelle IP-aadress on 90.1.15.1, on ligipÀÀs virtuaalserverite SSH-portidele.
Lubame juurdepÀÀsu portidele vÀlisest vÔrgust.
resource "vcd_nsxv_firewall_rule" "fwnatports" {
  edge_gateway  = var.vcd_org_edge_name
  name = "HTTPs Access"
  source {
gateway_interfaces = ["external"]
  }
  destination {
 gateway_interfaces = ["internal"]
  }
  service {
protocol = "tcp"
port = "80"
  }
  service {
protocol = "tcp"
port = "443"
  }
  depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {
  edge_gateway  = var.vcd_org_edge_name
  name = "Admin Access"
  source {
 ip_addresses = [ "90.1.15.1" ]
  }
  destination {
 gateway_interfaces = ["internal"]
  }
  service {
protocol = "tcp"
port = "58301"
  }
  service {
protocol = "tcp"
port = "58302"
  }
  service {
protocol = "tcp"
port = "58303"
  }
  depends_on = [vcd_network_routed.net]
}
Loome Source NAT reeglid, et pÀÀseda internetti pilvelokaalsest vÔrkust:
Kirjeldame Source NAT reegleid.
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
  vĂ”rgutĂŒĂŒp = "ext"
  network_name = var.vcdedgeexternalnetwork
  original_address  = var.vcd_edge_local_subnet
translated_address = var.vcd_edge_external_ip
  depends_on = [vcd_network_routed.net]
}
Ja lisame vÔrguploki konfiguratsiooni lÔpus Destination NAT reeglid teenustele vÀlisest vÔrgust juurde pÀÀsemiseks:
Lisame Destination NAT reeglid.
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
vĂ”rgutĂŒĂŒp = "ext"
  description = "NGINX HTTPs"
original_address = var.vcd_edge_external_ip
original_port = 443
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
vĂ”rgutĂŒĂŒp = "ext"
description = "NGINX HTTP"
original_address = var.vcd_edge_external_ip
original_port = 80
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Lisame NAT reegli portide tÔlgendamiseks SSH serverile Nginx all.
resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
vĂ”rgutĂŒĂŒp = "ext"
description = "SSH NGINX"
original_address = var.vcd_edge_external_ip
original_port = 58301
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Lisame NAT reegli portide tÔlgendamiseks SSH serverile 1C-Bitrixiga.
resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
vĂ”rgutĂŒĂŒp = "ext"
description = "SSH Bitrix"
original_address = var.vcd_edge_external_ip
original_port = 58302
translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Lisame NAT reegli portide tÔlgendamiseks SSH serverile Nextcloudiga.
resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
vĂ”rgutĂŒĂŒp = "ext"
description = "SSH Nextcloud"
original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Virtuaalse keskkonna konfiguratsioon main.tf
Nagu me artikli alguses planeerisime, loome kolm virtuaalmasinat. Need seadistatakse "Guest Customization" abil. VÔrgusÀtted kirjutame vastavalt meie mÀÀratud seadistustele ja kasutaja parool genereeritakse automaatselt.
Kirjeldame vApp'i, milles asuvad virtuaalsed masinad ja nende konfiguratsioon.
Virtuaalsete masinate konfiguratsioon
Loome vApp'i konteineri. Et saaksime koheselt ĂŒhendada vApp'i ja VM-i virtuaalvĂ”rku, lisame ka parameetri depends_on:
Loome konteineri
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]
}
Loome virtuaalse masina koos kirjeldustega
resource "vcd_vapp_vm" "nginx" {
vapp_name = vcd_vapp.vapp.name
name = "nginx"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
Peamised parameetrid VM'i kirjelduses:
name â virtuaalse masina nimi,
vappname â vApp'i nimi, kuhu uus VM lisada,
catalogname / templatename â katalooge ja virtuaalmasina ĆĄablooni nimi,
storageprofile â vaikimisi salvestuspoliitika.
Network ploki parameetrid:
type â ĂŒhendatud vĂ”rgu tĂŒĂŒp,
name â millisesse virtuaalvĂ”rku VM'i ĂŒhendada,
isprimary â peamine vĂ”rguadapter,
ipallocation_mode â aadressi mÀÀramise reĆŸiim MANUAL / DHCP / POOL,
ip â IP-aadress virtuaalse masina jaoks, mÀÀrame kĂ€sitsi.
Override_template_disk blokk:
sizeinmb â virtuaalse masina kĂ€ivitamise ketta suurus
storage_profile â ketta sĂ€ilitamise poliitika
Loome teise VM failihoiustamise Nextcloud'i kirjeldustega
resource "vcd_vapp_vm" "nextcloud" {
vapp_name = vcd_vapp.vapp.name
name = "nextcloud"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
resource "vcd_vm_internal_disk" "disk1" {
vapp_name = vcd_vapp.vapp.name
vm_name = "nextcloud"
bus_type = "paravirtual"
size_in_mb = "102400"
bus_number = 0
unit_number = 1
storage_profile = var.vcd_org_hdd_sp
allow_vm_reboot = true
depends_on = [ vcd_vapp_vm.nextcloud ]
}
Blokis vcdvminternal_disk kirjeldame uut virtuaalset ketast, mis ĂŒhendatakse virtuaalse masinaga.
Selgitused vcdvminternaldisk ploki kohta:
bustype â ketasjuhtme tĂŒĂŒp
sizeinmb â ketta suurus
busnumber / unitnumber â ĂŒhenduskoht adapteris
storage_profile â ketta sĂ€ilitamise poliitika
Kirjeldame viimast VM Bitrix'ile
resource "vcd_vapp_vm" "bitrix" {
vapp_name = vcd_vapp.vapp.name
name = "bitrix"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_bitrix
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "81920"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
OSe uuendamine ja tÀiendavate skriptide installimine
VÔrk on ette valmistatud, virtuaalsed masinad on kirjeldatud. Enne meie infrastruktuuri importimist saame eelnevalt lÀbi viia algse proviisiooni provisioners plokkide abil ja ilma Ansible'ita.
Vaadake, kuidas vÀrskendada OS-i ja kÀivitada CMS Bitrix'i installiskript provisioner ploki abil.
Alustame CentOS-i vÀrskenduste pakettide installimist.
resource "null_resource" "nginx_update_install" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip" ]
}
}
}
Komponentide tÀhistamine:
provisioner «remote-exec» â ĂŒhendame kaugprovisionimise ploki
Ăhenduse plokis kirjeldame tĂŒĂŒbi ja parameetrid ĂŒhendamiseks:
type â protokoll, meie puhul SSH;
user â kasutajanimi;
password â kasutaja parool. Meie juhul viitame parameetrile vcd_vapp_vm.nginx.customization[0].admin_password, mis salvestab genereeritud parooli sĂŒsteemi kasutaja jaoks.
host â vĂ€line IP-aadress ĂŒhendamiseks;
port â ĂŒhendamiseks vajalik port, mille mÀÀrasime DNAT-i seadistustes;
inline â loetleme kĂ€sud, mis viiakse sisse. KĂ€sud viiakse sisse jĂ€rjekorras, nagu see seadistuses nĂ€idatud.
NÀiteks jÀtkame 1C-Bitrixi installimise skripti tÀitmisega. Skripti tÀitmise tulemuse vÀljund on kÀttesaadav plaani tÀitmise ajal. Skripti installimiseks kirjeldame esmalt ploki:
Kirjeldame 1C-Bitrixi installimist.
provisioner "file" {
source = "prepare.sh"
sihtkoht = "/tmp/prepare.sh"
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"
]
}
Ja kohe kirjeldame Bitrixi vÀrskendust.
NĂ€idis 1C-Bitrixi varude haldamiseks.
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
parool = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeouts = "60s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip",
"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",
"chmod +x /tmp/bitrix-env.sh",
"/tmp/bitrix-env.sh"
]
}
}
Oluline! Skript ei pruugi töötada, kui SELinux ei ole varem vĂ€lja lĂŒlitatud! Kui vajate ĂŒksikasjalikku artiklit CMS 1C-Bitrixi installimise ja seadistamise kohta, kasutades bitrix-env.sh, vĂ”ite .
3. Infrastruktuuri initsialiseerimine
Moodulite ja pistikprogrammide initsialiseerimine
Me kasutame töös lihtsat "gentlemani komplekti": sĂŒlearvuti Windows 10 operatsioonisĂŒsteemiga ja ametlikul kodulehel saadud distributsioon . Lahti pakkida ja initsialiseerida kĂ€skluse abil: terraform.exe init
PÀrast arvutus- ja vÔrguinfrastruktuuri kirjeldamist kÀivitame planeerimise, et kontrollida meie konfiguratsiooni, kus saame nÀha, mida luuakse ja kuidas need omavahel mahuvad.
KÀivita kÀsk
- terraform plan -var-file=vcd.tfvars.Saame tulemuse
- Plaan: lisada 16, 0 muuta, 0 hÀvitada.See tÀhendab, et selles plaanis luuakse 16 ressurssi.KÀivitame plaani meeskonna kaudu
- terraform.exe apply -var-file=vcd.tfvars.
Virtuaalsed masinad luuakse ja seejĂ€rel kĂ€ivitatakse meie loetletud paketid provisioner'i jaotises â operatsioonisĂŒsteem uuendatakse ja installitakse CMS Bitrix.
Ăhendusandmete saamine
PĂ€rast plaani tĂ€itmist tahame saada serverite ĂŒhendusandmed tekstivormingus, selleks korraldame output jaotise jĂ€rgmiselt:
output "nginxpassword" {
 value = vcdvappvm.nginx.customization[0].adminpassword
}
Ja jÀrgmine vÀljund teatab meile loodud virtuaalse masina parooli:
Outputs: nginx_password = F#4u8!!N
KokkuvĂ”ttes saame juurdepÀÀsu uuendatud operatsioonisĂŒsteemiga virtuaalsetele masinatele ja eelinstalleeritud paketid meie edasiseks tööks. KĂ”ik on valmis!
Aga mis siis, kui teil on juba olemasolev infrastruktuur?
3.1. Terraformi töö juba olemasoleva infrastruktuuriga
KÔik on lihtne, saate importida praegused virtuaalsed masinad ja nende vApp konteinerid kÀsuga import.
Kirjeldame vAPP ressurssi ja virtuaalmasinat.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
JĂ€rgmine samm on importida vApp ressursside omadused formaadis vcdvapp. .., kus:
vApp â vApp nimi;
org â organisatsiooni nimi;
org_vdc â virtuaalse andmekeskuse nimi.
vAPP ressursi omaduste import
Importime VM ressursside omadused formaadis: vcdvappvm. ..., mille sisu on jÀrgmine:
VM â VM nimi;
vApp â vApp nimi;
org â organisatsiooni nimi;
orgvdc â virtuaalse andmekeskuse nimi.
Importimine Ônnestus
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importimine ID-lt "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import ette valmistatud!
vcd_vapp_vm importimiseks valmistatud
vcd_vapp_vm.Zabbix: Oleku vÀrskendamine... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Importimine oli edukas!
Ăles laaditud ressursid on nĂ€idatud ĂŒleval. Need ressursid on nĂŒĂŒd teie
Terraformi olekus ja neid haldab edaspidi Terraform.
NĂŒĂŒd saame vaadata uut imporditud ressurssi:
Imporditud ressurss
> terraform show
...
# vcd_vapp.Monitoring:
resource "vcd_vapp" "Monitoring" {
guest_properties = {}
href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"
id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"
ip = "allocated"
metadata = {}
name = "Monitoring"
org = "mClouds"
status = 4
status_text = "POWERED_ON"
vdc = "mClouds"
}
âŠ
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
computer_name = "Zabbix"
cpu_cores = 1
cpus = 2
expose_hardware_virtualization = false
guest_properties = {}
hardware_version = "vmx-14"
href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
internal_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
unit_number = 0
},
]
memory = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_type = "centos8_64Guest"
storage_profile = "Gold Storage Policy"
vapp_name = "Monitoring"
vdc = "mClouds"
customization {
allow_local_admin_password = true
auto_generate_password = true
change_sid = false
enabled = false
force = false
join_domain = false
join_org_domain = false
must_change_password_on_first_login = false
number_of_auto_logons = 0
}
network {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
NĂŒĂŒd on kĂ”ik valmis â oleme viimase sammu (infot olemasolevasse infrastruktuuri import) lĂ”petanud ja vaadanud ĂŒle kĂ”ik Olulisemad punktid Terraformiga töötamisel.Â
Tööriist on osutunud vĂ€ga mugavaks ja vĂ”imaldab kirjeldada teie infrastruktuuri kui koodi, alates ĂŒhe pilveteenuse pakkuja virtuaalmasinatest kuni vĂ”rgu komponentide ressursside kirjeldamiseni.
Selle kaudu on keskkonna sÔltumatus vÔimalus töötada nii kohalike kui ka pilve ressurssidega, lÔpetades platvormi haldamisega. Kui toetatud platvormi ei ole ja soovitakse uut lisada, on vÔimalik kirjutada oma pakkuja ja kasutada seda.
Allikas: habr.com
