Kako upravljati s storitvijo v oblaku z uporabo Terraform

Kako upravljati s storitvijo v oblaku z uporabo Terraform

V tem članku bomo obravnavali sestavne dele Terraform in postopoma zagnali lastno infrastrukturo v oblaku z VMware — pripravili bomo tri VM za različne namene: proxy, datotečno shrambo in CMS.

O vsem podrobno in v treh korakih:

1. Terraform — opis, prednosti in sestavni deli

Terraform je IaC (Infrastructure-as-Code) orodje za gradnjo in upravljanje virtualne infrastrukture s pomočjo kode.

Pri delu z orodjem smo opazili več prednosti:

  • Hitrost postavljanja novih tenantov (uporabniških virtualnih okolij). Običajno, več novih strank pomeni več 'klikov', ki jih morajo narediti zaposleni tehnične podpore za objavo novih virov. S Terraform lahko uporabniki spreminjajo nastavitve virtualnih računalnikov (na primer, avtomatsko izklopijo OS in povečajo particijo virtualnega diska) brez posredovanja tehnične podpore in brez izklopa samega računalnika.

  • Takojšnja potrditev načrta aktivacije novega tenanta. S pomočjo opisa kode infrastrukture lahko takoj preverimo, kaj in v katerem vrstnem redu bo dodano, ter kakšno končno stanje bo imel ta ali on virtualni računalnik ali virtualno omrežje s povezavami do virtualnih računalnikov.

  • Možnost opisovanja večine priljubljenih oblačnih platform. Orodje lahko uporabljate od Amazon in Google Clouda do zasebnih platform na osnovi VMware vCloud Director, ki ponujajo storitve v okviru IaaS, SaaS in PaaS rešitev.

  • Upravljanje z več oblačnimi ponudniki in razporejanje infrastrukture med njimi za povečanje odpornosti, z uporabo ene konfiguracije za ustvarjanje, diagnostiko in upravljanje oblačnih virov.

  • Enostavna uporaba za ustvarjanje demo stojnic za testiranje in odpravljanje napak programske opreme. Lahko ustvarite in predate stojnice oddelku za testiranje, hkrati preverite programsko opremo v različnih okoljih ter takoj spremenite in izbrišete vire, če ustvarite le en načrt za gradnjo virov.

«Terarium» Terraform

Kratko smo opisali prednosti orodja, zdaj pa razložimo njegove sestavne dele

Providers (ponudniki). 

V Terraform je praktično vsak tip infrastrukture mogoče predstavljati kot vire. Povezava med viri in platformo API je omogočena s pomočjo moduli providers, ki omogočajo ustvarjanje virov znotraj določene platforme, na primer Azure ali VMware vCloud Director.

V okviru projekta lahko sodelujete z različnimi ponudniki na različnih platformah.

Viri (opis virov).

Opis virov omogoča upravljanje s komponentami platforme, kot so na primer virtualne naprave ali omrežja. 

Lahko sami ustvarite opis virov za ponudnika VMware vCloud Director in ta opis uporabite za ustvarjanje virov pri katerem koli ponudniku gostovanja, ki uporablja vCloud Director. Potrebujete le zamenjati parametre za avtentifikacijo in parametre omrežne povezave do želenega ponudnika gostovanja.

Provisioners.

Ta komponenta omogoča izvajanje operacij za prvotno namestitev in vzdrževanje operacijskega sistema po ustvarjanju virtualnih naprav. Ko ustvarite vir virtualne naprave, lahko s pomočjo provisioners pravilno nastavite in se povežete prek SSH, izvedete posodobitev operacijskega sistema ter naložite in izvedete skripto. 

Input in Output spremenljivke.

Input spremenljivke so vhodne spremenljivke za vse tipe blokov. 

Output spremenljivke omogočajo shranjevanje vrednosti po ustvarjanju virov in jih je mogoče uporabiti kot vhodne spremenljivke v drugih modulih, na primer v bloku Provisioners.

Stanja (States).

Stanje-datoteke shranjujejo informacije o konfiguraciji virov platforme ponudnika. Ob prvem ustvarjanju platforme ni informacij o virih, zato Terraform pred vsako operacijo posodobi stanje z dejansko infrastrukturo že opisanih virov.

Glavni namen stanj je shranjevanje povezave objektov že ustvarjenih virov za primerjavo konfiguracije dodanih virov in objektov, da se izognete ponovnemu ustvarjanju in spremembam platforme.

Informacije o stanju so privzeto shranjene v lokalni datoteki terraform.tfstate, vendar po potrebi obstaja možnost uporabe oddaljenega shranjevanja za delo v skupini.

Tudi lahko uvozite trenutne vire platforme v stanje, da jih lahko še naprej povežete z drugimi viri, ki so bili ustvarjeni brez Terraform-a.  

2. Ustvarjanje infrastrukture

Sestavne dele smo razložili, zdaj pa bomo s pomočjo Terraform-a postopoma ustvarili infrastrukturo s tremi virtualnimi stroji. Prvi bo imel nameščen proxy strežnik nginx, drugi bo služil kot shramba datotek z uporabo Nextcloud, tretji pa bo z CMS Bitrix.

Pisali in izvajali bomo kodo na primeru našega oblaka na VMware vCloud Director. Uporabniki pridobijo račun s pravicami Organizational Administrator, če uporabljate račun z enakimi pravicami v drugem oblaku VMware, boste lahko reproducirali kodo iz naših primerov. Gremo!

Najprej bomo ustvarili direktorij za naš nov projekt, v katerem bodo shranjene datoteke z opisom infrastrukture.

mkdir project01

Nato bomo opisali komponente infrastrukture. Terraform ustvari povezave in obdeluje datoteke na podlagi opisa v datotekah. Same datoteke lahko poimenujete glede na njihov namen, na primer, network.tf — opisuje omrežne parametre infrastrukture.

Za opis komponent naše infrastrukture smo ustvarili naslednje datoteke:

Seznam datotek.

main.tf — opis parametrov za virtualno okolje — virtualni stroji, virtualni kontejnerji;

network.tf — opis parametrov virtualnega omrežja in pravil NAT, požarni zid;

variables.tf — seznam spremenljivk, ki jih uporabljamo;

vcd.tfvars — vrednosti spremenljivk projekta za modul VMware vCloud Director.

Jezik konfiguracije v Terraform-u je deklarativen in vrstni red blokov ni pomemben, razen za bloke provisioner, saj v tem bloku opisujemo ukaze, ki se izvajajo pri pripravi infrastrukture in se bodo izvajali v vrstnem redu.

Struktura blokov.

"" "" {

# Block body

= # Argument

}

Za opis blokov se uporablja lasten programski jezik HCL (HashiCorp Configuration Language), možno je opisovati infrastrukturo tudi s pomočjo JSON. Več o sintaksi lahko preberete na spletni strani razvijalca.

Konfiguracija okoljske spremenljivke, variables.tf in vcd.tfvars

Najprej bomo ustvarili dve datoteki, ki opisujeta seznam vseh uporabljenih spremenljivk in njihovih vrednosti za modul VMware vCloud Director. Najprej bomo ustvarili datoteko variables.tf.

Vsebina datoteke variables.tf.

spremenljivka "vcd_org_user" {

  opis = "vCD uporabnik najemnika"

}

spremenljivka "vcd_org_password" {

  opis = "vCD geslo najemnika"

}

spremenljivka "vcd_org" {

  opis = "vCD organizacija najemnika"

}

spremenljivka "vcd_org_vdc" {

  opis = "vCD VDC najemnika"

}

spremenljivka "vcd_org_url" {

  opis = "vCD URL najemnika"

}

spremenljivka "vcd_org_max_retry_timeout" {

  privzeto = "60"

}

spremenljivka "vcd_org_allow_unverified_ssl" {

  privzeto = "true"

}

spremenljivka "vcd_org_edge_name" {

  opis = "ime robne naprave vCD"

}

spremenljivka "vcd_org_catalog" {

  opis = "javni katalog vCD"

}

spremenljivka "vcd_template_os_centos7" {

  opis = "OS CentOS 7"

  privzeto = "CentOS7"

}

spremenljivka "vcd_org_ssd_sp" {

  opis = "Shranjevalne politike"

  privzeto = "Zlata shrambena politika"

}

spremenljivka "vcd_org_hdd_sp" {

  opis = "Shranjevalne politike"

  privzeto = "Bronasta shrambena politika"

}

spremenljivka "vcd_edge_local_subnet" {

  opis = "Podomrežje organizacijske mreže"

}

spremenljivka "vcd_edge_external_ip" {

  opis = "Zunanji javni IP"

}

spremenljivka "vcd_edge_local_ip_nginx" {}

spremenljivka "vcd_edge_local_ip_bitrix" {}

spremenljivka "vcd_edge_local_ip_nextcloud" {}

spremenljivka "vcd_edge_external_network" {}

Vrednosti spremenljivk, ki jih prejemamo od ponudnika.

  • vcd_org_user — uporabniško ime z pravicami skrbnika organizacije,

  • vcd_org_password — uporabniško geslo,

  • vcd_org — ime organizacije,

  • vcd_org_vdc — ime virtualnega podatkovnega centra,

  • vcd_org_url — API URL,

  • vcd_org_edge_name — ime virtualnega usmerjevalnika,

  • vcd_org_catalog — ime kataloga s predlogami virtualnih naprav,

  • vcd_edge_external_ip — javni IP naslov,

  • vcd_edge_external_network — ime zunanje mreže,

  • vcd_org_hdd_sp — ime politike shranjevanja HDD,

  • vcd_org_ssd_sp — ime politike shranjevanja SSD.

In vnesemo svoje spremenljivke:

  • vcd_edge_local_ip_nginx — IP naslov virtualne naprave z NGINX,

  • vcd_edge_local_ip_bitrix — IP naslov virtualne naprave z 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP naslov virtualne naprave z Nextcloud.

Z drugim dokumentom ustvarimo in navedemo spremenljivke za modul VMware vCloud Director v dokumentu vcd.tfvars: Ponovimo, da v našem primeru uporabljamo lastno oblak mClouds, če delate z drugim ponudnikom, se posvetujte z njim o vrednostih. 

Vsebina dokumenta 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 = "Predloge"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Zlata shrambena politika"

vcd_org_hdd_sp = "Bronasta shrambena politika"

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.

Okolišćene varijable su postavljene, sada ćemo postaviti shemu povezivanja virtualnih mašina — dodelićemo privatnu IP adresu svakoj virtualnoj mašini i koristeći Destination NAT "prosledićemo" portove u spoljašnju mrežu. Da bismo ograničili pristup upravljačkim portovima, odobravanjem pristupa samo našoj IP adresi.

Kako upravljati s storitvijo v oblaku z uporabo TerraformMrežna shema za kreiranu Terraform platformu

Kreiramo virtuelnu organizacionu mrežu pod nazivom net_lan01, sa zadatim prolazom: 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"

  }

}

Kreirajmo pravila za vatrozid, koja omogućavaju virtualnim mašinama pristup internetu. U okviru ovog bloka svi virtuelni resursi u oblaku će imati pristup internetu:

Opisujemo pravila za pristup VM 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]

}

Postavljamo zavisnost, da nakon obrade bloka vcdnetworkrouted.net možemo preći na konfiguraciju bloka vcdnsxvfirewallrule, pomoću dependson. Koristimo ovu opciju jer određene zavisnosti mogu biti prepoznate implicitno u konfiguraciji.

Zatim ćemo kreirati pravila koja omogućavaju pristup portovima iz spoljašnje mreže i navedemo našu IP adresu za povezivanje putem SSH s serverima. Svaki korisnik interneta ima pristup portovima 80 i 443 na web serveru dok korisnik sa IP adresom 90.1.15.1 ima pristup SSH portovima virtuelnih servera.

Dozvoljavamo pristup portovima iz spoljašnje 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 oblaka lokalne mreže:

Opisujemo Source 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 na kraju konfiguracije mrežnog bloka dodajemo Destination NAT pravila za pristup servisima iz spoljašnje mreže:

Dodajemo Destination 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]

}

Dodajemo NAT pravilo za preusmjeravanje portova na SSH poslužitelj pod 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]

}

Dodajemo NAT pravilo za preusmjeravanje portova na SSH poslužitelj s 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]

}

Dodajemo NAT pravilo za preusmjeravanje portova na SSH poslužitelj s 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]

}

Konfiguracija virtualnog okruženja main.tf

Kao što smo planirali na početku članka, stvorit ćemo tri virtualne mašine. Bit će pripremljene pomoću "Guest Customization". Mrežne parametre ćemo postaviti prema našim navedenim postavkama, a lozinka za korisnika se generira automatski.

Opisujemo vApp u kojem će se nalaziti virtualne mašine i njihova konfiguracija.

Kako upravljati s storitvijo v oblaku z uporabo TerraformKonfiguracija virtualnih mašina

Stvorit ćemo vApp kontejner. Kako bismo mogli odmah povezati vApp i VM na virtualnu mrežu, također dodajemo parametar depends_on:

Stvaramo kontejner

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

}

Stvorit ćemo virtualnu mašinu 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:

  • name — ime virtualne mašine,

  • vappname — naziv vApp u koji dodajemo novu VM,

  • catalogname / templatename — naziv kataloga i naziv šablona virtualne mašine,

  • storageprofile — politika pohrane prema zadanim postavkama.

Parametri bloka network:

  • type — tip pridružene mreže,

  • name — na koju virtualnu mrežu povezujemo VM,

  • isprimary — primarni mrežni adapter,

  • ipallocation_mode — način dodijeljenja adrese MANUAL / DHCP / POOL,

  • ip — IP adresa za virtualnu mašinu, navedimo ručno.

Blok override_template_disk:

  • sizeinmb — veličina boot diska za virtualnu mašinu

  • storage_profile — politika pohrane za disk

Stvorit ćemo drugu VM s opisom za pohranu 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 ]

}

V bloku vcdvminternal_disk opišemo novu virtualnu disk koji se povezuje na virtualnu mašinu.

Objašnjenje bloka vcdvminternaldisk:

  • bustype — tip kontrolera diska

  • sizeinmb — veličina diska

  • busnumber / unitnumber — mesto povezivanja u adapteru

  • storage_profile — politika pohrane za disk

Opisaćemo poslednju 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 instalacija dodatnih skripti

Mreža je spremna, virtualne mašine su opisane. Pre uvoza naše infrastrukture možemo unapred izvršiti inicijalni provizijoning sa blokovima provizijonera, bez korišćenja Ansible-a.

Razmotrićemo kako da ažuriramo OS i pokrenemo instalacionu skriptu CMS Bitrix pomoću bloka provizijonera.

Prvo, izvršićemo instalaciju paketa ažuriranja 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" ]

}

}

}

Obeležavanje komponenti:

  • provisioner «remote-exec» — povezujemo blok udaljenog «provizijoniranja»

  • U bloku connection opisujemo tip i parametre za povezivanje:

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

  • user — ime korisnika;

  • password — lozinka korisnika. U našem slučaju navodimo parametar vcdvappvm.nginx.customization[0].admin_password, koji čuva generisanu lozinku za korisnika sistema.

  • host — spoljašnja IP adresa za povezivanje;

  • port — port za povezivanje, koji smo ranije naveli u podešavanjima DNAT;

  • inline — navodimo spisak komandi koje će se unositi. Komande će se unositi redosledom kako su navedene u ovoj sekciji.

Kao primer, dodatno ćemo izvršiti skriptu za instalaciju 1C-Bitrix. Izlaz rezultata izvršenja skripte biće dostupan tokom izvršenja plana. Da bismo instalirali skriptu, prvo ćemo opisati blok:

Opisaćemo instalaciju 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"

]

}

I odmah ćemo opisati ažuriranje Bitrix-a.

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

]

}

}

Pomembno! Skripta morda ne bo delovala, če prej ne onemogočite SELinux! Če potrebujete podrobno članek o namestitvi in nastavitvi CMS 1C-Bitrix s pomočjo bitrix-env.sh, lahko izkoristite naš članek v blogu na spletni strani.

3. Inicializacija infrastrukture

Kako upravljati s storitvijo v oblaku z uporabo TerraformInicializacija modulov in vtičnikov

Za delo uporabljamo preprost 'gentleman's set': prenosni računalnik z operacijskim sistemom Windows 10 in distribucijo s uradne spletne strani terraform.io. Razpakiramo in inicializiramo s pomočjo ukaza: terraform.exe init

Po opisu računalniške in omrežne infrastrukture zaženemo načrtovanje za preverjanje naše konfiguracije, kjer lahko vidimo, kaj bo ustvarjeno in kako so stvari med seboj povezane.

  1. Izvedemo ukaz - terraform plan -var-file=vcd.tfvars.

  2. Prejeli bomo rezultat - Načrt: 16 za dodati, 0 za spremeniti, 0 za uničiti. To pomeni, da bo po tem načrtu ustvarjenih 16 virov.

  3. Zaženemo načrt z ukazom - terraform.exe apply -var-file=vcd.tfvars.

Virtualne stroje bomo ustvarili, nato pa se bodo izvedle pakete, ki smo jih navedli v razdelku provisioner — operacijski sistem bo posodobljen in CMS Bitrix bo nameščen.

Pridobivanje podatkov za povezavo

Po izvedbi načrta želimo pridobiti podatke za povezavo s strežniki v besedilni obliki, zato obravnavamo razdelek output na naslednji način:

output "nginxpassword" {

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

}

In naslednji izhod nam sporoči geslo za ustvarjen virtualni stroj:

Outputs: nginx_password = F#4u8!!N

Na koncu dobimo dostop do virtualnih strojev z posodobljenim operacijskim sistemom in prednameščenimi paketi za naše nadaljnje delo. Vse je pripravljeno!

Toda kaj, če že imate obstoječo infrastrukturo?

3.1. Delo Terraform z že obstoječo infrastrukturo

Vse je preprosto, lahko uvozite trenutne virtualne stroje in njihove vApp kontejnere s pomočjo ukaza import.

Opisali bomo vir vAPP in 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"

}

Naslednji korak je uvoz lastnosti virov vApp v formatu vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, kjer:

  • vApp — ime vApp;

  • org — ime organizacije;

  • org_vdc — ime virtualnega podatkovnega centra.

Kako upravljati s storitvijo v oblaku z uporabo TerraformUvoz lastnosti vira vAPP

Izvedli bomo uvoz lastnosti virov VM v formatu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, v katerem:

  • VM — ime VM;

  • vApp — ime vApp;

  • org — ime organizacije;

  • orgvdc — ime virtualnega podatkovnega centra.

Uvoz je bil uspešen

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

vcd_vapp_vm.Zabbix: Uvažam s ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Uvoz pripremljen!

Pripremljen vcd_vapp_vm za uvoz

vcd_vapp_vm.Zabbix: Osvježavam stanje... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Uvoz uspješan!

Viri, ki so bili uvoženi, so prikazani zgoraj. Ti viri so zdaj v
vašem Terraform stanju in jih bo odslej upravljal 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 je konačno spremno — završili smo s posljednjim trenutkom (uvoz u postojeću infrastrukturu) i obradili sve ključne aspekte rada s Terraformom. 

Alat se pokazao vrlo korisnim i omogućava vam da opišete svoju infrastrukturu kao kod, počevši od virtualnih mašina jednog pružatelja oblaka do opisivanja resursa mrežnih komponenti.

Pri tome, neovisnost od okruženja omogućava rad s lokalnim i oblacima, kao i upravljanje platformom. A u slučaju nedostatka podržane platforme i želje za dodavanjem novog, možete napisati svoj pružatelj i koristiti ga.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster