Si të menaxhoni infrastrukturën cloud me Terraform

Si të menaxhoni infrastrukturën cloud me Terraform

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ë. në re me VMware. 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ë të qendrës sonë në VMware vCloud Director.. 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ë lexoni në faqen e zhvilluesit.

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 cloud-in tonin mClouds, 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.

Si të menaxhoni infrastrukturën cloud me TerraformSkema 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.

Si të menaxhoni infrastrukturën cloud me TerraformKonfigurimi 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Ă« shfrytĂ«zoni artikullin tonĂ« nĂ« blogun nĂ« faqen e internetit.

3. Inizializimi i infrastrukturës

Si të menaxhoni infrastrukturën cloud me TerraformInizializimi i moduleve dhe shtesave

Për punë përdorim një 'set gentleman': një laptop me OS Windows 10 dhe një distribucion nga faqja zyrtare terraform.io. 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.

  1. Ekzekutojmë komandën - terraform plan -var-file=vcd.tfvars.

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

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

Si të menaxhoni infrastrukturën cloud me TerraformImportimi 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

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster