Kako upravljati infrastrukturom oblaka s Terraformom

Kako upravljati infrastrukturom oblaka s Terraformom

U ovom ćemo članku pogledati od čega se Terraform sastoji, a također ćemo postupno pokrenuti vlastitu infrastrukturu u oblaku uz VMware — pripremit ćemo tri VM-a za različite namjene: proxy, pohranu 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 virtualnom infrastrukturom pomoću koda.

Uočili smo nekoliko prednosti u radu s alatom:

  • Brzina implementacije novih stanara (prilagođena virtualna okruženja). Obično, što je više novih klijenata, to više "klikova" osoblje tehničke podrške treba učiniti za objavljivanje novih izvora. Uz Terraform, korisnici mogu promijeniti postavke virtualnog stroja (na primjer, automatski isključiti OS i povećati particiju virtualnog diska) bez potrebe za tehničkom podrškom ili gašenja samog stroja.

  • Trenutačna provjera aktivacijskog plana novi Tennant. Pomoću opisa infrastrukturnog koda možemo odmah provjeriti što će se dodavati i kojim redoslijedom, kao iu kakvom će konačnom stanju biti ovaj ili onaj virtualni stroj ili virtualna mreža s vezama na virtualne strojeve.

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

  • Upravljajte s više pružatelja usluga oblaka i distribuirati infrastrukturu među njima kako bi poboljšali toleranciju na greške, koristeći jednu konfiguraciju za stvaranje, dijagnosticiranje i upravljanje resursima u oblaku.

  • Praktično korištenje za izradu demo postolja za testiranje softvera i otklanjanje pogrešaka. Možete stvarati i prenositi postolja za odjel za testiranje, paralelno testirati softver u različitim okruženjima i trenutno mijenjati i brisati resurse stvaranjem samo jednog plana izgradnje resursa

"Terarij" Terraform

Ukratko smo govorili o prednostima alata, a sada ćemo ga rastaviti na komponente

Pružatelji usluga. 

U Terraformu se gotovo svaka vrsta infrastrukture može predstaviti kao resurs. Vezu između resursa i API platforme osiguravaju moduli dobavljača, koji vam omogućuju stvaranje resursa unutar određene platforme, na primjer, Azure ili VMware vCloud Director.

U sklopu projekta možete komunicirati s različitim pružateljima usluga na različitim platformama.

Resursi (opis izvora).

Opis resursa omogućuje vam upravljanje komponentama platforme, kao što su virtualni strojevi ili mreže. 

Možete sami izraditi opis resursa za pružatelja usluga VMware vCloud Director i koristiti ovaj opis za stvaranje resursa s bilo kojim pružateljem usluga hostinga koji koristi vCloud Director. Trebate samo promijeniti parametre provjere autentičnosti i parametre mrežne veze na potrebnog davatelja usluga hostinga

Provizori.

Ova komponenta omogućuje izvođenje operacija za početnu instalaciju i održavanje operativnog sustava nakon stvaranja virtualnih strojeva. Nakon što stvorite resurs virtualnog stroja, možete koristiti pružatelje usluga za konfiguriranje i povezivanje putem SSH-a, ažuriranje operativnog sustava te preuzimanje i pokretanje skripte. 

Ulazne i izlazne varijable.

Ulazne varijable - ulazne varijable za sve vrste blokova. 

Izlazne varijable omogućuju vam spremanje vrijednosti nakon stvaranja 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 pružatelja usluga. Kada je platforma prvi put stvorena, nema informacija o resursima i prije bilo kakve operacije, Terraform ažurira stanje sa stvarnom infrastrukturom već opisanih resursa.

Glavna svrha stanja je spremiti hrpu objekata već stvorenih resursa za usporedbu konfiguracije dodanih resursa i objekata kako bi se izbjeglo ponovno stvaranje i promjene na platformi.

Prema zadanim postavkama, informacije o stanju pohranjene su u lokalnoj datoteci terraform.tfstate, ali ako je potrebno, moguće je koristiti udaljenu pohranu za timski rad.

Također možete uvesti trenutne resurse platforme u stanje za daljnju interakciju s drugim resursima koji su stvoreni bez pomoći Terraforma.  

2. Stvaranje infrastrukture

Komponente su razvrstane, sada ćemo pomoću Terraforma postupno stvoriti infrastrukturu s tri virtualna računala. Prvi s instaliranim nginx proxy poslužiteljem, drugi s pohranom datoteka temeljen na Nextcloudu i treći s CMS Bitrixom.

Napisat ćemo kod i izvršiti ga koristeći naš primjer oblaci na VMware vCloud Director. Naši korisnici dobivaju račun s pravima administratora organizacije. Ako koristite račun s istim pravima u drugom VMware oblaku, možete reproducirati kod iz naših primjera. Ići!

Prvo, kreirajmo direktorij za naš novi projekt u koji će se smjestiti datoteke koje opisuju infrastrukturu.

mkdir project01

Zatim opisujemo komponente infrastrukture. Terraform stvara odnose i obrađuje datoteke na temelju opisa u datotekama. Same datoteke mogu se imenovati na temelju namjene blokova koji se opisuju, na primjer, network.tf - opisuje mrežne parametre za infrastrukturu.

Kako bismo opisali komponente naše infrastrukture, izradili smo sljedeće datoteke:

Popis datoteka.

main.tf - opis parametara za virtualno okruženje - virtualni strojevi, virtualni spremnici;

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

variables.tf - popis varijabli koje koristimo;

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

Konfiguracijski jezik u Terraformu je deklarativan i redoslijed blokova nije bitan, osim za blokove provizorera, jer u ovom bloku opisujemo naredbe koje treba izvršiti prilikom pripreme infrastrukture i one će se izvršavati redom.

Blok struktura.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

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

Konfiguracija varijabli okruženja, variables.tf i vcd.tfvars

Prvo, stvorimo dvije datoteke koje opisuju popis svih korištenih varijabli i njihovih vrijednosti za modul VMware vCloud Director. Prvo, kreirajmo datoteku variables.tf.

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

Varijabilne vrijednosti koje dobivamo od provajdera.

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

  • vcd_org_password — korisnička lozinka,

  • vcd_org — naziv organizacije,

  • vcd_org_vdc — naziv virtualnog podatkovnog centra,

  • vcd_org_url - API URL,

  • vcd_org_edge_name — ime virtualnog rutera,

  • vcd_org_catalog — naziv direktorija s predlošcima virtualnog stroja,

  • vcd_edge_external_ip — javna IP adresa,

  • vcd_edge_external_network — naziv vanjske mreže,

  • vcd_org_hdd_sp — naziv politike pohrane HDD-a,

  • vcd_org_ssd_sp — naziv politike SSD pohrane.

I unesite naše varijable:

  • vcd_edge_local_ip_nginx — IP adresa virtualnog stroja s NGINX-om,

  • vcd_edge_local_ip_bitrix - IP adresa virtualnog stroja s 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP adresa virtualnog stroja s Nextcloudom.

S drugom datotekom stvaramo i specificiramo varijable za modul VMware vCloud Director u datoteci vcd.tfvars: Prisjetimo se da u našem primjeru koristimo vlastiti oblak mClouds, ako radite s drugim pružateljem usluga, 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"

Konfiguracija mreže, network.tf.

Varijable okoline su postavljene, sada ćemo postaviti shemu povezivanja virtualnog stroja - dodijelit ćemo privatnu IP adresu svakom virtualnom stroju i koristiti Destination NAT za "prosljeđivanje" portova na vanjsku mrežu. Kako bismo ograničili pristup upravljačkim portovima, postavit ćemo pristup samo za našu IP adresu.

Kako upravljati infrastrukturom oblaka s TerraformomDijagram mreže za platformu Terraform u izradi

Stvaramo virtualnu organizacijsku mrežu s imenom net_lan01, zadanim pristupnikom: 192.168.110.254 i također s adresnim prostorom: 192.168.110.0/24.

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

  }

}

Stvorimo pravila vatrozida koja virtualnim strojevima omogućuju pristup internetu. Unutar ovog bloka svi virtualni resursi u oblaku imat će 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 ovisi o. Ovu opciju koristimo jer se neke ovisnosti mogu implicitno prepoznati u konfiguraciji.

Zatim ćemo stvoriti pravila koja dopuštaju pristup portovima s vanjske mreže i naznačiti našu IP adresu za povezivanje putem SSH-a s poslužiteljima. Svaki korisnik interneta ima pristup portovima 80 i 443 na web poslužitelju, a korisnik s IP adresom 90.1.15.1 ima pristup SSH portovima virtualnih poslužitelja.

Dopustite pristup priključcima iz 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 Source NAT pravila za pristup internetu iz 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]

}

A da bismo dovršili konfiguraciju mrežnog bloka, dodajemo Destination 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 poslužitelj 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 prijevod portova na SSH poslužitelj s 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 poslužitelj s Nextcloudom.

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 virtualnog okruženja

Kao što smo planirali na početku članka, napravit ćemo tri virtualna računala. Oni će biti pripremljeni korištenjem "Guest Customization". Postavit ćemo mrežne parametre prema postavkama koje smo naveli, a korisnička lozinka će se automatski generirati.

Opišimo vApp u kojem će se virtualni strojevi nalaziti i njihovu konfiguraciju.

Kako upravljati infrastrukturom oblaka s TerraformomKonfiguracija virtualnog stroja

Kreirajmo vApp spremnik. Kako bismo odmah mogli povezati vApp i VM s virtualnom mrežom, također dodajemo parametardependent_on:

Napravite spremnik

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

}

Kreirajmo virtualni stroj s 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 virtualnog stroja,

  • vappname - naziv vApp-a kojem želite dodati novi VM,

  • catalogname / templatename - naziv kataloga i naziv predloška virtualnog stroja,

  • storageprofile - zadana politika pohrane.

Parametri mrežnog bloka:

  • vrsta — vrsta povezane mreže,

  • naziv — na koju virtualnu mrežu spojiti VM,

  • isprimary - primarni mrežni adapter,

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

  • ip — IP adresa za virtualni stroj, navest ćemo je ručno.

blok override_template_disk:

  • sizeinmb — veličina diska za pokretanje virtualnog stroja

  • storage_profile — politika pohrane za disk

Kreirajmo drugi VM s opisom pohrane 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 opisat ćemo novi virtualni disk koji je povezan s virtualnim strojem.

Objašnjenja za blok vcdvminternaldisk:

  • bustype - vrsta kontrolera diska

  • sizeinmb — veličina diska

  • broj sabirnice / broj jedinice - mjesto spajanja u adapteru

  • storage_profile — politika pohrane za disk

Opišimo 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, virtualni strojevi opisani. Prije uvoza naše infrastrukture, možemo izvršiti početnu opskrbu unaprijed koristeći blokove provizije i bez upotrebe Ansiblea.

Pogledajmo kako ažurirati OS i pokrenuti instalacijsku skriptu CMS Bitrixa pomoću bloka za pružanje usluga.

Prvo, instalirajmo pakete ažuriranja CentOS-a.

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

}

}

}

Označavanje komponenti:

  • provider “remote-exec” - spojite blok za daljinsko pružanje usluga

  • U bloku veze opisujemo vrstu i parametre veze:

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

  • korisnik — korisničko ime;

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

  • host — vanjska IP adresa za povezivanje;

  • port — port za povezivanje, koji je prethodno naveden u postavkama DNAT;

  • inline - popis popisa naredbi koje će se unijeti. Naredbe će se unijeti redom kako je navedeno u ovom odjeljku.

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

Opišimo 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 pružanja 1C-Bitrixa.

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"

]

}

}

Važno! Skripta možda neće raditi ako unaprijed ne onemogućite SELinux! Ako trebate detaljan članak o instaliranju i konfiguriranju CMS 1C-Bitrix pomoću bitrix-env.sh, oo možete koristite članak našeg bloga na web stranici.

3. Inicijalizacija infrastrukture

Kako upravljati infrastrukturom oblaka s TerraformomInicijalizacija modula i dodataka

Za rad koristimo jednostavan "džentlmenski pribor": prijenosno računalo s Windows 10 OS i distribucijski komplet sa službene web stranice terraform.io. Raspakirajmo se i inicijalizirajmo pomoću naredbe: terraform.exe init

Nakon opisa računalne i mrežne infrastrukture, pokrećemo planiranje testiranja naše konfiguracije, gdje možemo vidjeti što će se kreirati i kako će biti međusobno povezano.

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

  2. Dobivamo rezultat - Plan: 16 to add, 0 to change, 0 to destroy. Odnosno, prema ovom planu, stvorit će se 16 resursa.

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

Napravit će se virtualni strojevi, a zatim će se paketi koje smo naveli izvršiti unutar odjeljka za pružanje usluga - OS će se ažurirati i instalirati CMS Bitrix.

Primanje podataka o vezi

Nakon izvršenja plana želimo primati podatke u tekstualnom obliku za povezivanje s poslužiteljima, za to ćemo formatirati izlazni odjeljak na sljedeći način:

output "nginxpassword" {

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

}

A sljedeći izlaz nam govori lozinku za stvoreni virtualni stroj:

Outputs: nginx_password = F#4u8!!N

Kao rezultat toga, dobivamo pristup virtualnim strojevima s ažuriranim operativnim sustavom i predinstaliranim paketima za naš daljnji rad. Sve je spremno!

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

3.1. Radni Terraform s postojećom infrastrukturom

Jednostavno je, možete uvesti trenutna virtualna računala i njihove vApp spremnike pomoću naredbe import.

Opišimo vAPP resurs i virtualni stroj.

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 - ime vApp-a;

  • org — naziv organizacije;

  • org_vdc — naziv virtualnog podatkovnog centra.

Kako upravljati infrastrukturom oblaka s TerraformomUvoz svojstava vAPP resursa

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

  • VM - ime VM;

  • vApp - ime vApp-a;

  • org — naziv organizacije;

  • orgvdc je naziv virtualnog podatkovnog 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 - gotovi smo s posljednjom točkom (uvoz u postojeću infrastrukturu) i razmotrili smo sve glavne točke rada s Terraformom. 

Alat se pokazao vrlo praktičnim i omogućuje vam da svoju infrastrukturu opišete kao kod, počevši od virtualnih strojeva jednog pružatelja usluga oblaka do opisa resursa mrežnih komponenti.

Istodobno, neovisnost o okruženju omogućuje rad s lokalnim resursima u oblaku, pa čak i upravljanje platformom. A ako nema podržane platforme i želite dodati novu, možete napisati vlastitog pružatelja usluga i koristiti ga.

Izvor: www.habr.com

Dodajte komentar