Ako spravovať cloudovú infraštruktúru pomocou Terraform

Ako spravovať cloudovú infraštruktúru pomocou Terraform

V tomto článku sa pozrieme na to, z čoho Terraform pozostáva, a tiež postupne spustíme vlastnú infraštruktúru v cloude s VMware — pripravíme tri VM na rôzne účely: proxy, úložisko súborov a CMS.

O všetkom podrobne a v troch fázach:

1. Terraform - popis, výhody a komponenty

Terraform je IaC (Infrastructure-as-Code) nástroj na budovanie a správu virtuálnej infraštruktúry pomocou kódu.

Pri práci s nástrojom sme zaznamenali niekoľko výhod:

  • Rýchlosť nasadenia nových nájomníkov (vlastné virtuálne prostredia). Zvyčajne platí, že čím viac nových klientov je, tým viac „kliknutí“ musia pracovníci technickej podpory vykonať, aby mohli publikovať nové zdroje. Pomocou Terraform môžu používatelia meniť nastavenia virtuálneho počítača (napríklad automatické vypnutie operačného systému a zväčšenie oddielu virtuálneho disku) bez potreby technickej podpory alebo vypnutia samotného počítača.

  • Okamžité overenie aktivačného plánu nový Tennant. Pomocou popisu kódu infraštruktúry môžeme okamžite skontrolovať, čo bude pridané a v akom poradí, ako aj v akom konečnom stave bude ten či onen virtuálny stroj alebo virtuálna sieť s pripojeniami na virtuálne stroje.

  • Schopnosť popísať najobľúbenejšie cloudové platformy. Môžete použiť nástroj od Amazonu a Google Cloud po súkromné ​​platformy založené na VMware vCloud Director, ktoré ponúkajú služby v rámci riešení IaaS, SaaS a PaaS.

  • Spravujte viacerých poskytovateľov cloudu a distribuovať infraštruktúru medzi nimi, aby sa zlepšila odolnosť voči chybám, pomocou jedinej konfigurácie na vytváranie, diagnostiku a správu cloudových zdrojov.

  • Pohodlné použitie na vytváranie demo stojanov na testovanie a ladenie softvéru. Môžete vytvárať a prenášať stojany pre testovacie oddelenie, testovať softvér paralelne v rôznych prostrediach a okamžite meniť a odstraňovať zdroje vytvorením len jedného plánu zostavovania prostriedkov.

"Terárium" Terraform

Stručne sme hovorili o výhodách nástroja, teraz ho rozdelíme na jeho komponenty

Poskytovatelia. 

V Terraforme môže byť ako zdroj reprezentovaný takmer akýkoľvek typ infraštruktúry. Spojenie medzi zdrojmi a platformou API zabezpečujú moduly poskytovateľov, ktoré vám umožňujú vytvárať zdroje v rámci konkrétnej platformy, napríklad Azure alebo VMware vCloud Director.

V rámci projektu môžete komunikovať s rôznymi poskytovateľmi na rôznych platformách.

Zdroje (opis zdroja).

Popis prostriedkov vám umožňuje spravovať komponenty platformy, ako sú virtuálne stroje alebo siete. 

Popis prostriedkov pre poskytovateľa VMware vCloud Director si môžete vytvoriť sami a tento popis použiť na vytvorenie prostriedkov u akéhokoľvek poskytovateľa hostingu, ktorý používa vCloud Director. Stačí zmeniť autentifikačné parametre a parametre sieťového pripojenia na požadovaného poskytovateľa hostingu

Poskytovatelia.

Tento komponent umožňuje vykonávať operácie pre úvodnú inštaláciu a údržbu operačného systému po vytvorení virtuálnych strojov. Po vytvorení prostriedku virtuálneho počítača môžete pomocou províznych prostriedkov konfigurovať a pripojiť sa cez SSH, aktualizovať operačný systém a stiahnuť a spustiť skript. 

Vstupné a výstupné premenné.

Vstupné premenné - vstupné premenné pre ľubovoľné typy blokov. 

Výstupné premenné umožňujú uložiť hodnoty po vytvorení zdrojov a môžu byť použité ako vstupné premenné v iných moduloch, napríklad v bloku Provisioners.

štátov.

Súbory stavov ukladajú informácie o konfigurácii zdrojov platformy poskytovateľa. Pri prvom vytvorení platformy neexistujú žiadne informácie o zdrojoch a pred akoukoľvek operáciou Terraform aktualizuje stav o skutočnú infraštruktúru už popísaných zdrojov.

Hlavným účelom stavov je uloženie hromady objektov už vytvorených zdrojov na porovnanie konfigurácie pridaných zdrojov a objektov, aby sa predišlo opakovanému vytváraniu a zmenám platformy.

Štandardne sú informácie o stave uložené v lokálnom súbore terraform.tfstate, no v prípade potreby je možné využiť vzdialené úložisko pre tímovú prácu.

Môžete tiež importovať zdroje aktuálnej platformy do stavu, aby ste mohli ďalej interagovať s inými zdrojmi, ktoré boli vytvorené bez pomoci Terraformu.  

2. Vytvorenie infraštruktúry

Komponenty sú vytriedené, teraz pomocou Terraformu postupne vytvoríme infraštruktúru s tromi virtuálnymi strojmi. Prvý s nainštalovaným proxy serverom nginx, druhý s ukladaním súborov založeným na Nextcloud a tretí s CMS Bitrix.

Napíšeme kód a spustíme ho pomocou nášho príkladu cloud na VMware vCloud Director. Naši používatelia získajú účet s právami správcu organizácie. Ak používate účet s rovnakými právami v inom cloude VMware, môžete reprodukovať kód z našich príkladov. Choď!

Najprv si vytvoríme adresár pre náš nový projekt, do ktorého budú umiestnené súbory popisujúce infraštruktúru.

mkdir project01

Ďalej popíšeme komponenty infraštruktúry. Terraform vytvára vzťahy a spracováva súbory na základe popisu v súboroch. Samotné súbory môžu byť pomenované na základe účelu popisovaných blokov, napríklad network.tf - popisuje sieťové parametre pre infraštruktúru.

Na popis komponentov našej infraštruktúry sme vytvorili nasledujúce súbory:

Zoznam súborov.

main.tf - popis parametrov pre virtuálne prostredie - virtuálne stroje, virtuálne kontajnery;

network.tf - popis parametrov virtuálnej siete a pravidiel NAT a Firewallu;

variables.tf - zoznam premenných, ktoré používame;

vcd.tfvars - hodnoty projektových premenných pre modul VMware vCloud Director.

Konfiguračný jazyk v Terraforme je deklaratívny a na poradí blokov nezáleží, okrem provizórnych blokov, pretože v tomto bloku popisujeme príkazy, ktoré sa majú vykonať pri príprave infraštruktúry a budú vykonané v poradí.

Bloková štruktúra.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Na popis blokov sa používa vlastný programovací jazyk HCL (HashiCorp Configuration Language), infraštruktúru je možné popísať pomocou JSON. Môžete sa dozvedieť viac o syntaxi prečítajte si na webovej stránke vývojára.

Konfigurácia premenných prostredia, premenné.tf a vcd.tfvars

Najprv vytvorte dva súbory, ktoré popisujú zoznam všetkých použitých premenných a ich hodnôt pre modul VMware vCloud Director. Najprv si vytvoríme súbor variables.tf.

Obsah súboru 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" {}

Premenné hodnoty, ktoré dostávame od poskytovateľa.

  • vcd_org_user — používateľské meno s právami správcu organizácie,

  • vcd_org_password — heslo používateľa,

  • vcd_org — názov organizácie,

  • vcd_org_vdc — názov virtuálneho dátového centra,

  • vcd_org_url – adresa URL rozhrania API,

  • vcd_org_edge_name — názov virtuálneho smerovača,

  • vcd_org_catalog — názov adresára so šablónami virtuálneho počítača,

  • vcd_edge_external_ip — verejná IP adresa,

  • vcd_edge_external_network — názov externej siete,

  • vcd_org_hdd_sp — názov politiky ukladania HDD,

  • vcd_org_ssd_sp — názov politiky úložiska SSD.

A zadajte naše premenné:

  • vcd_edge_local_ip_nginx — IP adresa virtuálneho počítača s NGINX,

  • vcd_edge_local_ip_bitrix - IP adresa virtuálneho počítača s 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP adresa virtuálneho počítača s Nextcloud.

Druhým súborom vytvoríme a špecifikujeme premenné pre modul VMware vCloud Director v súbore vcd.tfvars: Pripomeňme, že v našom príklade používame vlastné cloudové mCloudy, ak spolupracujete s iným poskytovateľom, overte si hodnoty u nich. 

Obsah súboru 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"

Konfigurácia siete, network.tf.

Premenné prostredia sú nastavené, teraz nastavíme schému pripojenia virtuálneho stroja – každému virtuálnemu stroju pridelíme súkromnú IP adresu a pomocou cieľového NAT „prepošleme“ porty do externej siete. Aby sme obmedzili prístup k portom na správu, nastavíme prístup len pre našu IP adresu.

Ako spravovať cloudovú infraštruktúru pomocou TerraformVytvára sa sieťový diagram pre platformu Terraform

Vytvárame virtuálnu organizačnú sieť s názvom net_lan01, predvolenou bránou: 192.168.110.254 a tiež s adresným priestorom: 192.168.110.0/24.

Popisujeme virtuálnu sieť.

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"

  }

}

Vytvorme pravidlá brány firewall, ktoré umožnia virtuálnym strojom prístup na internet. V rámci tohto bloku budú mať všetky virtuálne zdroje v cloude prístup na internet:

Popisujeme pravidlá pre prístup VM na internet.

resource "vcd_nsxv_firewall_rule" "fw_internet_access" {

  edge_gateway   = var.vcdorgedgename

  name = "Internet Access"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

Po vytvorení závislosti, že po spracovaní bloku vcdnetworkrouted.net pokračujeme v konfigurácii bloku vcdnsxvfirewallrule, s помощью záleží na. Túto možnosť používame, pretože niektoré závislosti môžu byť v konfigurácii implicitne rozpoznané.

Ďalej vytvoríme pravidlá, ktoré povolia prístup k portom z externej siete a uvedieme našu IP adresu na pripojenie cez SSH k serverom. Každý užívateľ internetu má prístup k portom 80 a 443 na webovom serveri a užívateľ s IP adresou 90.1.15.1 má prístup k SSH portom virtuálnych serverov.

Povoliť prístup k portom z externej siete.

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]

}

Vytvárame pravidlá Source NAT pre prístup na internet z cloudovej lokálnej siete:

Opisujeme pravidlá 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]

}

A na dokončenie konfigurácie sieťového bloku pridávame pravidlá Cieľového NAT pre prístup k službám z externej siete:

Pridanie pravidiel NAT pre destináciu.

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]

}

Pridajte pravidlo NAT na preklad portov na server 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]

}

Pridajte pravidlo NAT na preklad portov na server SSH pomocou 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]

}

Pridajte pravidlo NAT na preklad portov na server SSH pomocou 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]

}

Konfigurácia virtuálneho prostredia Main.tf

Ako sme plánovali na začiatku článku, vytvoríme tri virtuálne stroje. Budú pripravené pomocou „Prispôsobenia hosťa“. Nastavíme parametre siete podľa nami zadaných nastavení a heslo používateľa sa vygeneruje automaticky.

Poďme si popísať vApp, v ktorej budú virtuálne stroje umiestnené a ich konfiguráciu.

Ako spravovať cloudovú infraštruktúru pomocou TerraformKonfigurácia virtuálneho počítača

Poďme vytvoriť kontajner vApp. Aby sme mohli okamžite pripojiť vApp a VM k virtuálnej sieti, pridáme aj parameter Depend_on:

Vytvorte kontajner

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

}

Vytvorme virtuálny stroj s popisom

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

}

}

Hlavné parametre v popise VM:

  • meno — názov virtuálneho počítača,

  • vappname – názov vApp, do ktorého sa má pridať nový VM,

  • katalóg / názov šablóny - názov katalógu a názov šablóny virtuálneho počítača,

  • storageprofile - predvolená politika ukladania.

Parametre sieťového bloku:

  • typ — typ pripojenej siete,

  • názov – ku ktorej virtuálnej sieti sa má virtuálny počítač pripojiť,

  • isprimary - primárny sieťový adaptér,

  • ipallocation_mode — režim prideľovania adresy MANUAL / DHCP / POOL,

  • ip — IP adresa pre virtuálny stroj, zadáme ju ručne.

blok override_template_disk:

  • sizeinmb — veľkosť zavádzacieho disku pre virtuálny počítač

  • storage_profile — politika ukladania pre disk

Vytvorme druhý VM s popisom úložiska súborov 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 časti vcdvminternal_disk popíšeme nový virtuálny disk, ktorý je pripojený k virtuálnemu stroju.

Vysvetlenia pre blok vcdvminternaldisk:

  • bustype - typ radiča disku

  • sizeinmb — veľkosť disku

  • busnumber / unitnumber - miesto pripojenia v adaptéri

  • storage_profile — politika ukladania pre disk

Poďme si popísať najnovší VM na Bitrixe

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

}

}

Aktualizácia OS a inštalácia ďalších skriptov

Sieť je pripravená, virtuálne stroje sú opísané. Pred importovaním našej infraštruktúry môžeme vykonať počiatočné zriadenie vopred pomocou provizórnych blokov a bez použitia Ansible.

Pozrime sa, ako aktualizovať OS a spustiť inštalačný skript CMS Bitrix pomocou provízneho bloku.

Najprv si nainštalujte aktualizačné balíčky 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" ]

}

}

}

Označenie komponentov:

  • Provider „remote-exec“ - pripojte blok vzdialeného poskytovania

  • V bloku pripojenia popisujeme typ a parametre pripojenia:

  • typ — protokol, v našom prípade SSH;

  • užívateľ — užívateľské meno;

  • heslo — heslo používateľa. V našom prípade poukazujeme na parameter vcdvappvm.nginx.customization[0].admin_password, ktorý ukladá vygenerované heslo pre používateľa systému.

  • hostiteľ — externá IP adresa pre pripojenie;

  • port — port pre pripojenie, ktorý bol predtým špecifikovaný v nastaveniach DNAT;

  • inline - vypíše zoznam príkazov, ktoré budú zadané. Príkazy budú zadané v poradí, ako je uvedené v tejto časti.

Ako príklad, poďme dodatočne spustiť inštalačný skript 1C-Bitrix. Výstup výsledku vykonania skriptu bude k dispozícii počas spustenia plánu. Ak chcete nainštalovať skript, najprv opíšeme blok:

Poďme popísať inštaláciu 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"

]

}

A hneď si popíšeme aj aktualizáciu Bitrix.

Príklad poskytovania 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"

]

}

}

Dôležité! Skript nemusí fungovať, ak SELinux vopred nezakážete! Ak potrebujete podrobný článok o inštalácii a konfigurácii CMS 1C-Bitrix pomocou bitrix-env.sh, oo môžete použite náš blogový článok na webovej stránke.

3. Inicializácia infraštruktúry

Ako spravovať cloudovú infraštruktúru pomocou TerraformInicializácia modulov a doplnkov

Na prácu používame jednoduchú „gentleman’s kit“: notebook s OS Windows 10 a distribučnú sadu z oficiálnej stránky terraform.io. Poďme rozbaliť a inicializovať pomocou príkazu: terraform.exe init

Po opísaní výpočtovej a sieťovej infraštruktúry spúšťame plánovanie na testovanie našej konfigurácie, kde vidíme, čo sa vytvorí a ako to bude navzájom prepojené.

  1. Vykonajte príkaz - terraform plan -var-file=vcd.tfvars.

  2. Dostaneme výsledok - Plan: 16 to add, 0 to change, 0 to destroy. To znamená, že podľa tohto plánu sa vytvorí 16 zdrojov.

  3. Plán spúšťame na povel - terraform.exe apply -var-file=vcd.tfvars.

Vytvoria sa virtuálne stroje a následne sa spustia balíky, ktoré sme uviedli v sekcii provizória - OS sa aktualizuje a nainštaluje sa CMS Bitrix.

Prijímanie informácií o pripojení

Po vykonaní plánu chceme dostávať údaje v textovej forme na pripojenie k serverom, na tento účel naformátujeme výstupnú časť nasledovne:

output "nginxpassword" {

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

}

A nasledujúci výstup nám povie heslo pre vytvorený virtuálny stroj:

Outputs: nginx_password = F#4u8!!N

Vďaka tomu získame prístup k virtuálnym strojom s aktualizovaným operačným systémom a predinštalovanými balíkmi pre našu ďalšiu prácu. Všetko je pripravené!

Ale čo ak už máte existujúcu infraštruktúru?

3.1. Pracovný Terraform s existujúcou infraštruktúrou

Je to jednoduché, aktuálne virtuálne stroje a ich kontajnery vApp môžete importovať pomocou príkazu import.

Poďme popísať prostriedok vAPP a virtuálny stroj.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Ďalším krokom je importovanie vlastností prostriedkov vApp vo formáte vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, kde:

  • vApp - názov vApp;

  • org — názov organizácie;

  • org_vdc — názov virtuálneho dátového centra.

Ako spravovať cloudovú infraštruktúru pomocou TerraformImport vlastností prostriedku vAPP

Importujme vlastnosti prostriedkov VM vo formáte: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, v ktorom:

  • VM - názov VM;

  • vApp - názov vApp;

  • org — názov organizácie;

  • orgvdc je názov virtuálneho dátového centra.

Import bol úspešný

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.

Teraz sa môžeme pozrieť na nový importovaný zdroj:

Importovaný zdroj

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

}

}

Teraz sme definitívne pripravení – skončili sme s posledným bodom (import do existujúcej infraštruktúry) a zvážili sme všetky hlavné body práce s Terraformom. 

Tento nástroj sa ukázal ako veľmi pohodlný a umožňuje vám opísať vašu infraštruktúru ako kód, počnúc virtuálnymi strojmi jedného poskytovateľa cloudu až po popis zdrojov sieťových komponentov.

Nezávislosť od prostredia zároveň umožňuje pracovať s lokálnymi, cloudovými zdrojmi a dokonca aj spravovať platformu. A ak neexistuje podporovaná platforma a chcete pridať novú, môžete si napísať vlastného poskytovateľa a používať ho.

Zdroj: hab.com

Pridať komentár