
Në këtë artikull do të shqyrtojmë nga çfarë përbëhet Terraform, si dhe do të lançojmë hapat e nevojshëm për të ndërtuar infrastrukturën tonë. Do të përgatisim tre VM për qëllime të ndryshme: proxy, ruajtje skedarësh dhe CMS.
Të gjitha detajet dhe në tre hapa:
1. Terraform â pĂ«rshkrimi, pĂ«rfitimet dhe pĂ«rbĂ«rĂ«sit.
Terraform është një mjet IaC (Infrastructure-as-Code) për ndërtimin dhe menaxhimin e infrastrukturës virtuale përmes kodit.
Gjatë punës me mjetin, ne vërejti disa përfitime:
Shpejtësia e lançimit të tenantëve të rinj (mjediseve virtuale të përdoruesve). Zakonisht, sa më shumë klientë të rinj, aq më shumë "klik" kërkojnë punonjësit e mbështetjes teknike për të publikuar burimet e reja. Me Terraform, përdoruesit mund të ndryshojnë parametrat e makinave virtuale (p.sh., të fikim automatikisht OS-në dhe të rrisin ndarjen e disku virtual) pa ndihmën e mbështetjes teknike dhe pa ndalur makinën vetë.
Kontrolli momental i planit të aktivizimit të kundërshtit të ri. Me përshkrimin e kodit të infrastrukturës, ne mund të kontrollojmë menjëherë se çfarë dhe në cilin rend do të shtohet, si dhe cilado do të jetë gjendja përfundimtare e një makine virtuale apo rrjeti virtual me lidhjet ndaj makinave virtuale.
Mundësia për të përshkruar shumicën e platformave të njohura në re. Mund të përdorni mjetin nga Amazon dhe Google Cloud deri te platformat private që bazohen në VMware vCloud Director, që ofrojnë shërbime në kuadër të zgjidhjeve IaaS, SaaS dhe PaaS.
Menaxhimi i disa ofruesve të re dhe shpërndarja e infrastrukturës midis tyre për të rritur qëndrueshmërinë, duke përdorur një konfigurim të vetëm për krijimin, diagnostikimin dhe menaxhimin e burimeve në re.
Përdorimi i lehtë për krijimin e stendave demo për testimin dhe debugging e softuerit. Mund të krijoni dhe transferoni stenda për departamentin e testimit, ndërkohë që kontrolloni softuerin në ambiente të ndryshme, si dhe të ndryshoni dhe fshini menjëherë burimet, duke krijuar vetëm një plan ndërtimi të burimeve.
"Terrarium" i Terraform.
Të dimë pak mbi përfitimet e mjetit, tani do të shqyrtojmë përbërësit e tij.
Providers (ofruesit).Â
Në Terraform, çdo lloj infrastrukture mund të përfaqësohet si një burim. Lidhja midis burimeve dhe platformës API sigurohet nga modulat providers, të cilat lejojnë krijimin e burimeve brenda një platforme të caktuar, siç është Azure ose VMware vCloud Director.
Në kuadër të projektit, mund të bashkëpunoni me ofrues të ndryshëm në platforma të ndryshme.
Resources (përshkrimi i burimeve).
PĂ«rshkrimi i burimeve lejon menaxhimin e komponentĂ«ve tĂ« platformĂ«s, siç janĂ« makinat virtuale ose rrjetet.Â
Mund të krijoni vetë përshkrimin e burimeve për ofruesin VMware vCloud Director dhe ta përdorni këtë përshkrim për të krijuar burime te çdo ofrues hosti që përdor vCloud Director. Ju nevojitet vetëm të zëvendësoni parametrat e autentifikimit dhe parametrat e lidhjes rrjetësore me ofruesin e përkatshëm të hostit.
Provisioners.
Ky komponent ofron mundĂ«sinĂ« pĂ«r tĂ« kryer operacione mbi instalimin fillestar dhe mirĂ«mbajtjen e sistemit operativ pas krijimit tĂ« makinave virtuale. Pas krijimit tĂ« burimit tĂ« makinĂ«s virtuale, me anĂ« tĂ« provisioners mund tĂ« konfiguroni dhe lidheni pĂ«rmes SSH, tĂ« pĂ«rditĂ«soni sistemin operativ, si dhe tĂ« ngarkohet dhe ekzekutoni njĂ« skenar.Â
Variablat Input dhe Output.
Variablat Input janĂ« variablat hyrĂ«se pĂ«r çdo lloj blloku.Â
Variablat Output lejojnë ruajtjen e vlerave pas krijimit të burimeve dhe mund të përdoren si variabla hyrëse në module të tjera, si në bllokun Provisioners.
States (gjendjet).
Skedarët e States ruajnë informacion mbi konfigurimin e burimeve të platformës së ofruesit. Gjatë krijimit të parë të platformës, nuk ka informacione mbi burimet dhe përpara çdo operacioni Terraform përditëson gjendjen me infrastrukturën reale të burimeve të përshkruara tashmë.
Qëllimi kryesor i gjendjeve është ruajtja e lidhjes së objekteve të burimeve tashmë të krijuara për të krahasuar konfiguracionin e burimeve që po shtohen dhe objekteve, për të shmangur krijimin dhe ndryshimet e përsëritura të platformës.
Informacioni mbi gjendjen në mënyrë standarde ruhet në skedarin lokal terraform.tfstate, por nëse është e nevojshme, është e mundur të përdoret ruajtja e largët për të punuar në ekip.
Gjithashtu, mund tĂ« importoni burimet aktuale tĂ« platformĂ«s nĂ« njĂ« gjendje, nĂ« mĂ«nyrĂ« qĂ« tĂ« interaktoni mĂ« tej me burimet e tjera, tĂ« cilat nga ana e tyre janĂ« krijuar pa ndihmĂ«n e Terraform. Â
2. Krijimi i infrastrukturës
Pjesët janë shqyrtuar, tani me ndihmën e Terraform ne do të krijojmë hap pas hapi infrastrukturën me tre makina virtuale. E para me një server proxy nginx të instaluar, e dyta me një ruajtje skedarësh mbi bazën e Nextcloud dhe e treta me CMS Bitrix.
Ne do të shkruajmë kod dhe do ta kryejmë atë duke u bazuar në shembullin tonë . Dizajni i përdoruesve merr një llogari me të drejta Administrator Organizate; nëse përdorni një llogari me të njëjtat të drejta në një qendër tjetër VMware, mund të riprodhoni kodin nga shembujt tanë. Le të fillojmë!
Së pari, le të krijojmë një direktorium për projektin tonë të ri, në të cilin do të vendosen skedarët për përshkrimin e infrastrukturës.
mkdir project01
Pastaj do të përshkruajmë komponentët e infrastrukturës. Terraform krijon lidhje dhe përpunon skedarët në bazë të përshkrimit në skedarë. Skedarët vetë mund të emërohen në varësi të qëllimit të blloqeve të përshkruara, për shembull, network.tf - përshkruan parametrat rrjetorë për infrastrukturën.
Për të përshkruar komponentët e infrastrukturës sonë, ne kemi krijuar skedarët e mëposhtëm:
Lista e skedarëve.
main.tf - përshkrimi i parametrave për ambientin virtual - makina virtuale, kontejnerë virtualë;
network.tf - përshkrimi i parametrave të rrjetit virtual dhe rregullave NAT, Firewall;
variables.tf - lista e variablave që përdorim;
vcd.tfvars - vlerat e variablave të projektit për modulin VMware vCloud Director.
Gjuha e konfigurimit në Terraform është deklarative dhe rendi i blloqeve nuk ka rëndësi, përveç blloqeve provisioner, pasi në këtë bllok ne përshkruajmë komandat për ekzekutimin gjatë përgatitjes së infrastrukturës dhe ato do të kryhen sipas rendit.
Struktura e blloqeve.
"" "" {
# Block body
= # Argument
}
Përshkrimi i blloqeve përdor një gjuhë të vetme programimi HCL (HashiCorp Configuration Language), është gjithashtu e mundur përshkrimi i infrastrukturës me anë të JSON. Më shumë në lidhje me sintaksën mund të .
Konfigurimi i variablave të mjedisit, variables.tf dhe vcd.tfvars
Së pari, le të krijojmë dy skedarë, të cilët përshkruajnë listën e të gjithë variablave të përdorur dhe vlerat e tyre për modulin VMware vCloud Director. E para do ta krijojmë skedarin variables.tf.
Përmbajtja e skedarit variables.tf.
variabël "vcd_org_user" {
  përshkrimi = "Përdoruesi i Qirasë vCD"
}
variabël "vcd_org_password" {
  përshkrimi = "Fjalëkalimi i Qirasë vCD"
}
variabël "vcd_org" {
  përshkrimi = "Organizata e Qirasë vCD"
}
variabël "vcd_org_vdc" {
  përshkrimi = "VDC i Qirasë vCD"
}
variabël "vcd_org_url" {
  përshkrimi = "URL e Qirasë vCD"
}
variabël "vcd_org_max_retry_timeout" {
  default = "60"
}
variabël "vcd_org_allow_unverified_ssl" {
  default = "true"
}
variabël "vcd_org_edge_name" {
  përshkrimi = "emri i skajit vCD"
}
variabël "vcd_org_catalog" {
  përshkrimi = "katalogu publik vCD"
}
variabël "vcd_template_os_centos7" {
  përshkrimi = "OS CentOS 7"
  default = "CentOS7"
}
variabël "vcd_org_ssd_sp" {
  përshkrimi = "Politikat e Ruajtjes"
  default = "Politika e Ruajtjes së Arit"
}
variabël "vcd_org_hdd_sp" {
  përshkrimi = "Politikat e Ruajtjes"
  default = "Politika e Ruajtjes së Bronze"
}
variabël "vcd_edge_local_subnet" {
  përshkrimi = "Subneti i Rrjetit të Organizatës"
}
variabël "vcd_edge_external_ip" {
  përshkrimi = "IP publik exterior"
}
variabël "vcd_edge_local_ip_nginx" {}
variabël "vcd_edge_local_ip_bitrix" {}
variabël "vcd_edge_local_ip_nextcloud" {}
variabël "vcd_edge_external_network" {}
Vlerat e variablave që marrim nga ofruesi.
vcd_org_user â emri i pĂ«rdoruesit me tĂ« drejtat e Administratorit tĂ« OrganizatĂ«s,
vcd_org_password â fjalĂ«kalimi i pĂ«rdoruesit,
vcd_org â emri i organizatĂ«s,
vcd_org_vdc â emri i qendrĂ«s virtuale tĂ« tĂ« dhĂ«nave,
vcd_org_url â URL API,
vcd_org_edge_name â emri i ruterit virtual,
vcd_org_catalog â emri i katalogut tĂ« shablloneve tĂ« makinave virtuale,
vcd_edge_external_ip â adresa IP publike,
vcd_edge_external_network â emri i rrjetit exterior,
vcd_org_hdd_sp â emri i politikĂ«s sĂ« ruajtjes HDD,
vcd_org_ssd_sp â emri i politikĂ«s sĂ« ruajtjes SSD.
Dhe ne vendosim variablat tanë:
vcd_edge_local_ip_nginx â adresa IP e makinĂ«s virtuale me NGINX,
vcd_edge_local_ip_bitrix â adresa IP e makinĂ«s virtuale me 1C: Bitrix,
vcd_edge_local_ip_nextcloud â adresa IP e makinĂ«s virtuale me Nextcloud.
Me njĂ« skedĂ« tĂ« dytĂ« krijojmĂ« dhe pĂ«rcaktojmĂ« variablat pĂ«r modulin VMware vCloud Director nĂ« skedarin vcd.tfvars: KujtojmĂ« se nĂ« shembullin tonĂ« pĂ«rdorim , nĂ«se punoni me njĂ« ofrues tjetĂ«r, sqaroni vlerat me tĂ«.Â
Përmbajtja e skedarit 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 = "Politika e Ruajtjes së Arit"
vcd_org_hdd_sp = "Politika e Ruajtjes së Bronze"
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"
Konfigurimi i rrjetit, network.tf.
Variablat e ambientit janĂ« vendosur, tani do tĂ« konfiguroni skemĂ«n e lidhjes sĂ« makinave virtuale â çdo makinĂ« virtuale do t'i caktohet njĂ« adresĂ« IP private dhe me anĂ« tĂ« Destination NAT, do t'i kalojmĂ« portet nĂ« rrjetin e jashtĂ«m. PĂ«r tĂ« kufizuar aksesin nĂ« portet e menaxhimit, do tĂ« vendosim qasje vetĂ«m pĂ«r adresĂ«n tonĂ« IP.
Skema e rrjetit për platformën Terraform që po krijohet
Krijojmë një rrjet virtual organizativ me emrin net_lan01, me gateway për default: 192.168.110.254, si dhe me një hapësirë adresash: 192.168.110.0/24.
Përshkruajmë rrjetin virtual.
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"
  }
}
Do të krijojmë rregulla për firewall, që lejon të bëhet e mundur aksesimi i makinave virtuale në internet. Në kuadër të këtij bloku, të gjitha burimet virtuale në re do të kenë akses në internet:
Përshkruajmë rregullat për aksesin e VM në internet.
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]
}
Duke vendosur varësinë, që pas përpunimit të bllokut vcdnetworkrouted.net, ne fillojmë me konfigurimin e bllokut vcdnsxvfirewallrule, me ndihmën e dependson. Përdorim këtë opsion, pasi disa varësi mund të kenë arritur të çohen implicit në konfigurim.
MĂ« pas, do tĂ« krijojmĂ« rregulla qĂ« lejojnĂ« aksesin nĂ« portet nga rrjeti i jashtĂ«m dhe do tĂ« specifikojmĂ« adresĂ«n tonĂ« IP pĂ«r lidhjen me serverat pĂ«rmes SSH. Ădo pĂ«rdorues i rrjetit tĂ« jashtĂ«m ka akses nĂ« portet 80 dhe 443 nĂ« serverin web, dhe pĂ«rdoruesi me adresĂ«n IP 90.1.15.1 ka akses nĂ« portet SSH tĂ« serverĂ«ve virtualĂ«.
Lejojmë aksesin në portet nga rrjeti i jashtëm.
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]
}
Krijojmë rregulla Source NAT për aksesin në internet nga rrjeti lokal i cloud-it:
Përshkruajmë rregullat Source NAT.
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
  network_type = "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]
}
Dhe në përfundim të konfigurimit të bllokut rrjetor, shtojmë rregulla Destination NAT për aksesin në shërbimet nga rrjeti i jashtëm:
Shtojmë rregulla Destination NAT.
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
  description = "NGINX HTTPs"
adresa_origjinale = var.vcd_edge_external_ip
porta_origjinale = 443
adresa_tkhuar = var.vcd_edge_local_ip_nginx
porta_tkhuar = 443
protokolli = "tcp"
depends_on = [vcd_network_routed.net]
}
burimi "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
përshkrimi = "NGINX HTTP"
adresa_origjinale = var.vcd_edge_external_ip
porta_origjinale = 80
adresa_tkhuar = var.vcd_edge_local_ip_nginx
porta_tkhuar = 80
protokolli = "tcp"
depends_on = [vcd_network_routed.net]
}
Shtojmë një rregull NAT për translacionin e porteve te serveri SSH nën Nginx.
burimi "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
përshkrimi = "SSH NGINX"
adresa_origjinale = var.vcd_edge_external_ip
porta_origjinale = 58301
adresa_tkhuar = var.vcd_edge_local_ip_nginx
porta_tkhuar = 22
protokolli = "tcp"
depends_on = [vcd_network_routed.net]
}
Shtojmë një rregull NAT për translacionin e porteve te serveri SSH me 1C-Bitrix.
burimi "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
përshkrimi = "SSH Bitrix"
adresa_origjinale = var.vcd_edge_external_ip
porta_origjinale = 58302
adresa_tkhuar = var.vcd_edge_local_ip_bitrix
porta_tkhuar = 22
protokolli = "tcp"
depends_on = [vcd_network_routed.net]
}
Shtojmë një rregull NAT për translacionin e porteve te serveri SSH me Nextcloud.
burimi "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
përshkrimi = "SSH Nextcloud"
adresa_origjinale = var.vcd_edge_external_ip
porta_origjinale = 58303 adresa_tkhuar = var.vcd_edge_local_ip_nextcloud
porta_tkhuar = 22
protokolli = "tcp"
depends_on = [vcd_network_routed.net]
}
Konfigurimi i mjedisit virtual main.tf
Siç planifikuam në fillim të artikullit, do të krijojmë tri makina virtuale. Ato do të përgatiten me "Guest Customization". Parametrat rrjetor do të shkruhen sipas konfigurimeve që kemi shënuar, ndërsa parola e përdoruesit do të gjenerohet automatikisht.
Do të përshkruajmë vApp në të cilin do të ndodhen makinat virtuale dhe konfigurimi i tyre.
Konfigurimi i makinave virtuale
Do të krijojmë një kontejner vApp. Në mënyrë që të mund ta lidhim menjëherë vApp dhe VM në rrjetin virtual, gjithashtu shtojmë parametrin depends_on:
Po krijojmë kontejner
burimi "vcd_vapp" "vapp" {
emri = "web"
ndez = "true" depends_on = [vcd_network_routed.net]
}
Do të krijojmë një makinë virtuale me përshkrim
burimi "vcd_vapp_vm" "nginx" {
emri_vapp = vcd_vapp.vapp.name
emri = "nginx"
emri_katalogut = var.vcd_org_catalog
emri_shablloni = var.vcd_template_os_centos7
profil_i_ruajtjes = var.vcd_org_ssd_sp
memorie = 8192
procesorë = 1
nënpersha = 1
rrjeti {
lloji = "org"
emri = vcd_network_routed.net.name
është_i_parë = true
lloji_adaptorit = "VMXNET3"
modaliteti_ip_allokimit = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
kalkulo_diskun {
lloji_busi = "paravirtual"
madhësia_në_mb = "32768"
numri_i_busi = 0
numri_i_njesisë = 0
profil_i_ruajtjes = var.vcd_org_ssd_sp
}
}
Parametrat kryesorë në përshkrimin e VM:
emri â emri i makinĂ«s virtuale,
emri_vapp â emri i vApp nĂ« tĂ« cilin do tĂ« shtohet VM e re,
emri_katalogut / emri_shabllonit â emri i katalogut dhe emri i shabllonit tĂ« makinĂ«s virtuale,
profil_ruajtjeje â politika e ruajtjes sipas-default.
Parametrat e bllokut të rrjetit:
lloji â lloji i rrjetit qĂ« po lidhet,
emri â nĂ« cilin rrjet virtual do tĂ« lidhim VM-nĂ«,
Ă«shtĂ«_i_parĂ« â adaptori rrjetor kryesor,
modaliteti_ip_allokimit â mĂ«nyra e alokimit tĂ« adresĂ«s MANUAL / DHCP / POOL,
ip â adresa IP pĂ«r makinĂ«n virtuale, do ta specifikojmĂ« manualisht.
Blloku kalkulo_diskun:
madhĂ«sia_nĂ«_mb â madhĂ«sia e boot-diskut pĂ«r makinĂ«n virtuale
profil_i_ruajtjes â politika e ruajtjes pĂ«r diskun
Do të krijojmë një VM të dytë me përshkrim të ruajtjes së skedarëve Nextcloud
burimi "vcd_vapp_vm" "nextcloud" {
emri_vapp = vcd_vapp.vapp.name
emri = "nextcloud"
emri_katalogut = var.vcd_org_catalog
emri_shablloni = var.vcd_template_os_centos7
profil_i_ruajtjes = var.vcd_org_ssd_sp
memorie = 8192
procesorë = 1
nënpersha = 1
rrjeti {
lloji = "org"
emri = vcd_network_routed.net.name
është_i_parë = true
lloji_adaptorit = "VMXNET3"
modaliteti_ip_allokimit = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
kalkulo_diskun {
lloji_busi = "paravirtual"
madhësia_në_mb = "32768"
numri_i_busi = 0
numri_i_njesisë = 0
profil_i_ruajtjes = 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 ]
}
Në seksionin vcdvminternal_disk do të përshkruajmë një disk virtual të ri, i cili lidhet me makinerinë virtuale.
Shpjegime për bllokun vcdvminternaldisk:
bustype â lloji i kontrolluesit tĂ« disks
sizeinmb â madhĂ«sia e disks
busnumber / unitnumber â vendi i lidhjes nĂ« adaptator
profil_i_ruajtjes â politika e ruajtjes pĂ«r diskun
Do të përshkruajmë VM-në e fundit në Bitrix
resource "vcd_vapp_vm" "bitrix" {
emri_vapp = vcd_vapp.vapp.name
name = "bitrix"
emri_katalogut = var.vcd_org_catalog
emri_shablloni = var.vcd_template_os_centos7
profil_i_ruajtjes = var.vcd_org_ssd_sp
memorie = 8192
procesorë = 1
nënpersha = 1
rrjeti {
lloji = "org"
emri = vcd_network_routed.net.name
është_i_parë = true
lloji_adaptorit = "VMXNET3"
modaliteti_ip_allokimit = "MANUAL"
ip = var.vcd_edge_local_ip_bitrix
}
kalkulo_diskun {
lloji_busi = "paravirtual"
size_in_mb = "81920"
numri_i_busi = 0
numri_i_njesisë = 0
profil_i_ruajtjes = var.vcd_org_ssd_sp
}
}
Përditësimi i OS dhe instalimi i skenarëve shtesë
Rrjeti është përgatitur, makineritë virtuale janë përshkruar. Para importit të infrastrukturës sonë, ne mund ta kryejmë paraprakisht provizionimin duke përdorur blloqet e provisioners dhe pa përdorur Ansible.
Le të shohim si të përditësojmë OS-në dhe të ekzekutojmë skenarin e instalimit të CMS Bitrix me ndihmën e bllokut provisioner.
Së pari, do të kryejmë instalimin e pakot përditësuese të CentOS.
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" ]
}
}
}
Shënimi i komponentëve:
provisioner «remote-exec» â lidhemi me bllokun e âprovizionimitâ tĂ« largĂ«t
Në bllokun connection përshkruajmë tipin dhe parametrat për lidhjen:
type â protokolli, nĂ« rastin tonĂ« SSH;
user â emri i pĂ«rdoruesit;
password â fjalĂ«kalimi i pĂ«rdoruesit. NĂ« kĂ«tĂ« rast, shĂ«njojmĂ« parametrin vcdvappvm.nginx.customization[0].admin_password, i cili ruan fjalĂ«kalimin e gjeneruar pĂ«r pĂ«rdoruesin e sistemit.
host â adresa IP e jashtme pĂ«r lidhjen;
port â porta pĂ«r lidhjen, e cila Ă«shtĂ« caktuar mĂ« parĂ« nĂ« konfigurimet DNAT;
inline â renditni listĂ«n e komandeve qĂ« do tĂ« futen. Komandat do tĂ« futen nĂ« rendin e caktuar nĂ« kĂ«tĂ« seksion.
Si një shembull, ne gjithashtu do të ekzekutojmë skenarin e instalimit të 1C-Bitrix. Shfaqja e rezultatit të ekzekutimit të skenarit do të jetë e arritshme gjatë ekzekutimit të planit. Për të instaluar skenarin, së pari do të përshkruajmë bllokun:
Do të përshkruajmë instalimin e 1C-Bitrix.
provisioner "file" {
source = "prepare.sh"
destination = "\/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"
]
}
Dhe menjëherë do të përshkruajmë përditësimin e Bitrix.
Shembulli i provizionimit të 1C-Bitrix.
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeout = "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"
]
}
}
à rëndësishme! Skripti mund të mos funksionojë nëse nuk çaktivizoni paraprakisht SELinux! Nëse ju nevojitet një artikull i detajuar mbi instalimin dhe konfigurimin e CMS 1C-Bitrix duke përdorur bitrix-env.sh, mund të .
3. Inizializimi i infrastrukturës
Inizializimi i moduleve dhe shtesave
Për punë përdorim një 'set gentleman': një laptop me OS Windows 10 dhe një distribucion nga faqja zyrtare . E shkyçim dhe e inizializojmë duke përdorur komandën: terraform.exe init
Pas përshkrimit të infrastrukturës llogaritëse dhe rrjetore, ne fillojmë planifikimin për të kontrolluar konfigurimin tonë, ku mund ta shohim se çfarë do të krijohet dhe si janë të lidhura ato mes tyre.
Ekzekutojmë komandën
- terraform plan -var-file=vcd.tfvars.Marrim rezultatin
- Plan: 16 për të shtuar, 0 për të ndryshuar, 0 për të shkatërruar.Kjo do të thotë se sipas këtij plani do të krijohen 16 burime.Fillojmë planin me komandën
- terraform.exe apply -var-file=vcd.tfvars.
MaĆinat virtuale do tĂ« krijohen, dhe pastaj do tĂ« ekzekutohen paketat e renditura nĂ« seksionin provisioner â sistemi operativ do tĂ« pĂ«rditĂ«sohet dhe do tĂ« instalojmĂ« CMS Bitrix.
Marrja e të dhënave për lidhjen
Pas përfundimit të planit, ne duam të marrim në formë tekstuale të dhënat për lidhjen me serverat, për këtë do ta formojmë seksionin output në mënyrën e mëposhtme:
output "nginxpassword" {
 value = vcdvappvm.nginx.customization[0].adminpassword
}
Dhe dalja e mëposhtme na informon për fjalëkalimin e makinës virtuale të krijuar:
Outputs: nginx_password = F#4u8!!N
Si rezultat, ne fitojmĂ« qasje nĂ« makinat virtuale me sistemin operativ tĂ« pĂ«rditĂ«suar dhe me paketat e паŃаmonstrimeve tĂ« instaluara pĂ«r punĂ«n tonĂ« tĂ« mĂ«tejshme. Gjithçka Ă«shtĂ« e gatshme!
Por çfarë nëse ju tashmë keni një infrastrukturë ekzistuese?
3.1. Puna e Terraform me infrastrukturën ekzistuese
E gjithë kjo është e thjeshtë, ju mund të importoni makinat virtuale aktuale dhe kontejnerët e tyre vApp me komandën import.
Do të përshkruajmë burimin vAPP dhe makinën virtuale.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
Hapi tjetër, është të ekzekutoni importin e vetive të burimeve vApp në formatin vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ku:
vApp â emri i vApp;
org â emri i organizatĂ«s;
org_vdc â emri i qendrĂ«s virtuale tĂ« tĂ« dhĂ«nave.
Importimi i vetive të burimit vAPP
Do të kryejmë importin e vetive të burimeve VM në formatin: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, në të cilin:
VM â emri i VM;
vApp â emri i vApp;
org â emri i organizatĂ«s;
orgvdc â emri i qendrĂ«s virtuale tĂ« tĂ« dhĂ«nave.
Importi u krye me sukses
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Po importimin nga ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Importi është përgatitur!
e përgatitur vcd_vapp_vm për import
vcd_vapp_vm.Zabbix: Po rifreskojmë gjendjen... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Importi ishte i suksesshëm!
Burimet e importuara shfaqen më sipër. Këto burime tani janë në
stanin tuaj të Terraform dhe nga tani e tutje do të menaxhohen nga Terraform.
Tani mund të shohim burimin e ri të importuar:
Burimi i importuar
> 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 = [
{
numri_i_busi = 0
lloji_busi = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
numri_i_njesisë = 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
}
rrjeti {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
Tani Ă«shtĂ« plotĂ«sisht gati â pĂ«rfunduam me momentin e fundit (import nĂ« infrastrukturĂ«n ekzistuese) dhe kemi shqyrtuar tĂ« gjitha aspektet kryesore tĂ« punĂ«s me Terraform.Â
Instrumenti u tregua shumë i përshtatshëm dhe lejon përshkrimin e infrastrukturës tuaj si kod, duke filluar nga makinat virtuale të një ofruesi të vetë dëshira për të shtuar një të ri, mund të shkruani ofruesin tuaj dhe ta përdorni atë.
Në këtë artikull ne do të shqyrtojmë nga çfarë përbëhet.
Burimi: habr.com
