Kako upravljati infrastrukturo v oblaku s Terraform

Kako upravljati infrastrukturo v oblaku s Terraform

V tem članku bomo pogledali, kaj sestavlja Terraform, in postopoma uvedli lastno infrastrukturo v oblaku z VMware — pripravili bomo tri VM za različne namene: proxy, shramba datotek in CMS.

O vsem podrobno in v treh fazah:

1. Terraform - opis, prednosti in komponente

Terraform je orodje IaC (Infrastructure-as-Code) za gradnjo in upravljanje virtualne infrastrukture z uporabo kode.

Opazili smo več prednosti pri delu z orodjem:

  • Hitrost uvajanja novih najemnikov (virtualna okolja po meri). Običajno več ko je novih strank, več "klikov" mora osebje tehnične podpore narediti za objavo novih virov. S Terraformom lahko uporabniki spreminjajo nastavitve navideznega stroja (na primer samodejni izklop operacijskega sistema in povečanje particije navideznega diska), ne da bi potrebovali tehnično podporo ali izklopili sam stroj.

  • Takojšnje preverjanje aktivacijskega načrta novi Tennant. Z opisom infrastrukturne kode lahko takoj preverimo, kaj bo dodano in v kakšnem vrstnem redu ter v kakšnem končnem stanju bo ta ali oni virtualni stroj ali virtualno omrežje s povezavami do virtualnih strojev.

  • Sposobnost opisa najbolj priljubljenih platform v oblaku. Orodje lahko uporabite od Amazona in Google Clouda do zasebnih platform, ki temeljijo na VMware vCloud Director, ki ponujajo storitve znotraj rešitev IaaS, SaaS in PaaS.

  • Upravljajte več ponudnikov v oblaku in porazdelite infrastrukturo med njimi za izboljšanje tolerance napak z uporabo ene same konfiguracije za ustvarjanje, diagnosticiranje in upravljanje virov v oblaku.

  • Priročna uporaba za izdelavo demo stojal za testiranje programske opreme in odpravljanje napak. Ustvarite in prenesete lahko stojala za oddelek za testiranje, vzporedno testirate programsko opremo v različnih okoljih ter takoj spremenite in izbrišete vire tako, da ustvarite samo en načrt gradnje virov

"Terarij" Terraform

Na kratko smo govorili o prednostih orodja, zdaj pa ga razdelimo na njegove komponente

Ponudniki. 

V Terraformu je skoraj vsako vrsto infrastrukture mogoče predstaviti kot vir. Povezavo med viri in platformo API zagotavljajo moduli ponudnika, ki omogočajo ustvarjanje virov znotraj določene platforme, na primer Azure ali VMware vCloud Director.

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

Viri (opis vira).

Opis virov vam omogoča upravljanje komponent platforme, kot so navidezni stroji ali omrežja. 

Sami lahko ustvarite opis vira za ponudnika VMware vCloud Director in uporabite ta opis za ustvarjanje virov pri katerem koli ponudniku gostovanja, ki uporablja vCloud Director. Spremeniti morate le parametre preverjanja pristnosti in parametre omrežne povezave na zahtevanega ponudnika gostovanja

Oskrbovalci.

Ta komponenta omogoča izvajanje operacij za začetno namestitev in vzdrževanje operacijskega sistema po ustvarjanju virtualnih strojev. Ko ustvarite vir navideznega stroja, lahko uporabite ponudnike za konfiguracijo in povezavo prek SSH, posodobite operacijski sistem ter prenesete in zaženete skript. 

Vhodne in izhodne spremenljivke.

Vhodne spremenljivke - vhodne spremenljivke za poljubne vrste blokov. 

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

države.

Datoteke stanja shranjujejo informacije o konfiguraciji virov platforme ponudnika. Ko je platforma prvič ustvarjena, ni informacij o virih in pred kakršno koli operacijo Terraform posodobi stanje z dejansko infrastrukturo že opisanih virov.

Glavni namen stanj je shraniti kup objektov že ustvarjenih virov za primerjavo konfiguracije dodanih virov in objektov, da bi se izognili ponovnemu ustvarjanju in spremembam na platformi.

Informacije o stanju so privzeto shranjene v lokalni datoteki terraform.tfstate, po potrebi pa je možno uporabiti oddaljeno shrambo za timsko delo.

Prav tako lahko uvozite trenutne vire platforme v stanje za nadaljnjo interakcijo z drugimi viri, ki so bili ustvarjeni brez pomoči Terraform.  

2. Vzpostavitev infrastrukture

Komponente so urejene, zdaj bomo s Terraformom postopoma ustvarili infrastrukturo s tremi virtualnimi stroji. Prvi z nameščenim proxy strežnikom nginx, drugi s shrambo datotek na osnovi Nextcloud in tretji s CMS Bitrix.

Napisali bomo kodo in jo izvedli na našem primeru oblaki na VMware vCloud Director. Naši uporabniki prejmejo račun s pravicami skrbnika organizacije. Če uporabljate račun z enakimi pravicami v drugem oblaku VMware, lahko reproducirate kodo iz naših primerov. Pojdi!

Najprej ustvarimo imenik za naš novi projekt, v katerega bodo postavljene datoteke, ki opisujejo infrastrukturo.

mkdir project01

Nato opišemo komponente infrastrukture. Terraform ustvarja relacije in obdeluje datoteke na podlagi opisa v datotekah. Same datoteke je mogoče poimenovati glede na namen blokov, ki se opisujejo, na primer network.tf - opisuje omrežne parametre za infrastrukturo.

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 navideznega omrežja ter pravil NAT in požarnega zidu;

variables.tf - seznam spremenljivk, ki jih uporabljamo;

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

Konfiguracijski jezik v Terraformu je deklarativen in vrstni red blokov ni pomemben, razen blokov ponudnika, ker v tem bloku opisujemo ukaze, ki jih je treba izvesti pri pripravi infrastrukture in bodo izvedeni po vrstnem redu.

Bločna struktura.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Za opis blokov se uporablja lasten programski jezik HCL (HashiCorp Configuration Language), infrastrukturo je mogoče opisati z JSON. Izvedete lahko več o sintaksi preberite na spletni strani razvijalca.

Konfiguracija spremenljivk okolja, variables.tf in vcd.tfvars

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

Vsebina 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" {}

Spremenljive vrednosti, ki jih prejmemo od ponudnika.

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

  • vcd_org_password — uporabniško geslo,

  • vcd_org — ime organizacije,

  • vcd_org_vdc — ime virtualnega podatkovnega centra,

  • vcd_org_url - URL API-ja,

  • vcd_org_edge_name — ime virtualnega usmerjevalnika,

  • vcd_org_catalog — ime imenika s predlogami virtualnih strojev,

  • vcd_edge_external_ip — javni naslov IP,

  • vcd_edge_external_network — ime zunanjega omrežja,

  • vcd_org_hdd_sp — ime politike shranjevanja HDD,

  • vcd_org_ssd_sp — ime pravilnika za shranjevanje SSD.

In vnesite naše spremenljivke:

  • vcd_edge_local_ip_nginx — naslov IP virtualnega stroja z NGINX,

  • vcd_edge_local_ip_bitrix - IP naslov virtualnega stroja z 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — naslov IP virtualnega stroja z Nextcloud.

Z drugo datoteko ustvarimo in podamo spremenljivke za modul VMware vCloud Director v datoteki vcd.tfvars: Spomnimo se, da v našem primeru uporabljamo lasten oblak mClouds, če sodelujete z drugim ponudnikom, preverite vrednosti pri njih. 

Vsebina 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 omrežja, network.tf.

Okoljske spremenljivke so nastavljene, zdaj bomo nastavili povezovalno shemo virtualnega stroja - vsakemu virtualnemu stroju bomo dodelili zasebni naslov IP in uporabili ciljni NAT za "posredovanje" vrat v zunanje omrežje. Za omejitev dostopa do vrat za upravljanje bomo nastavili dostop samo za naš naslov IP.

Kako upravljati infrastrukturo v oblaku s TerraformOmrežni diagram za platformo Terraform, ki se ustvarja

Ustvarimo navidezno organizacijsko omrežje z imenom net_lan01, privzetim prehodom: 192.168.110.254 in tudi z naslovnim prostorom: 192.168.110.0/24.

Opisujemo virtualno omrežje.

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"

  }

}

Ustvarimo pravila požarnega zidu, ki virtualnim strojem omogočajo dostop do interneta. V tem bloku bodo vsi virtualni viri v oblaku imeli dostop do interneta:

Opisujemo pravila za dostop VM do interneta.

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]

}

Po vzpostavitvi odvisnosti, da po obdelavi bloka vcdnetworkrouted.net nadaljujemo s konfiguracijo bloka vcdnsxvfirewallrule, skozi odvisno od. To možnost uporabljamo, ker so nekatere odvisnosti morda implicitno prepoznane v konfiguraciji.

Nato bomo ustvarili pravila, ki omogočajo dostop do vrat iz zunanjega omrežja in navedejo naš naslov IP za povezavo prek SSH s strežniki. Vsak uporabnik interneta ima dostop do vrat 80 in 443 na spletnem strežniku, uporabnik z naslovom IP 90.1.15.1 pa ima dostop do SSH vrat virtualnih strežnikov.

Dovoli dostop do vrat iz zunanjega omrežja.

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]

}

Ustvarimo Source NAT pravila za dostop do interneta iz lokalnega omrežja v oblaku:

Opisujemo pravila Source NAT.

resource "vcd_nsxv_snat" "snat_local" {

edge_gateway = var.vcd_org_edge_name

  network_type = "ext"

  network_name = var.vcdedgeexternalnetwork

  original_address   = var.vcd_edge_local_subnet

translated_address = var.vcd_edge_external_ip

  depends_on = [vcd_network_routed.net]

}

Za dokončanje konfiguracije omrežnega bloka dodamo ciljna pravila NAT za dostop do storitev iz zunanjega omrežja:

Dodajanje ciljnih pravil 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]

}

Dodajte pravilo NAT za prevod vrat na strežnik SSH 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]

}

Dodajte pravilo NAT za prevajanje vrat na strežnik SSH z 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]

}

Dodajte pravilo NAT za prevajanje vrat na strežnik SSH z 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 virtualnega okolja Main.tf

Kot smo načrtovali na začetku članka, bomo ustvarili tri virtualne stroje. Pripravljeni bodo z uporabo "Guest Customization". Omrežne parametre bomo nastavili v skladu z nastavitvami, ki smo jih določili, uporabniško geslo pa bo generirano samodejno.

Opišimo aplikacijo vApp, v kateri bodo virtualni stroji, in njihovo konfiguracijo.

Kako upravljati infrastrukturo v oblaku s TerraformKonfiguracija virtualnega stroja

Ustvarimo vsebnik vApp. Da lahko vApp in VM takoj povežemo z virtualnim omrežjem, dodamo tudi parameter depend_on:

Ustvari vsebnik

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

}

Ustvarimo virtualni stroj z 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 v opisu VM:

  • ime — ime virtualnega stroja,

  • vappname - ime aplikacije vApp, v katero želite dodati nov VM,

  • ime kataloga / ime predloge - ime kataloga in ime predloge virtualnega stroja,

  • storageprofile - privzeta politika shranjevanja.

Parametri omrežnega bloka:

  • vrsta — vrsta povezanega omrežja,

  • ime — na katero navidezno omrežje povezati VM,

  • isprimary - primarni omrežni adapter,

  • ipallocation_mode — način dodeljevanja naslovov MANUAL / DHCP / POOL,

  • ip — naslov IP za virtualni stroj, določili ga bomo ročno.

blok override_template_disk:

  • sizeinmb — velikost zagonske diskete za virtualni stroj

  • storage_profile — politika shranjevanja za disk

Ustvarimo drugi VM z opisom shrambe datotek 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 razdelku vcdvminternal_disk bomo opisali nov virtualni disk, ki je povezan z virtualnim strojem.

Pojasnila za blok vcdvminternaldisk:

  • bustype - tip krmilnika diska

  • sizeinmb — velikost diska

  • busnumber / unitnumber - lokacija povezave v adapterju

  • storage_profile — politika shranjevanja za disk

Opišimo najnovejši 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

}

}

Posodabljanje OS in namestitev dodatnih skriptov

Omrežje je pripravljeno, virtualni stroji so opisani. Pred uvozom naše infrastrukture lahko izvedemo začetno oskrbo vnaprej z uporabo blokov oskrbovalcev in brez uporabe Ansible.

Oglejmo si, kako posodobiti operacijski sistem in zagnati namestitveni skript CMS Bitrix z uporabo bloka oskrbovalca.

Najprej namestimo posodobitvene pakete 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" ]

}

}

}

Oznaka komponent:

  • oskrbovalec “remote-exec” - povežite blok za oddaljeno oskrbo

  • V bloku povezave opisujemo vrsto in parametre za povezavo:

  • tip — protokol, v našem primeru SSH;

  • uporabnik — uporabniško ime;

  • geslo — uporabniško geslo. V našem primeru pokažemo na parameter vcdvappvm.nginx.customization[0].admin_password, ki shrani generirano geslo za uporabnika sistema.

  • gostitelj — zunanji naslov IP za povezavo;

  • vrata — vrata za povezavo, ki je bila predhodno določena v nastavitvah DNAT;

  • inline - seznam ukazov, ki bodo vneseni. Ukazi bodo vneseni v vrstnem redu, kot je navedeno v tem razdelku.

Na primer, dodatno izvedite namestitveni skript 1C-Bitrix. Izhod rezultata izvajanja skripta bo na voljo med izvajanjem načrta. Za namestitev skripta najprej opišemo blok:

Opišimo namestitev 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"

]

}

In takoj bomo opisali posodobitev Bitrixa.

Primer zagotavljanja 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! Skript morda ne bo deloval, če SELinuxa ne onemogočite vnaprej! Če potrebujete podroben članek o namestitvi in ​​konfiguraciji CMS 1C-Bitrix z uporabo bitrix-env.sh, oo lahko uporabite naš blog članek na spletni strani.

3. Inicializacija infrastrukture

Kako upravljati infrastrukturo v oblaku s TerraformInicializacija modulov in vtičnikov

Za delo uporabljamo preprost »gentleman's kit«: prenosni računalnik z operacijskim sistemom Windows 10 in distribucijski komplet z uradne spletne strani. terraform.io. Razpakirajmo in inicializirajmo z ukazom: terraform.exe init

Po opisu računalniške in omrežne infrastrukture se lotimo načrtovanja testiranja naše konfiguracije, kjer lahko vidimo, kaj bo nastalo in kako bo med seboj povezano.

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

  2. Dobimo rezultat - Plan: 16 to add, 0 to change, 0 to destroy. To pomeni, da bo po tem načrtu ustvarjenih 16 virov.

  3. Načrt zaženemo na ukaz - terraform.exe apply -var-file=vcd.tfvars.

Ustvarjeni bodo navidezni stroji, nato pa se bodo paketi, ki smo jih navedli, izvajali znotraj razdelka za zagotavljanje - OS bo posodobljen in CMS Bitrix bo nameščen.

Prejemanje podatkov o povezavi

Po izvedbi načrta želimo prejeti podatke v besedilni obliki za povezavo s strežniki, za to bomo izhodni del oblikovali na naslednji način:

output "nginxpassword" {

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

}

In naslednji izhod nam pove geslo za ustvarjeni virtualni stroj:

Outputs: nginx_password = F#4u8!!N

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

Kaj pa, če že imate obstoječo infrastrukturo?

3.1. Delovni Terraform z obstoječo infrastrukturo

Preprosto je, trenutne virtualne stroje in njihove vsebnike vApp lahko uvozite z ukazom za uvoz.

Opišimo 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 obliki vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, kjer:

  • vApp - ime vApp;

  • org — ime organizacije;

  • org_vdc — ime virtualnega podatkovnega centra.

Kako upravljati infrastrukturo v oblaku s TerraformUvažanje lastnosti vira vAPP

Uvozimo lastnosti virov VM v formatu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, v katerem:

  • VM - ime VM;

  • vApp - ime vApp;

  • org — ime organizacije;

  • orgvdc je 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: 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.

Zdaj si lahko ogledamo nov uvoženi vir:

Uvožen vir

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

}

}

Zdaj smo zagotovo pripravljeni - končali smo z zadnjo točko (uvoz v obstoječo infrastrukturo) in upoštevali smo vse glavne točke dela s Terraformom. 

Orodje se je izkazalo za zelo priročno in vam omogoča, da svojo infrastrukturo opišete kot kodo, začenši od virtualnih strojev enega ponudnika oblaka do opisa virov omrežnih komponent.

Hkrati pa neodvisnost od okolja omogoča delo z lokalnimi, oblačnimi viri in celo upravljanje platforme. In če ni podprte platforme in želite dodati novo, lahko napišete svojega ponudnika in ga uporabite.

Vir: www.habr.com

Dodaj komentar