Kako upravljati infrastrukturom u oblaku pomoću Terraforma

Kako upravljati infrastrukturom u oblaku pomoću Terraforma

U ovom članku ćemo pogledati od čega se sastoji Terraform, a također ćemo postepeno pokrenuti vlastitu infrastrukturu u oblaku sa VMware-om — pripremićemo tri VM-a za različite namene: proxy, skladište datoteka i CMS.

O svemu detaljno iu tri faze:

1. Terraform - opis, prednosti i komponente

Terraform je IaC (Infrastructure-as-Code) alat za izgradnju i upravljanje virtuelnom infrastrukturom pomoću koda.

Zabilježili smo nekoliko prednosti u radu s alatom:

  • Brzina implementacije novih zakupaca (prilagođena virtuelna okruženja). Tipično, što je više novih klijenata, to više „klikova“ osoblje tehničke podrške treba da napravi da bi objavilo nove resurse. Uz Terraform, korisnici mogu promijeniti postavke virtualne mašine (na primjer, automatsko gašenje OS-a i povećanje particije virtualnog diska) bez potrebe za tehničkom podrškom ili gašenja samog stroja.

  • Trenutna verifikacija aktivacionog plana novi Tennant. Koristeći opis infrastrukturnog koda, možemo odmah provjeriti šta će biti dodato i kojim redoslijedom, kao i u kakvom će konačnom stanju biti ova ili ona virtuelna mašina ili virtuelna mreža sa konekcijama na virtuelne mašine.

  • Sposobnost opisivanja najpopularnijih cloud platformi. Možete koristiti alat od Amazona i Google Clouda, do privatnih platformi baziranih na VMware vCloud Director, nudeći usluge unutar IaaS, SaaS i PaaS rješenja.

  • Upravljajte višestrukim provajderima u oblaku i distribuiraju infrastrukturu između njih kako bi se poboljšala tolerancija grešaka, koristeći jednu konfiguraciju za kreiranje, dijagnostiku i upravljanje resursima u oblaku.

  • Praktična upotreba za izradu demo stalka za testiranje softvera i otklanjanje grešaka. Možete kreirati i prenositi štandove za odjel za testiranje, paralelno testirati softver u različitim okruženjima i trenutno mijenjati i brisati resurse kreiranjem samo jednog plana izgradnje resursa

"Terrarium" Terraform

Ukratko smo razgovarali o prednostima alata, a sada ga razdvojimo na njegove komponente

Provajderi. 

U Terraformu, gotovo svaka vrsta infrastrukture može biti predstavljena kao resurs. Vezu između resursa i API platforme pružaju moduli dobavljača, koji vam omogućavaju da kreirate resurse unutar određene platforme, na primjer, Azure ili VMware vCloud Director.

Kao dio projekta, možete komunicirati s različitim provajderima na različitim platformama.

Resursi (opis resursa).

Opis resursa vam omogućava da upravljate komponentama platforme, kao što su virtuelne mašine ili mreže. 

Možete sami kreirati opis resursa za dobavljača VMware vCloud Director i koristiti ovaj opis za kreiranje resursa kod bilo kojeg hosting provajdera koji koristi vCloud Director. Potrebno je samo promijeniti parametre provjere autentičnosti i parametre mrežne veze na potrebnog hosting provajdera

Provisioners.

Ova komponenta omogućava izvođenje operacija za početnu instalaciju i održavanje operativnog sistema nakon kreiranja virtuelnih mašina. Nakon što kreirate resurs virtuelne mašine, možete koristiti provajdere za konfigurisanje i povezivanje putem SSH-a, ažuriranje operativnog sistema i preuzimanje i pokretanje skripte. 

Ulazne i Izlazne varijable.

Ulazne varijable - ulazne varijable za sve tipove blokova. 

Izlazne varijable vam omogućavaju da sačuvate vrijednosti nakon kreiranja resursa i mogu se koristiti kao ulazne varijable u drugim modulima, na primjer u bloku Provisioners.

države.

Datoteke stanja pohranjuju informacije o konfiguraciji resursa platforme dobavljača. Kada se platforma prvi put kreira, nema informacija o resursima i prije bilo kakve operacije, Terraform ažurira stanje sa stvarnom infrastrukturom već opisanih resursa.

Glavna svrha stanja je spremanje gomile objekata već kreiranih resursa kako bi se uporedila konfiguracija dodatih resursa i objekata kako bi se izbjeglo ponovno kreiranje i promjene na platformi.

Podrazumevano, informacije o stanju se pohranjuju u lokalnu datoteku terraform.tfstate, ali ako je potrebno, moguće je koristiti udaljeno skladište za timski rad.

Također možete uvesti trenutne resurse platforme u stanje radi dalje interakcije s drugim resursima koji su zauzvrat kreirani bez pomoći Terraforma.  

2. Stvaranje infrastrukture

Komponente su sređene, sada ćemo koristeći Terraform postepeno kreirati infrastrukturu sa tri virtuelne mašine. Prvi sa instaliranim nginx proxy serverom, drugi sa pohranom datoteka na Nextcloudu i treći sa CMS Bitrixom.

Napisat ćemo kod i izvršiti ga koristeći naš primjer oblaka na VMware vCloud Director. Naši korisnici dobijaju nalog sa pravima administratora organizacije.Ako koristite nalog sa istim pravima u drugom VMware oblaku, možete reproducirati kod iz naših primera. Idi!

Prvo, napravimo direktorij za naš novi projekat u koji će biti smješteni fajlovi koji opisuju infrastrukturu.

mkdir project01

Zatim opisujemo komponente infrastrukture. Terraform kreira odnose i obrađuje datoteke na osnovu opisa u datotekama. Sami fajlovi se mogu imenovati na osnovu svrhe blokova koji se opisuju, na primer network.tf - opisuje mrežne parametre za infrastrukturu.

Da bismo opisali komponente naše infrastrukture, kreirali smo sljedeće datoteke:

Lista fajlova.

main.tf - opis parametara za virtuelno okruženje - virtuelne mašine, virtuelni kontejneri;

network.tf - opis parametara virtuelne mreže i NAT i Firewall pravila;

varijabli.tf - lista varijabli koje koristimo;

vcd.tfvars - vrijednosti varijabli projekta za modul VMware vCloud Director.

Jezik konfiguracije u Terraformu je deklarativni i poredak blokova nije bitan, osim blokova za proviziju, jer u ovom bloku opisujemo komande koje treba izvršiti prilikom pripreme infrastrukture i one će se izvršavati po redu.

Blok struktura.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Za opisivanje blokova koristi se vlastiti programski jezik HCL (HashiCorp Configuration Language), a infrastrukturu je moguće opisati koristeći JSON. Možete saznati više o sintaksi pročitajte na web stranici programera.

Konfiguracija varijable okruženja, varijable.tf i vcd.tfvars

Prvo, napravimo dvije datoteke koje opisuju listu svih korištenih varijabli i njihovih vrijednosti za VMware vCloud Director modul. Prvo, napravimo datoteku varijabli.tf.

Sadržaj datoteke varijabli.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" {}

Varijabilne vrijednosti koje dobijamo od provajdera.

  • vcd_org_user — korisničko ime sa pravima administratora organizacije,

  • vcd_org_password — korisnička lozinka,

  • vcd_org — naziv organizacije,

  • vcd_org_vdc — naziv virtuelnog data centra,

  • vcd_org_url - API URL,

  • vcd_org_edge_name — naziv virtuelnog rutera,

  • vcd_org_catalog — naziv direktorija sa predlošcima virtuelne mašine,

  • vcd_edge_external_ip — javna IP adresa,

  • vcd_edge_external_network — naziv eksterne mreže,

  • vcd_org_hdd_sp — naziv politike pohrane HDD-a,

  • vcd_org_ssd_sp — naziv politike SSD memorije.

I unesite naše varijable:

  • vcd_edge_local_ip_nginx — IP adresa virtuelne mašine sa NGINX,

  • vcd_edge_local_ip_bitrix - IP adresa virtuelne mašine sa 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP adresa virtuelne mašine sa Nextcloud-om.

Sa drugom datotekom kreiramo i specificiramo varijable za VMware vCloud Director modul u datoteci vcd.tfvars: Podsjetimo se da u našem primjeru koristimo vlastiti oblak mClouds, ako radite s drugim provajderom, provjerite vrijednosti kod njih. 

Sadržaj datoteke 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"

Mrežna konfiguracija, network.tf.

Varijable okruženja su postavljene, sada ćemo postaviti šemu povezivanja virtuelne mašine - dodelićemo privatnu IP adresu svakoj virtuelnoj mašini i koristiti odredišni NAT da „proslijedimo“ portove na vanjsku mrežu. Da bismo ograničili pristup portovima za upravljanje, podesit ćemo pristup samo za našu IP adresu.

Kako upravljati infrastrukturom u oblaku pomoću TerraformaMrežni dijagram za platformu Terraform koja se kreira

Kreiramo virtuelnu organizacionu mrežu sa imenom net_lan01, podrazumevani gateway: 192.168.110.254, kao i sa adresnim prostorom: 192.168.110.0/24.

Opisujemo virtuelnu mrežu.

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"

  }

}

Hajde da napravimo pravila zaštitnog zida koja omogućavaju virtuelnim mašinama pristup Internetu. U okviru ovog bloka svi virtuelni resursi u oblaku će imati pristup internetu:

Opisujemo pravila za VM pristup Internetu.

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]

}

Nakon što smo uspostavili ovisnost da nakon obrade bloka vcdnetworkrouted.net nastavljamo s konfiguracijom bloka vcdnsxvfirewallrule, s pomoću zavisi od. Koristimo ovu opciju jer se neke zavisnosti mogu implicitno prepoznati u konfiguraciji.

Zatim ćemo kreirati pravila koja dozvoljavaju pristup portovima sa vanjske mreže i naznačiti našu IP adresu za povezivanje preko SSH-a na servere. Svaki korisnik Interneta ima pristup portovima 80 i 443 na web serveru, a korisnik sa IP adresom 90.1.15.1 ima pristup SSH portovima virtuelnih servera.

Dozvolite pristup portovima sa vanjske mreže.

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]

}

Kreiramo izvorna NAT pravila za pristup internetu sa lokalne mreže u oblaku:

Opisujemo izvorna NAT pravila.

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]

}

Da bismo dovršili konfiguraciju mrežnog bloka, dodajemo odredišna NAT pravila za pristup uslugama s vanjske mreže:

Dodavanje odredišnih NAT pravila.

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]

}

Dodajte NAT pravilo za prijevod porta na SSH server pod Nginxom.

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]

}

Dodajte NAT pravilo za prevođenje portova na SSH server sa 1C-Bitrixom.

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]

}

Dodajte NAT pravilo za prijevod porta na SSH server pomoću Nextclouda.

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]

}

Main.tf konfiguracija virtuelnog okruženja

Kao što smo planirali na početku članka, napravićemo tri virtuelne mašine. Oni će biti pripremljeni pomoću "Guest Customization". Mrežne parametre ćemo postaviti prema postavkama koje smo naveli, a korisnička lozinka će biti generirana automatski.

Hajde da opišemo vApp u kojem će se nalaziti virtuelne mašine i njihovu konfiguraciju.

Kako upravljati infrastrukturom u oblaku pomoću TerraformaKonfiguracija virtuelne mašine

Kreirajmo vApp kontejner. Kako bismo odmah mogli povezati vApp i VM na virtuelnu mrežu, dodajemo i parametar depend_on:

Kreirajte kontejner

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

}

Kreirajmo virtuelnu mašinu sa opisom

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

}

}

Glavni parametri u opisu VM-a:

  • ime — naziv virtuelne mašine,

  • vappname - naziv vApp-a u koji treba dodati novi VM,

  • catalogname / templatename - ime kataloga i naziv šablona virtuelne mašine,

  • storageprofile - podrazumevana politika skladištenja.

Parametri mrežnog bloka:

  • tip — vrsta povezane mreže,

  • ime — na koju virtuelnu mrežu povezati VM,

  • isprimary - primarni mrežni adapter,

  • ipallocation_mode — RUČNI / DHCP / POOL način dodjeljivanja adresa,

  • ip — IP adresa za virtuelnu mašinu, odredićemo je ručno.

override_template_disk blok:

  • sizeinmb — veličina diska za pokretanje virtuelne mašine

  • storage_profile — politika skladištenja za disk

Kreirajmo drugi VM sa opisom skladišta datoteka 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 ]

}

U odjeljku vcdvminternal_disk opisaćemo novi virtuelni disk koji je povezan sa virtuelnom mašinom.

Objašnjenja za blok vcdvminternaldisk:

  • bustype - tip kontrolera diska

  • sizeinmb — veličina diska

  • busnumber / unitnumber - lokacija priključka u adapteru

  • storage_profile — politika skladištenja za disk

Hajde da opišemo najnoviji VM na Bitrixu

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

}

}

Ažuriranje OS-a i instaliranje dodatnih skripti

Mreža je pripremljena, virtuelne mašine su opisane. Prije uvoza naše infrastrukture, možemo unaprijed izvršiti početno obezbjeđivanje korištenjem blokova za proviziju i bez korištenja Ansiblea.

Pogledajmo kako ažurirati OS i pokrenuti instalacijsku skriptu CMS Bitrixa koristeći blok za proviziju.

Prvo, instalirajmo CentOS pakete za ažuriranje.

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

}

}

}

Oznaka komponenti:

  • provider “remote-exec” - povežite daljinski blok za proviziju

  • U bloku povezivanja opisujemo tip i parametre za vezu:

  • tip — protokol, u našem slučaju SSH;

  • korisnik — korisničko ime;

  • lozinka — korisnička lozinka. U našem slučaju, ukazujemo na parametar vcdvappvm.nginx.customization[0].admin_password, koji pohranjuje generiranu lozinku za korisnika sistema.

  • host — eksterna IP adresa za povezivanje;

  • port — port za konekciju, koji je prethodno bio naveden u postavkama DNAT-a;

  • inline - navedite listu naredbi koje će biti unesene. Naredbe će biti unesene redoslijedom kako je navedeno u ovom odjeljku.

Kao primjer, dodatno izvršimo instalacijsku skriptu 1C-Bitrix. Izlaz rezultata izvršenja skripte bit će dostupan dok je plan pokrenut. Da biste instalirali skriptu, prvo opisujemo blok:

Hajde da opišemo instalaciju 1C-Bitrixa.

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"

]

}

I odmah ćemo opisati ažuriranje Bitrixa.

Primjer opskrbe 1C-Bitrixom.

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"

]

}

}

Bitan! Skripta možda neće raditi ako ne onemogućite SELinux unaprijed! Ako vam je potreban detaljan članak o instalaciji i konfiguraciji CMS 1C-Bitrix pomoću bitrix-env.sh, oo možete koristite naš blog članak na web stranici.

3. Inicijalizacija infrastrukture

Kako upravljati infrastrukturom u oblaku pomoću TerraformaInicijalizacija modula i dodataka

Za posao koristimo jednostavan "džentlmenski komplet": laptop sa Windows 10 OS i distributivnim kompletom sa službene web stranice terraform.io. Raspakirajmo i inicijalizirajmo koristeći naredbu: terraform.exe init

Nakon što opišemo računarsku i mrežnu infrastrukturu, pokrećemo planiranje testiranja naše konfiguracije, gdje možemo vidjeti šta će biti kreirano i kako će se međusobno povezati.

  1. Izvršite naredbu - terraform plan -var-file=vcd.tfvars.

  2. Dobijamo rezultat - Plan: 16 to add, 0 to change, 0 to destroy. Odnosno, prema ovom planu biće stvoreno 16 resursa.

  3. Pokrećemo plan na komandu - terraform.exe apply -var-file=vcd.tfvars.

Virtuelne mašine će biti kreirane, a zatim će se paketi koje smo naveli pokrenuti u okviru provajdera - OS će biti ažuriran i CMS Bitrix će biti instaliran.

Primanje informacija o vezi

Nakon izvršenja plana želimo primiti podatke u tekstualnom obliku za povezivanje sa serverima; za to ćemo formatirati izlaznu sekciju na sljedeći način:

output "nginxpassword" {

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

}

I sljedeći izlaz nam govori lozinku za kreiranu virtuelnu mašinu:

Outputs: nginx_password = F#4u8!!N

Kao rezultat, dobijamo pristup virtuelnim mašinama sa ažuriranim operativnim sistemom i unapred instaliranim paketima za naš dalji rad. Sve je spremno!

Ali šta ako već imate postojeću infrastrukturu?

3.1. Radna Terraforma sa postojećom infrastrukturom

Jednostavno je, možete uvesti trenutne virtuelne mašine i njihove vApp kontejnere koristeći komandu import.

Hajde da opišemo vAPP resurs i virtuelnu mašinu.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Sljedeći korak je uvoz svojstava vApp resursa u formatu vcdvapp.<vApp> <org>.<orgvdc>.<vApp>gdje:

  • vApp - naziv vApp;

  • org — naziv organizacije;

  • org_vdc — naziv virtuelnog data centra.

Kako upravljati infrastrukturom u oblaku pomoću TerraformaUvoz svojstava vAPP resursa

Uvezimo svojstva VM resursa u formatu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, u kojem:

  • VM - naziv VM;

  • vApp - naziv vApp;

  • org — naziv organizacije;

  • orgvdc je naziv virtuelnog data centra.

Uvoz je bio uspješan

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.

Sada možemo pogledati novi uvezeni resurs:

Uvezeni resurs

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

}

}

Sada smo definitivno spremni – završili smo sa posljednjom tačkom (uvozom u postojeću infrastrukturu) i razmotrili sve glavne točke rada sa Terraformom. 

Alat se pokazao vrlo zgodnim i omogućava vam da svoju infrastrukturu opišete kao kod, počevši od virtuelnih mašina jednog provajdera u oblaku do opisivanja resursa mrežnih komponenti.

Istovremeno, nezavisnost od okruženja omogućava rad sa lokalnim resursima, resursima u oblaku, pa čak i upravljanje platformom. A ako ne postoji podržana platforma i želite da dodate novu, možete napisati svog provajdera i koristiti ga.

izvor: www.habr.com

Dodajte komentar