Si të menaxhoni infrastrukturën e resë kompjuterike me Terraform

Si të menaxhoni infrastrukturën e resë kompjuterike me Terraform

Në këtë artikull ne do të shikojmë se nga çfarë përbëhet Terraform, dhe gjithashtu do të hapim gradualisht infrastrukturën tonë në cloud me VMware — do të përgatisim tre VM për qëllime të ndryshme: proxy, ruajtja e skedarëve dhe CMS.

Për gjithçka në detaje dhe në tre faza:

1. Terraform - përshkrimi, avantazhet dhe komponentët

Terraform është një mjet IaC (Infrastructure-as-Code) për ndërtimin dhe menaxhimin e infrastrukturës virtuale duke përdorur kodin.

Ne vumë re disa përparësi në punën me mjetin:

  • Shpejtësia e vendosjes së qiramarrësve të rinj (mjedise virtuale të personalizuara). Në mënyrë tipike, sa më shumë klientë të rinj të ketë, aq më shumë "klikime" duhet të bëjë stafi i ndihmës teknike për të publikuar burime të reja. Me Terraform, përdoruesit mund të ndryshojnë cilësimet e makinës virtuale (për shembull, mbyllja automatike e sistemit operativ dhe rritja e ndarjes së diskut virtual) pa kërkuar mbështetje teknike ose pa fikur vetë makinën.

  • Verifikimi i menjëhershëm i planit të aktivizimit Qiramarrës i ri. Duke përdorur përshkrimin e kodit të infrastrukturës, ne mund të kontrollojmë menjëherë se çfarë do të shtohet dhe në çfarë rendi, si dhe në çfarë gjendje përfundimtare do të jetë kjo apo ajo makinë virtuale ose rrjet virtual me lidhje me makinat virtuale.

  • Aftësia për të përshkruar platformat më të njohura të cloud. Ju mund të përdorni mjetin nga Amazon dhe Google Cloud, në platformat private të bazuara në VMware vCloud Director, duke ofruar shërbime brenda zgjidhjeve IaaS, SaaS dhe PaaS.

  • Menaxho ofrues të shumtë të reve kompjuterike dhe shpërndani infrastrukturën midis tyre për të përmirësuar tolerancën ndaj gabimeve, duke përdorur një konfigurim të vetëm për të krijuar, diagnostikuar dhe menaxhuar burimet e resë kompjuterike.

  • Përdorim i përshtatshëm për krijimin e stendave demo për testimin dhe korrigjimin e softuerit. Mund të krijoni dhe transferoni stendat për departamentin e testimit, të testoni softuerin në mjedise të ndryshme paralelisht dhe të ndryshoni dhe fshini menjëherë burimet duke krijuar vetëm një plan ndërtimi burimesh

"Terrarium" Terraform

Ne folëm shkurtimisht për avantazhet e mjetit, tani le ta ndajmë atë në përbërësit e tij

Ofruesit. 

Në Terraform, pothuajse çdo lloj infrastrukture mund të përfaqësohet si një burim. Lidhja midis burimeve dhe platformës API sigurohet nga modulet e ofruesit, të cilat ju lejojnë të krijoni burime brenda një platforme specifike, për shembull, Azure ose VMware vCloud Director.

Si pjesë e projektit, ju mund të ndërveproni me ofrues të ndryshëm në platforma të ndryshme.

Burimet (përshkrimi i burimit).

Përshkrimi i burimeve ju lejon të menaxhoni komponentët e platformës, të tilla si makinat virtuale ose rrjetet. 

Ju mund të krijoni vetë një përshkrim burimi për ofruesin e VMware vCloud Director dhe përdorni këtë përshkrim për të krijuar burime me çdo ofrues pritës që përdor vCloud Director. Ju vetëm duhet të ndryshoni parametrat e vërtetimit dhe parametrat e lidhjes së rrjetit në ofruesin e kërkuar të pritjes

Ofruesit.

Ky komponent bën të mundur kryerjen e operacioneve për instalimin fillestar dhe mirëmbajtjen e sistemit operativ pas krijimit të makinave virtuale. Pasi të keni krijuar një burim të makinës virtuale, mund të përdorni ofruesit për të konfiguruar dhe lidhur nëpërmjet SSH, për të përditësuar sistemin operativ dhe për të shkarkuar dhe ekzekutuar një skript. 

Variablat hyrëse dhe dalëse.

Variablat hyrëse - variablat hyrëse për çdo lloj blloku. 

Variablat e daljes ju 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ë bllokun Provisioners.

shtetet.

Skedarët e shteteve ruajnë informacione rreth konfigurimit të burimeve të platformës së ofruesit. Kur platforma krijohet për herë të parë, nuk ka asnjë informacion për burimet dhe para çdo operacioni, Terraform përditëson gjendjen me infrastrukturën reale të burimeve të përshkruara tashmë.

Qëllimi kryesor i shteteve është të ruajnë një sërë objektesh të burimeve të krijuara tashmë për të krahasuar konfigurimin e burimeve dhe objekteve të shtuara në mënyrë që të shmanget krijimi i përsëritur dhe ndryshimet në platformë.

Si parazgjedhje, informacioni i gjendjes ruhet në skedarin lokal terraform.tfstate, por nëse është e nevojshme, është e mundur të përdoret ruajtja në distancë për punën ekipore.

Ju gjithashtu mund të importoni burimet aktuale të platformës në gjendje për të bashkëvepruar më tej me burime të tjera që u krijuan pa ndihmën e Terraform.  

2. Krijimi i infrastrukturës

Komponentët janë renditur, tani duke përdorur Terraform do të krijojmë gradualisht një infrastrukturë me tre makina virtuale. E para me serverin proxy nginx të instaluar, e dyta me ruajtjen e skedarëve bazuar në Nextcloud dhe e treta me CMS Bitrix.

Ne do të shkruajmë kodin dhe do ta ekzekutojmë duke përdorur shembullin tonë retë në VMware vCloud Director. Përdoruesit tanë marrin një llogari me të drejtat e Administratorit të Organizatës. Nëse përdorni një llogari me të njëjtat të drejta në një re tjetër kompjuterike të VMware, mund të riprodhoni kodin nga shembujt tanë. Shkoni!

Së pari, le të krijojmë një direktori për projektin tonë të ri në të cilin do të vendosen skedarët që përshkruajnë infrastrukturën.

mkdir project01

Më pas, ne përshkruajmë komponentët e infrastrukturës. Terraform krijon marrëdhënie dhe përpunon skedarë bazuar në përshkrimin në skedarë. Vetë skedarët mund të emërtohen në bazë të qëllimit të blloqeve që përshkruhen, për shembull, network.tf - përshkruan parametrat e rrjetit për infrastrukturën.

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

Lista e dosjeve.

main.tf - përshkrimi i parametrave për mjedisin virtual - makinat virtuale, kontejnerët virtualë;

network.tf - përshkrim i parametrave të rrjetit virtual dhe rregullave NAT dhe 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 të ofruesit, sepse në këtë bllok përshkruajmë komandat që duhen ekzekutuar gjatë përgatitjes së infrastrukturës dhe ato do të ekzekutohen sipas radhës.

Struktura e bllokut.

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Për të përshkruar blloqet, përdoret gjuha e tij e programimit HCL (HashiCorp Configuration Language); është e mundur të përshkruhet infrastruktura duke përdorur JSON. Mund të mësoni më shumë rreth sintaksës lexoni në faqen e internetit të zhvilluesit.

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

Së pari, le të krijojmë dy skedarë që përshkruajnë listën e të gjitha variablave të përdorur dhe vlerat e tyre për modulin VMware vCloud Director. Së pari, le të krijojmë skedarin variables.tf.

Përmbajtja e skedarit variables.tf.

variable "vcd_org_user" {

  description = "vCD Tenant User"

}

variable "vcd_org_password" {

  description = "vCD Tenant Password"

}

variable "vcd_org" {

  description = "vCD Tenant Org"

}

variable "vcd_org_vdc" {

  description = "vCD Tenant VDC"

}

variable "vcd_org_url" {

  description = "vCD Tenant URL"

}

variable "vcd_org_max_retry_timeout" {

  default = "60"

}

variable "vcd_org_allow_unverified_ssl" {

  default = "true"

}

variable "vcd_org_edge_name" {

  description = "vCD edge name"

}

variable "vcd_org_catalog" {

  description = "vCD public catalog"

}

variable "vcd_template_os_centos7" {

  description = "OS CentOS 7"

  default = "CentOS7"

}

variable "vcd_org_ssd_sp" {

  description = "Storage Policies"

  default = "Gold Storage Policy"

}

variable "vcd_org_hdd_sp" {

  description = "Storage Policies"

  default = "Bronze Storage Policy"

}

variable "vcd_edge_local_subnet" {

  description = "Organization Network Subnet"

}

variable "vcd_edge_external_ip" {

  description = "External public IP"

}

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 ndryshueshme 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 e API-së,

  • vcd_org_edge_name — emri i ruterit virtual,

  • vcd_org_catalog — emri i drejtorisë me shabllone të makinës 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 së HDD,

  • vcd_org_ssd_sp — emri i politikës së ruajtjes SSD.

Dhe futni variablat tona:

  • 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 skedarin e dytë krijojmë dhe specifikojmë variabla për modulin VMware vCloud Director në skedarin vcd.tfvars: Le të kujtojmë se në shembullin tonë ne përdorim mCloud-et e veta re, nëse punoni me një ofrues tjetër, kontrolloni vlerat me ta. 

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 e mjedisit janë vendosur, tani ne do të konfigurojmë skemën e lidhjes së makinës virtuale - do t'i caktojmë një adresë IP private secilës makinë virtuale dhe do të përdorim Destination NAT për të "përcjellur" portet në rrjetin e jashtëm. Për të kufizuar aksesin në portet e menaxhimit, ne do të vendosim akses vetëm për adresën tonë IP.

Si të menaxhoni infrastrukturën e resë kompjuterike me TerraformDiagrami i rrjetit për platformën Terraform që po krijohet

Ne krijojmë një rrjet organizativ virtual me emrin net_lan01, portën e paracaktuar: 192.168.110.254, dhe gjithashtu me hapësirën e adresës: 192.168.110.0/24.

Ne përshkruajmë një rrjet 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"

  }

}

Le të krijojmë rregulla të murit të zjarrit që lejojnë makinat virtuale të hyjnë në internet. Brenda këtij blloku, të gjitha burimet virtuale në cloud do të kenë akses në internet:

Ne përshkruajmë rregullat për hyrjen 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]

}

Pasi kemi vendosur varësinë që pas përpunimit të bllokut vcdnetworkrouted.net, ne vazhdojmë të konfigurojmë bllokun vcdnsxvfirewallrule, со помощью varet nga. Ne e përdorim këtë opsion sepse disa varësi mund të njihen në mënyrë implicite në konfigurim.

Më pas, ne do të krijojmë rregulla që lejojnë hyrjen në portet nga rrjeti i jashtëm dhe do të tregojmë adresën tonë IP për t'u lidhur me serverët përmes SSH. Çdo përdorues i internetit ka akses në portat 80 dhe 443 në serverin e internetit dhe një përdorues me një adresë IP prej 90.1.15.1 ka akses në portat SSH të serverëve virtualë.

Lejo qasjen 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]

}

Ne krijojmë rregullat e burimit NAT për të hyrë në internet nga një rrjet lokal cloud:

Ne përshkruajmë rregullat e Burimit 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 për të përfunduar konfigurimin e bllokut të rrjetit, ne shtojmë rregullat e Destinacionit NAT për të hyrë në shërbime nga rrjeti i jashtëm:

Shtimi i rregullave të Destinacionit 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]

}

Shtoni një rregull NAT për përkthimin e portit 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]

}

Shtoni një rregull NAT për përkthimin e portit 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]

}

Shtoni një rregull NAT për përkthimin e portit 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ç kemi planifikuar në fillim të artikullit, ne do të krijojmë tre makina virtuale. Ato do të përgatiten duke përdorur "Përshtatja e mysafirëve". Ne do të vendosim parametrat e rrjetit sipas cilësimeve që kemi specifikuar dhe fjalëkalimi i përdoruesit do të gjenerohet automatikisht.

Le të përshkruajmë vApp-in në të cilin do të vendosen makinat virtuale dhe konfigurimin e tyre.

Si të menaxhoni infrastrukturën e resë kompjuterike me TerraformKonfigurimi i makinës virtuale

Le të krijojmë një kontejner vApp. Që të mund të lidhim menjëherë vApp dhe VM me rrjetin virtual, shtojmë edhe parametrin varet_on:

Krijo një enë

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

}

Le të krijojmë një makinë virtuale me një 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:

  • emri - emri i makinës virtuale,

  • vappname - emri i vApp në të cilin mund të shtohet një VM e re,

  • emri i katalogut / emri i shabllonit - emri i katalogut dhe emri i shabllonit të makinës virtuale,

  • Storageprofile - politika e paracaktuar e ruajtjes.

Parametrat e bllokut të rrjetit:

  • lloji - lloji i rrjetit të lidhur,

  • emri — me cilin rrjet virtual të lidhni VM-në,

  • është primar - përshtatës primar i rrjetit,

  • ipallocation_mode — MANUAL / DHCP / Modaliteti i shpërndarjes së adresës POOL,

  • ip - Adresa IP për makinën virtuale, ne do ta specifikojmë atë me dorë.

bllokimi i override_template_disk:

  • sizeinmb — madhësia e diskut të nisjes për makinën virtuale

  • Storage_profile — politika e ruajtjes për diskun

Le të krijojmë një VM të dytë me një përshkrim të ruajtjes 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 që është i lidhur me makinën virtuale.

Shpjegime për bllokun vcdvminternaldisk:

  • bustype - lloji i kontrolluesit të diskut

  • sizeinmb - madhësia e diskut

  • busnumber / unitnumber - vendndodhja e lidhjes në përshtatës

  • Storage_profile — politika e ruajtjes për diskun

Le të përshkruajmë VM-në më të fundit në 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 sistemit operativ dhe instalimi i skripteve shtesë

Është përgatitur rrjeti, janë përshkruar makinat virtuale. Përpara se të importojmë infrastrukturën tonë, ne mund të kryejmë sigurimin fillestar paraprakisht duke përdorur blloqet e ofruesve dhe pa përdorur Ansible.

Le të shohim se si të përditësojmë OS dhe të ekzekutojmë skriptin e instalimit CMS Bitrix duke përdorur bllokun e ofruesit.

Së pari, le të instalojmë paketat e 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ërcaktimi i komponentëve:

  • ofruesi "remote-exec" - lidhni bllokun e furnizimit në distancë

  • Në bllokun e lidhjes ne përshkruajmë llojin dhe parametrat për lidhjen:

  • lloji — protokoll, në rastin tonë SSH;

  • përdorues - emri i përdoruesit;

  • fjalëkalimi - fjalëkalimi i përdoruesit. Në rastin tonë, ne tregojmë te parametri vcdvappvm.nginx.customization[0].admin_password, i cili ruan fjalëkalimin e krijuar për përdoruesin e sistemit.

  • host - adresa IP e jashtme për lidhje;

  • port - porta për lidhje, e cila ishte specifikuar më parë në cilësimet e DNAT;

  • inline - listoni listën e komandave që do të futen. Komandat do të futen sipas radhës siç tregohet në këtë seksion.

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

Le 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 ne do të përshkruajmë menjëherë përditësimin Bitrix.

Një shembull i ofrimit 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"

]

}

}

E rëndësishme! Skripti mund të mos funksionojë nëse nuk e çaktivizoni SELinux paraprakisht! Nëse keni nevojë për një artikull të detajuar mbi instalimin dhe konfigurimin e CMS 1C-Bitrix duke përdorur bitrix-env.sh, oo mundeni përdorni artikullin tonë të blogut në faqen e internetit.

3. Inicializimi i infrastrukturës

Si të menaxhoni infrastrukturën e resë kompjuterike me TerraformInicializimi i moduleve dhe shtojcave

Për punë, ne përdorim një "komplet të zotërinjve" të thjeshtë: një laptop me Windows 10 OS dhe një çantë shpërndarjeje nga faqja zyrtare e internetit terraform.io. Le të shpaketojmë dhe inicializojmë duke përdorur komandën: terraform.exe init

Pas përshkrimit të infrastrukturës kompjuterike dhe të rrjetit, ne nisim planifikimin për të testuar konfigurimin tonë, ku mund të shohim se çfarë do të krijohet dhe si do të lidhet me njëri-tjetrin.

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

  2. Ne marrim rezultatin - Plan: 16 to add, 0 to change, 0 to destroy. Domethënë sipas këtij plani do të krijohen 16 burime.

  3. Ne nisim planin me komandë - terraform.exe apply -var-file=vcd.tfvars.

Do të krijohen makina virtuale dhe më pas paketat që kemi renditur do të ekzekutohen brenda seksionit të ofruesit - OS do të përditësohet dhe do të instalohet CMS Bitrix.

Marrja e të dhënave të lidhjes

Pas ekzekutimit të planit, ne duam të marrim të dhëna në formë teksti për t'u lidhur me serverët; për këtë, ne do të formatojmë seksionin e daljes si më poshtë:

output "nginxpassword" {

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

}

Dhe dalja e mëposhtme na tregon fjalëkalimin për makinën virtuale të krijuar:

Outputs: nginx_password = F#4u8!!N

Si rezultat, ne kemi akses në makinat virtuale me një sistem operativ të përditësuar dhe paketa të para-instaluara për punën tonë të mëtejshme. Gjithçka është gati!

Por, çka nëse tashmë keni infrastrukturë ekzistuese?

3.1. Terraform pune me infrastrukturen ekzistuese

Është e thjeshtë, ju mund të importoni makinat aktuale virtuale dhe kontejnerët e tyre vApp duke përdorur komandën e importit.

Le 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ë importoni vetitë e burimeve të vApp në format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ku:

  • vApp - emri i aplikacionit;

  • org - emri i organizatës;

  • org_vdc - emri i qendrës virtuale të të dhënave.

Si të menaxhoni infrastrukturën e resë kompjuterike me TerraformImportimi i vetive të burimit vAPP

Le të importojmë vetitë e burimeve VM në formatin: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, në të cilën:

  • VM - emri VM;

  • vApp - emri i aplikacionit;

  • org - emri i organizatës;

  • orgvdc është emri i qendrës virtuale të të dhënave.

Importi ishte i suksesshëm

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

vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import prepared!

Prepared vcd_vapp_vm for import

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

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

Tani mund të shikojmë burimin e ri të importuar:

Burim 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 jemi patjetër gati - kemi përfunduar me pikën e fundit (importimi në infrastrukturën ekzistuese) dhe kemi marrë parasysh të gjitha pikat kryesore të punës me Terraform. 

Mjeti doli të jetë shumë i përshtatshëm dhe ju lejon të përshkruani infrastrukturën tuaj si kod, duke filluar nga makinat virtuale të një ofruesi të reve deri te përshkrimi i burimeve të komponentëve të rrjetit.

Në të njëjtën kohë, pavarësia nga mjedisi bën të mundur punën me burimet lokale, cloud, madje edhe menaxhimin e platformës. Dhe nëse nuk ka asnjë platformë të mbështetur dhe dëshironi të shtoni një të re, mund të shkruani ofruesin tuaj dhe ta përdorni atë.

Burimi: www.habr.com

Shto një koment