Si të menaxhoni infrastrukturën cloud me Terraform

Si të menaxhoni infrastrukturën cloud me Terraform

NĂ« kĂ«tĂ« artikull, do tĂ« shqyrtojmĂ« pĂ«rbĂ«rĂ«sit e Terraform dhe do tĂ« krijojmĂ« hap pas hapi infrastrukturĂ«n tonĂ« nĂ« cloud me VMware — do tĂ« pĂ«rgatisim tre VM pĂ«r qĂ«llime tĂ« ndryshme: proxy, ruajtje skedarĂ«sh dhe CMS.

Të gjitha në detaje dhe në tre etapa:

1. Terraform — pĂ«rshkrimi, pĂ«rparĂ«sitĂ« dhe pĂ«rbĂ«rĂ«sit

Terraform është një mjet IaC (Infrastructure-as-Code) për ndërtimin dhe menaxhimin e infrastrukturës virtuale me anë të kodit.

Gjatë punës me këtë mjet, ne vërejtëm disa përparësi:

  • ShpejtĂ«sia e vendosjes sĂ« tenanteve tĂ« rinj (mjediset virtuale tĂ« pĂ«rdoruesve). Zakonisht, sa mĂ« shumĂ« klientĂ« tĂ« rinj, aq mĂ« shumĂ« "klikĂ«" nevojiten nga stafi i mbĂ«shtetjes teknike pĂ«r publikimin e burimeve tĂ« reja. Me Terraform, pĂ«rdoruesit mund tĂ« modifikojnĂ« parametrat e makinave virtuale (p.sh., automatikisht tĂ« ç aktivizojnĂ« OS-nĂ« dhe tĂ« rrisin ndarjen e disku virtual) pa angazhimin e mbĂ«shtetjes teknike dhe pa ç aktivizuar makinĂ«n vetĂ«.

  • Kontrolli i menjohĂ«shem tĂ« planit tĂ« aktivizimit te te rinovatit tĂ« ri. Me ndihmĂ«n e pĂ«rshkrimit tĂ« kodit tĂ« infrastrukturĂ«s, ne mund ta kontrollojmĂ« menjĂ«herĂ« se çfarĂ« dhe nĂ« cilin rend do tĂ« shtohet, si dhe nĂ« çfarĂ« gjendjeje tĂ« pĂ«rfunduar do tĂ« jetĂ« ajo ose ajo makinĂ« virtuale apo rrjet virtual me lidhje nĂ« makinat virtuale.

  • MundĂ«sia pĂ«r tĂ« pĂ«rshkruar shumicĂ«n e platformave popullore nĂ« cloud. Ju mund tĂ« pĂ«rdorni mjetin nga Amazon dhe Google Cloud, deri te platformat private tĂ« bazuara nĂ« VMware vCloud Director, tĂ« cilat ofrojnĂ« shĂ«rbime nĂ« kuadĂ«r tĂ« zgjidhjeve IaaS, SaaS dhe PaaS.

  • TĂ« menaxhoni disa ofrues tĂ« cloud dhe tĂ« shpĂ«rndani infrastrukturĂ«n mes tyre pĂ«r tĂ« rritur qĂ«ndrueshmĂ«rinĂ«, duke pĂ«rdorur njĂ« konfigurim tĂ« vetĂ«m pĂ«r krijimin, diagnostikimin dhe menaxhimin e burimeve cloud.

  • PĂ«rdorim miqĂ«sor pĂ«r krijimin e demonstracioneve pĂ«r testimin dhe zgjidhjen e softuerit. Ju mund tĂ« krijoni dhe transferoni demo pĂ«r departamentin e testimeve, tĂ« kontrolloni softuerin paralelisht nĂ« ambiente tĂ« ndryshme, si dhe tĂ« ndryshoni dhe fshini burimet menjĂ«herĂ«, duke krijuar vetĂ«m njĂ« plan ndĂ«rtimi burimesh.

"Terrarium" Terraform

Kemi folur shkurtimisht për avantazhet e mjetit, tani do të shqyrtojmë përbërësit e tij

Ofruesit (providers). 

Në Terraform, pothuajse çdo lloj infrastrukture mund të paraqitet si një burim. Lidhja ndërmjet burimeve dhe platformës API sigurohet nga modulet e ofruesve, të cilat lejojnë krijimin e burimeve në një platformë të caktuar, si për shembull, Azure ose VMware vCloud Director.

Brenda projektit mund të ndërveproni me ofrues të ndryshëm në platforma të ndryshme.

Burimet (përshkrimi i burimeve).

Përshkrimi i burimeve lejon menaxhimin e componenteve të platformës, si për shembull, makinave virtuale ose rrjeteve. 

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 autentikimit dhe parametrat e lidhjes në rrjet me ofruesin e hostit të nevojshëm.

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. Pasi të keni krijuar burimin e makinës virtuale, me ndihmën e provisioners mund të konfiguroheni dhe lidheni përmes SSH, të bëni azhurnimin e sistemit operativ, si dhe të ngarkoni dhe ekzekutoni një skenar. 

Variablat Input dhe Output.

Variablat Input — variablat hyrĂ«se pĂ«r çdo lloj bloku. 

Variablat Output lejojnë të ruani vlerat pas krijimit të burimeve dhe mund të përdoren si variabla hyrëse në module të tjera, për shembull në blokun Provisioners.

Shtetet (States).

Skedarët e Shteteve ruajnë informacion mbi konfigurimin e burimeve të platformës së ofruesit. Gjatë krijimit të parë të platformës nuk ka asnjë informacion mbi burimet dhe para çdo operacioni Terraform azhurnon gjendjen me infrastrukturën reale të burimeve tashmë të përshkruara.

Qëllimi kryesor i shteteve është ruajtja e lidhjeve të objekteve të burimeve të krijuara tashmë për të krahasuar konfigurimin e burimeve të shtuar dhe objekteve, në mënyrë që të shmanget krijimi dhe ndryshimi i përsëritur të platformës.

Informacioni mbi statusin e parazgjedhur ruhet në skedarin lokal terraform.tfstate, por nëse është e nevojshme, ka mundësinë të përdorim ruajtjen e largët për punë në ekip.

Gjithashtu, mund të importoni burimet aktuale të platformës në gjendje, në mënyrë që të mund të ndërveproni me burime të tjera, të cilat nga ana e tyre janë krijuar pa ndihmën e Terraform.  

2. Krijimi i infrastrukturës

Kompontët janë shpjeguar, tani me ndihmën e Terraform do të krijojmë infrastrukturën në disa hapa me tre makina virtuale. E para me një server proxy nginx të instaluar, e dyta me një ruajtje skedari në bazë të Nextcloud dhe e treta me CMS Bitrix.

Do të shkruajmë kodin dhe do ta ekzekutojmë atë me shembujin e shkëmbit tonë në VMware vCloud Director. Përdoruesit tanë marrin një llogari me të drejtat Organization Administrator, nëse përdorni një llogari me të njëjtat të drejta në një re tjetër VMware, atëherë do të mund të riprodhoni kodin nga shembujt tanë. Le të fillojmë!

Së pari do të krijojmë për projektin tonë një direktori, në të cilën do të vendosen skedarët me përshkrimin e infrastrukturës.

mkdir project01

MĂ« pas do tĂ« pĂ«rshkruajmĂ« komponentĂ«t e infrastrukturĂ«s. Terraform krijon lidhje dhe pĂ«rpunon skedarĂ«t bazuar nĂ« pĂ«rshkrimin qĂ« ndodhet nĂ« skedarĂ«. VetĂ« skedarĂ«t mund tĂ« emĂ«rtohen sipas qĂ«llimit tĂ« blloqeve qĂ« pĂ«rshkruhen, pĂ«r shembull, network.tf — pĂ«rshkruan parametrat rrjetorĂ« pĂ«r infrastrukturĂ«n.

Për të përshkruar komponentët e infrastrukturës tonë, ne krijuam skedarët e mëposhtëm:

Lista e skedarëve.

main.tf — pĂ«rshkrimi i parametrave pĂ«r mjedisin virtual — makinat virtuale, kontenierĂ«t virtualĂ«;

network.tf — pĂ«rshkrimi i parametrave tĂ« rrjetit virtual dhe rregullave pĂ«r NAT, Firewall;

variables.tf — lista e variablave qĂ« pĂ«rdorim;

vcd.tfvars — vlerat e variablave pĂ«r projektin nĂ« modulin VMware vCloud Director.

Gjuha e konfigurimit në Terraform është deklarative dhe rendi i blloqeve nuk ka rëndësi, përveç bllokëve provisioner, pasi në këtë bllok ne përshkruajmë komandat për t'u ekzekutuar gjatë përgatitjes së infrastrukturës dhe ato do të ekzekutohen në rend.

Struktura e blloqeve.

"" "" {

# Block body

= # Argument

}

Për përshkrimin e blloqeve përdoret një gjuhë programimi e njohur HCL (HashiCorp Configuration Language), gjithashtu mund të përshkruhet infrastruktura edhe me JSON. Më shumë rreth sintaksës mund të lexoni në faqen e zhvilluesit.

Konfigurimi i variablit të mjedisit, variables.tf dhe vcd.tfvars

Së pari do të krijojmë dy skedarë, të cilët përshkruajnë listën e të gjithë variablave të përdorur dhe vlerave të tyre për modulin VMware vCloud Director. E para do të krijojmë skedarin variables.tf.

Përmbajtja e skedarit variables.tf.

variable "vcd_org_user" {

  description = "Përdoruesi i Tenant-eve vCD"

}

variable "vcd_org_password" {

  description = "Fjalëkalimi i Tenant-eve vCD"

}

variable "vcd_org" {

  description = "Organizata e Tenant-eve vCD"

}

variable "vcd_org_vdc" {

  description = "VDC i Tenant-eve vCD"

}

variable "vcd_org_url" {

  description = "URL e Tenant-eve vCD"

}

variable "vcd_org_max_retry_timeout" {

  default = "60"

}

variable "vcd_org_allow_unverified_ssl" {

  default = "true"

}

variable "vcd_org_edge_name" {

  description = "Emri i skajit vCD"

}

variable "vcd_org_catalog" {

  description = "Katalogu publik vCD"

}

variable "vcd_template_os_centos7" {

  description = "OS CentOS 7"

  default = "CentOS7"

}

variable "vcd_org_ssd_sp" {

  description = "Politikat e Ruajtjes"

  default = "Politika e Ruajtjes Gold"

}

variable "vcd_org_hdd_sp" {

  description = "Politikat e Ruajtjes"

  default = "Politika e Ruajtjes Bronze"

}

variable "vcd_edge_local_subnet" {

  description = "Subneti i Rrjetit të Organizatat"

}

variable "vcd_edge_external_ip" {

  description = "IP e jashtme publike"

}

variable "vcd_edge_local_ip_nginx" {}

variable "vcd_edge_local_ip_bitrix" {}

variable "vcd_edge_local_ip_nextcloud" {}

variable "vcd_edge_external_network" {}

Vlerat e variablave që marrim nga ofruesi.

  • vcd_org_user — emri i pĂ«rdoruesit me tĂ« drejtat Administrator Organzizate,

  • 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Ă« modele tĂ« makinave virtuale,

  • vcd_edge_external_ip — adresa IP publike,

  • vcd_edge_external_network — emri i rrjetit tĂ« jashtĂ«m,

  • vcd_org_hdd_sp — emri i politikĂ«s sĂ« ruajtjes pĂ«r HDD,

  • vcd_org_ssd_sp — emri i politikĂ«s sĂ« ruajtjes pĂ«r SSD.

Dhe futim 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.

Në skedarin e dytë krijojmë dhe përcaktojmë variablat për modulin VMware vCloud Director në skedarin vcd.tfvars: Të kujtojmë se në shembullin tonë përdorim rete të vetëmenaxhuara 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 = "Gold Storage Policy"

vcd_org_hdd_sp = "Bronze Storage Policy"

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 ambient janĂ« vendosur, tani do tĂ« configuremi skemĂ«n e lidhjes sĂ« makinerive virtuale — do t'i caktojmĂ« çdo makine virtuale njĂ« adresĂ« IP private dhe me NAT-in e Destinacionit do tĂ« 'shkallojmĂ«' portet nĂ« rrjetin e jashtĂ«m. PĂ«r tĂ« kufizuar aksesin nĂ« portet e menaxhimit, do tĂ« vendosim akses vetĂ«m pĂ«r adresĂ«n tonĂ« IP.

Si të menaxhoni infrastrukturën cloud me TerraformSkena e rrjetit për platformën Terraform të krijuar

Krijojmë një rrjet organizativ virtual me emrin net_lan01, me portën e përparme: 192.168.110.254, si dhe me hapësirën adresore: 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-in që lejon makineritë virtuale të kenë akses 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 = "Qaccess në Internet"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

Pas vendosjes së varësisë, që pas procesimit të bllokut vcdnetworkrouted.net, ne vazhdojmë me konfigurimin e bllokut vcdnsxvfirewallrule, përmes dependson. Përdorim këtë mundësi, pasi disa varësi mund të njihen implicit në konfigurim.

MĂ« pas, do tĂ« krijojmĂ« rregulla qĂ« lejojnĂ« aksesin nĂ« porte nga rrjeta e jashtme dhe pĂ«rcaktojmĂ« adresĂ«n tonĂ« IP pĂ«r t'u lidhur pĂ«rmes SSH me serverat. Çdo pĂ«rdorues i rrjetit tĂ« internetit 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Ă« serverave virtualĂ«.

Lejojmë aksesin në porte nga rrjeta e jashtme.

resource "vcd_nsxv_firewall_rule" "fwnatports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "Akses HTTPs"

  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 = "Akses Admin"

  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 akses në rrjetin Internet nga rrjeta lokale cloud:

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 rrjet, shtojmë rregullat Destination NAT për qasje në shërbimet nga rrjeti i jashtëm:

Shtojmë rregullat 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"

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
network_type = "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]

}

Shtojmë një rregull NAT për translacionin e portave në serverin SSH nën Nginx.

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "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]

}

Shtojmë një rregull NAT për translacionin e portave në serverin SSH me 1C-Bitrix.

resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "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]

}

Shtojmë një rregull NAT për translacionin e portave në serverin SSH me Nextcloud.

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "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]

}

Konfigurimi i mjedisit virtual main.tf

Siç e planifikuam në fillim të artikullit, do të krijojmë tre makina virtuale. Ato do të përgatiten me "Guest Customization". Parametrat e rrjetit do të vendosen sipas configureve tona të dhëna, ndërsa fjalëkalimi për përdoruesin krijohet automatikisht.

Përshkruajmë vApp ku 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. Për të qenë në gjendje të lidhim menjëherë vApp dhe VM në rrjetin virtual, gjithashtu shtojmë parametrin depends_on:

Krijo kontejner

resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]

}

Do të krijojmë një makinë virtuale me përshkrim

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

}

}

Parametrat kryesorë në përshkrimin e VM:

  • name — emri i makinĂ«s virtuale,

  • vappname — emri i vApp nĂ« tĂ« cilin do tĂ« shtohet VM e re,

  • catalogname / templatename — emri i katalogut dhe emri i shabllonit tĂ« makinĂ«s virtuale,

  • storageprofile — politika e ruajtjes sipas parazgjedhjes.

Parametrat e bllokut të rrjetit:

  • type — tipi i rrjetit qĂ« lidhet,

  • name — nĂ« cilin rrjet virtual do tĂ« lidhet VM,

  • isprimary — adaptori kryesor i rrjetit,

  • ipallocation_mode — mĂ«nyra e ndarjes sĂ« adresĂ«s MANUAL / DHCP / POOL,

  • ip — Adresa IP pĂ«r mjedisin virtual, do ta caktojmĂ« manualisht.

Blloku override_template_disk:

  • sizeinmb — madhĂ«sia e boot-disqeve pĂ«r mjedisin virtual

  • storage_profile — politika e ruajtjes pĂ«r disqin

Le të krijojmë një VM të dytë me përshkrimin e hapësirës së skedarëve Nextcloud

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 ]

}

Në seksionin vcdvminternal_disk do të përshkruajmë një disk të ri virtual, i cili lidhet me mjedisin virtual.

Shpjegime për bllokun vcdvminternaldisk:

  • bustype — lloji i kontrollorit tĂ« disqeve

  • sizeinmb — madhĂ«sia e diskut

  • busnumber / unitnumber — vendi i lidhjes nĂ« adaptues

  • storage_profile — politika e ruajtjes pĂ«r disqin

Do të përshkruajmë VM-në e fundit për Bitrix

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

}

}

Përditësimi i OS-së dhe instalimi i skripteve shtesë

Rrjeti është përgatitur, mjediset virtuale janë përshkruar. Para importimit të infrastrukturës sonë, ne mund të kryejmë paraprakisht provizionimin fillestar me blloqet provisioners pa përdorur Ansible.

Le të shohim se si të përditësojmë OS-në dhe të nisnim skriptin e instalimit të CMS Bitrix me ndihmën e bllokut provisioner.

Së pari do të bëjmë instalimin e paketave të përditësimit 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" ]

}

}

}

Përshkrimi i përbërësve:

  • provisioner «remote-exec» — lidhim bllokun e «provizionimit» tĂ« largĂ«t

  • NĂ« bllokun connection pĂ«rshkruajmĂ« llojin dhe parametrat pĂ«r lidhjen:

  • type — protokolli, nĂ« rastin tonĂ« SSH;

  • user — emri i pĂ«rdoruesit;

  • password — fjalĂ«kalimi i pĂ«rdoruesit. NĂ« rastin tonĂ«, e cila tregon parametrin vcdvappvm.nginx.customization[0].admin_password, i cili ruan fjalĂ«kalimin e gjeneruar tĂ« pĂ«rdoruesit tĂ« sistemit.

  • host — adresa IP e jashtme pĂ«r lidhjen;

  • port — porta pĂ«r lidhjen, e cila u pĂ«rmend mĂ« parĂ« nĂ« cilĂ«simet DNAT;

  • inline — listojmĂ« listĂ«n e komandave qĂ« do tĂ« futen. Komandat do tĂ« futen nĂ« rendin e shĂ«nuar nĂ« kĂ«tĂ« seksion.

Si shembull, do të ekzekutojmë gjithashtu skriptin për instalimin e 1C-Bitrix. Rezultati i ekzekutimit të skriptit do të jetë i disponueshëm gjatë zbatimit të planit. Për të instaluar skriptin, së pari do të përshkruajmë bllokun:

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ë azhurnimin 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"

]

}

}

ËshtĂ« e rĂ«ndĂ«sishme! Skripti mund tĂ« mos funksionojĂ« nĂ«se nuk çaktivizoni mĂ« parĂ« SELinux! NĂ«se ju nevojitet njĂ« artikull i detajuar pĂ«r instalimin dhe konfigurimin e CMS 1C-Bitrix me ndihmĂ«n e bitrix-env.sh, mund tĂ« shfrytĂ«zoni artikullin tonĂ« nĂ« blogun nĂ« faqen tonĂ«.

3. Inizializimi i infrastrukturës

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

PĂ«r punĂ« ne pĂ«rdorim njĂ« “set tĂ« thjeshtĂ«â€: njĂ« laptop me sistemin operativ Windows 10 dhe njĂ« shpĂ«rndarje nga faqja zyrtare terraform.io. E shpĂ«rndajmĂ« dhe e iniciojmĂ« me 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 të shohim se çfarë do të krijohet dhe si lidhin mes vete.

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

  2. Marrim rezultatin - Plani: 16 për t'u shtuar, 0 për t'u ndryshuar, 0 për t'u shkatërruar. Kështu që, sipas këtij plani do të krijohen 16 burime.

  3. Nisim planin me një komandë - terraform.exe apliko -var-file=vcd.tfvars.

Makinat virtuale do tĂ« krijohen, dhe pastaj do tĂ« ekzekutohen paketat e listuara nga ne nĂ« seksionin provisioner — sistemi operativ do tĂ« pĂ«rditĂ«sohet dhe CMS Bitrix do tĂ« instalohet.

Marrja e të dhënave për lidhje

Pasi të realizohet plani, dëshirojmë të marrim në formë tekstuale të dhënat për lidhjen me serverët, prandaj do ta formulojmë seksionin output ashtu si më poshtë:

output "nginxpassword" {

 value = vcdvappvm.nginx.customization[0].adminpassword

}

Dhe ky output na informon për fjalëkalimin e makinë së krijuar virtuale:

Outputs: nginx_password = F#4u8!!N

Kështu, ne fitojmë akses në makinat virtuale me sistemin e operativ të përditësuar dhe paketat e parainstaluara për punën tonë të ardhshme. E gjithë është gati!

Por çfarë nëse ju tashmë keni një infrastrukturë ekzistuese?

3.1. Puna e Terraform me infrastrukturën ekzistuese

ËshtĂ« e thjeshtĂ«, ju mund tĂ« importoni makinat virtuale aktuale dhe kontainerĂ«t e tyre vApp me komandĂ«n import.

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 i ardhshëm është të importoni pronat e burimeve vApp në formatin vcdvapp. .., 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 pronave të burimit vAPP

Të importojmë pronat e burimeve VM në formatin: vcdvappvm. ..., 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.

Importimi u krye me sukses

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Duke importuar nga ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Importi është përgatitur!

Përgatit vcd_vapp_vm për import

vcd_vapp_vm.Zabbix: Rinovimi i gjendjes... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Importimi u suksesshëm!

Burimet që u importuan janë të paraqitura më lart. Këto burime tani janë në
statin tuaj Terraform dhe do të menaxhohen nga Terraform nga këtu e tutje.

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 = [

{

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"

}

}

Tani tani Ă«shtĂ« gati — kemi pĂ«rfunduar me momentin e fundit (importimi nĂ« infrastrukturĂ«n ekzistuese) dhe kemi shqyrtuar tĂ« gjithĂ« pikat kryesore tĂ« funksionimit me Terraform. 

Mjeti doli shumë i dobishëm dhe lejon të përshkruash infrastrukturën tënde si kod, duke filluar nga makinash virtuale të një ofruesi cloud deri te përshkrimi i burimeve të komponentëve rrjetë.

Pavarësia nga mjedisi ofron mundësinë për të punuar me burimet lokale dhe ato në re, përfshirë menaxhimin e platformës. Nëse nuk ka një platformë të mbështetur dhe dëshira për të shtuar një të re, mund të shkruani ofruesin tuaj dhe ta përdorni atë.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster