Kuidas hallata pilveinfrastruktuuri Terraformiga

Kuidas hallata pilveinfrastruktuuri Terraformiga

Selles artiklis vaatleme, millest Terraform koosneb, ja käivitame järk-järgult ka oma infrastruktuuri pilves koos VMware'iga — valmistame ette kolm erineva otstarbega VM-i: puhverserver, failisalvestus ja CMS.

Kõigest üksikasjalikult ja kolmes etapis:

1. Terraform - kirjeldus, eelised ja komponendid

Terraform on IaC (Infrastructure-as-Code) tööriist virtuaalse infrastruktuuri ehitamiseks ja haldamiseks koodi abil.

Märkasime tööriistaga töötamisel mitmeid eeliseid:

  • Uute üürnike kasutuselevõtu kiirus (kohandatud virtuaalsed keskkonnad). Tavaliselt, mida rohkem on uusi kliente, seda rohkem on tehnilise toe töötajad uute ressursside avaldamiseks "klõpsud". Terraformiga saavad kasutajad muuta virtuaalmasina sätteid (näiteks OS-i automaatselt välja lülitada ja virtuaalse ketta partitsiooni suurendada), ilma et oleks vaja tehnilist tuge või masinat ennast välja lülitada.

  • Aktiveerimisplaani kohene kontrollimine uus Tennant. Taristu koodi kirjeldust kasutades saame koheselt kontrollida, mida ja mis järjekorras lisatakse, samuti millises lõppseisundis see või teine ​​virtuaalmasin või virtuaalmasinatega ühendustega virtuaalvõrk on.

  • Oskus kirjeldada populaarsemaid pilveplatvorme. Saate tööriista kasutada Amazonist ja Google Cloudist VMware vCloud Directoril põhinevatele privaatplatvormidele, mis pakuvad teenuseid IaaS, SaaS ja PaaS lahendustes.

  • Hallake mitut pilveteenuse pakkujat ja levitada infrastruktuuri nende vahel, et parandada tõrketaluvust, kasutades pilveressursside loomiseks, diagnoosimiseks ja haldamiseks ühte konfiguratsiooni.

  • Mugav kasutamine demostendide loomiseks tarkvara testimiseks ja silumiseks. Saate luua ja teisaldada testimisosakonna aluseid, testida tarkvara paralleelselt erinevates keskkondades ning ressursse koheselt muuta ja kustutada, luues vaid ühe ressursiehitusplaani

"Terraarium" Terraform

Rääkisime lühidalt tööriista eelistest, nüüd jagame selle komponentideks

Pakkujad. 

Terraformis saab ressursina esitada peaaegu igat tüüpi infrastruktuuri. Ressursside ja API platvormi vahelist ühendust pakuvad pakkuja moodulid, mis võimaldavad luua ressursse kindla platvormi, näiteks Azure või VMware vCloud Directori piires.

Projekti raames saate suhelda erinevate pakkujatega erinevatel platvormidel.

Vahendid (ressursside kirjeldus).

Ressursside kirjeldus võimaldab hallata platvormi komponente, näiteks virtuaalseid masinaid või võrke. 

Saate ise luua VMware vCloud Directori pakkuja ressursikirjelduse ja kasutada seda kirjeldust ressursside loomiseks mis tahes hostimisteenuse pakkujaga, kes kasutab vCloud Directorit. Peate muutma ainult autentimisparameetrid ja võrguühenduse parameetrid vajalikule hostimisteenuse pakkujale

Varustajad.

See komponent võimaldab pärast virtuaalmasinate loomist teha operatsioonisüsteemi esmase installimise ja hoolduse toiminguid. Kui olete virtuaalmasina ressursi loonud, saate SSH kaudu konfigureerimiseks ja ühenduse loomiseks, operatsioonisüsteemi värskendamiseks ning skripti allalaadimiseks ja käivitamiseks kasutada teenusepakkujaid. 

Sisend- ja väljundmuutujad.

Sisendmuutujad – mis tahes plokitüüpide sisendmuutujad. 

Väljundmuutujad võimaldavad salvestada väärtusi pärast ressursside loomist ja neid saab kasutada sisendmuutujatena teistes moodulites, näiteks Provisioners plokis.

osariigid.

Osariikide failid salvestavad teavet pakkuja platvormi ressursside konfiguratsiooni kohta. Platvormi esmakordsel loomisel puudub teave ressursside kohta ja enne mis tahes toimingut värskendab Terraform olekut juba kirjeldatud ressursside tegeliku infrastruktuuriga.

Olekute põhieesmärk on salvestada hulk objekte juba loodud ressurssidest, et võrrelda lisatud ressursside ja objektide konfiguratsiooni, et vältida korduvat loomist ja platvormi muutmist.

Vaikimisi salvestatakse olekuteave kohalikku terraform.tfstate faili, kuid vajadusel on võimalik meeskonnatööks kasutada kaugsalvestust.

Samuti saate importida praeguseid platvormi ressursse olekusse, et suhelda teiste ressurssidega, mis omakorda loodi ilma Terraformi abita.  

2. Infrastruktuuri loomine

Komponendid on välja sorteeritud, nüüd Terraformi abil loome järk-järgult kolme virtuaalmasinaga taristu. Esimene installitud nginxi puhverserveriga, teine ​​Nextcloudil põhineva failisalvestusega ja kolmas CMS Bitrixiga.

Kirjutame koodi ja käivitame selle meie näite abil pilved rakenduses VMware vCloud Director. Meie kasutajad saavad konto organisatsiooni administraatori õigustega.Kui kasutate samade õigustega kontot mõnes teises VMware pilves, saate koodi reprodutseerida meie näidetest. Mine!

Kõigepealt loome oma uue projekti jaoks kataloogi, kuhu paigutatakse infrastruktuuri kirjeldavad failid.

mkdir project01

Järgmisena kirjeldame infrastruktuuri komponente. Terraform loob seoseid ja töötleb faile vastavalt failides olevale kirjeldusele. Faile ise saab nimetada vastavalt kirjeldatavate plokkide otstarbele, näiteks network.tf – kirjeldab infrastruktuuri võrguparameetreid.

Meie infrastruktuuri komponentide kirjeldamiseks lõime järgmised failid:

Failide loend.

main.tf - virtuaalse keskkonna parameetrite kirjeldus - virtuaalsed masinad, virtuaalsed konteinerid;

network.tf - virtuaalse võrgu parameetrite ning NAT ja tulemüüri reeglite kirjeldus;

variables.tf - muutujate loend, mida kasutame;

vcd.tfvars - VMware vCloud Directori mooduli projekti muutujate väärtused.

Terraformi konfiguratsioonikeel on deklaratiivne ja plokkide järjekord ei oma tähtsust, välja arvatud provisjoniplokkide puhul, sest selles plokis kirjeldame infrastruktuuri ettevalmistamisel täidetavaid käske ja need täidetakse järjekorras.

Plokkide struktuur.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Plokkide kirjeldamiseks kasutatakse oma programmeerimiskeelt HCL (HashiCorp Configuration Language), infrastruktuuri on võimalik kirjeldada JSON-i abil. Lisateavet saate süntaksi kohta loe arendaja veebisaidilt.

Keskkonnamuutujate konfiguratsioon, variables.tf ja vcd.tfvars

Esiteks loome kaks faili, mis kirjeldavad VMware vCloud Directori mooduli kõigi kasutatud muutujate loendit ja nende väärtusi. Kõigepealt loome faili variables.tf.

Faili variables.tf sisu.

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

Muutuvad väärtused, mille me teenusepakkujalt saame.

  • vcd_org_user — organisatsiooni administraatori õigustega kasutajanimi,

  • vcd_org_password — kasutaja parool,

  • vcd_org – organisatsiooni nimi,

  • vcd_org_vdc — virtuaalse andmekeskuse nimi,

  • vcd_org_url – API URL,

  • vcd_org_edge_name — virtuaalse ruuteri nimi,

  • vcd_org_catalog — virtuaalse masina mallidega kataloogi nimi,

  • vcd_edge_external_ip — avalik IP-aadress,

  • vcd_edge_external_network — välisvõrgu nimi,

  • vcd_org_hdd_sp — HDD salvestuspoliitika nimi,

  • vcd_org_ssd_sp — SSD salvestuspoliitika nimi.

Ja sisestage meie muutujad:

  • vcd_edge_local_ip_nginx — NGINX-iga virtuaalmasina IP-aadress,

  • vcd_edge_local_ip_bitrix – 1C: Bitrixiga virtuaalmasina IP-aadress,

  • vcd_edge_local_ip_nextcloud — Nextcloudiga virtuaalmasina IP-aadress.

Teise failiga loome ja määrame VMware vCloud Directori mooduli muutujad failis vcd.tfvars: Tuletame meelde, et meie näites kasutame enda pilv mClouds, kui töötate mõne teise teenusepakkujaga, kontrollige väärtusi nendega. 

Faili vcd.tfvars sisu.

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"

Võrgu konfiguratsioon, network.tf.

Keskkonnamuutujad on seatud, nüüd seadistame virtuaalmasina ühendusskeemi – määrame igale virtuaalmasinale privaatse IP-aadressi ja kasutame siht-NAT-i, et pordid välisvõrku edasi suunata. Juurdepääsu piiramiseks haldusportidele määrame juurdepääsu ainult meie IP-aadressile.

Kuidas hallata pilveinfrastruktuuri TerraformigaLoomisel oleva Terraformi platvormi võrguskeem

Loome virtuaalse organisatsioonivõrgu nimega net_lan01, vaikelüüs: 192.168.110.254 ja ka aadressiruumiga: 192.168.110.0/24.

Kirjeldame virtuaalset võrku.

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"

  }

}

Loome tulemüürireeglid, mis võimaldavad virtuaalmasinatel Internetti pääseda. Selles plokis on kõigil pilves olevatel virtuaalressurssidel juurdepääs Internetile:

Kirjeldame VM-i Interneti-juurdepääsu reegleid.

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]

}

Olles tuvastanud sõltuvuse, et pärast ploki vcdnetworkrouted.net töötlemist jätkame vcdnsxvfirewallreegli ploki konfigureerimist, kasutades sõltub. Kasutame seda suvandit, kuna konfiguratsioonis võidakse kaudselt tuvastada mõningaid sõltuvusi.

Järgmisena loome reeglid, mis võimaldavad juurdepääsu välisvõrgu portidele ja näitavad meie IP-aadressi SSH kaudu serveritega ühenduse loomiseks. Igal Interneti-kasutajal on juurdepääs veebiserveri portidele 80 ja 443 ning kasutajal IP-aadressiga 90.1.15.1 on juurdepääs virtuaalserverite SSH-portidele.

Lubage juurdepääs välisvõrgu portidele.

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]

}

Loome Source NAT reeglid Interneti-juurdepääsuks pilve kohalikust võrgust:

Kirjeldame Source NAT reegleid.

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]

}

Ja võrguploki konfigureerimise lõpuleviimiseks lisame välisvõrgust teenustele juurdepääsuks sihtkoha NAT-i reeglid:

Sihtkoha NAT-reeglite lisamine.

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]

}

Lisage NAT-reegel pordi tõlkimiseks SSH-serverisse Nginxi all.

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]

}

Lisage 1C-Bitrixiga SSH-serverisse pordi tõlkimise NAT-reegel.

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]

}

Lisage Nextcloudiga SSH-serverisse pordi tõlkimise NAT-reegel.

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 virtuaalse keskkonna konfiguratsioon

Nagu artikli alguses plaanisime, loome kolm virtuaalmasinat. Need valmistatakse ette "Külalise kohandamise" abil. Seadistame võrguparameetrid vastavalt meie määratud sätetele ja kasutaja parool genereeritakse automaatselt.

Kirjeldame vAppi, milles virtuaalmasinad asuvad, ja nende konfiguratsiooni.

Kuidas hallata pilveinfrastruktuuri TerraformigaVirtuaalse masina konfiguratsioon

Loome vApp konteineri. Et saaksime vAppi ja VM-i kohe virtuaalse võrguga ühendada, lisame ka parameetri addict_on:

Loo konteiner

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

}

Loome virtuaalse masina koos kirjeldusega

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

}

}

Peamised parameetrid VM-i kirjelduses:

  • nimi – virtuaalse masina nimi,

  • vappname – vApp-i nimi, millele uus VM lisada,

  • Kataloogi nimi / malli nimi – kataloogi nimi ja virtuaalmasina malli nimi,

  • storageprofile – vaikesalvestuspoliitika.

Võrguploki parameetrid:

  • tüüp – ühendatud võrgu tüüp,

  • nimi – millise virtuaalse võrguga VM ühendada,

  • isprimary - esmane võrguadapter,

  • ipallocation_mode — MANUAL / DHCP / POOL aadressi eraldamise režiim,

  • ip — virtuaalmasina IP-aadress, määrame selle käsitsi.

override_template_disk block:

  • sizeinmb – virtuaalmasina alglaadimisketta suurus

  • storage_profile — ketta salvestuspoliitika

Loome teise virtuaalmasina koos Nextcloudi failisalvestusruumi kirjeldusega

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 ]

}

Jaotises vcdvminternal_disk kirjeldame uut virtuaalset ketast, mis on ühendatud virtuaalmasinaga.

Vcdvminternaldisk ploki selgitused:

  • bustype - kettakontrolleri tüüp

  • sizeinmb — ketta suurus

  • siininumber / üksuse number - ühenduskoht adapteris

  • storage_profile — ketta salvestuspoliitika

Kirjeldame Bitrixi uusimat VM-i

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

}

}

OS-i värskendamine ja täiendavate skriptide installimine

Võrk on ette valmistatud, virtuaalsed masinad on kirjeldatud. Enne oma taristu importimist saame teostada esialgse varustamise eelnevalt, kasutades provisjoniplokke ja ilma Ansible'i kasutamata.

Vaatame, kuidas OS-i värskendada ja CMS Bitrixi installiskripti käitada, kasutades provisjoniplokki.

Esmalt installime CentOS-i värskenduspaketid.

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

}

}

}

Komponentide tähistus:

  • pakkumine "remote-exec" - ühendage kaughaldusplokk

  • Ühendusplokis kirjeldame ühenduse tüüpi ja parameetreid:

  • tüüp — protokoll, meie puhul SSH;

  • user — kasutajanimi;

  • parool — kasutaja parool. Meie puhul osutame parameetrile vcdvappvm.nginx.customization[0].admin_password, mis salvestab süsteemi kasutaja jaoks loodud parooli.

  • host — ühenduse väline IP-aadress;

  • port – ühenduse port, mis oli eelnevalt DNAT sätetes määratud;

  • inline – loetlege sisestatavate käskude loend. Käsud sisestatakse selles jaotises näidatud järjekorras.

Näitena käivitame lisaks 1C-Bitrixi installiskripti. Skripti täitmise tulemuse väljund on saadaval plaani töötamise ajal. Skripti installimiseks kirjeldame kõigepealt plokki:

Kirjeldame 1C-Bitrixi installimist.

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"

]

}

Ja me kirjeldame kohe Bitrixi värskendust.

1C-Bitrixi varustamise näide.

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"

]

}

}

Tähtis! Skript ei pruugi töötada, kui te SELinuxi eelnevalt ei keela! Kui vajate üksikasjalikku artiklit CMS 1C-Bitrixi installimise ja konfigureerimise kohta bitrix-env.sh abil, saate seda teha kasutage meie ajaveebi artiklit veebisaidil.

3. Infrastruktuuri lähtestamine

Kuidas hallata pilveinfrastruktuuri TerraformigaMoodulite ja pistikprogrammide lähtestamine

Tööks kasutame lihtsat “härrasmeeste komplekti”: Windows 10 OS-iga sülearvutit ja ametlikult veebisaidilt pärinevat turustuskomplekti terraform.io. Pakime lahti ja lähtestame käsuga: terraform.exe init

Peale andmetöötluse ja võrgutaristu kirjeldamist alustame planeerimisega, et testida oma konfiguratsiooni, kus saame näha, mida luuakse ja kuidas see omavahel ühendatakse.

  1. Täitke käsk - terraform plan -var-file=vcd.tfvars.

  2. Saame tulemuse - Plan: 16 to add, 0 to change, 0 to destroy. See tähendab, et selle plaani kohaselt luuakse 16 ressurssi.

  3. Käivitame plaani käsu peale - terraform.exe apply -var-file=vcd.tfvars.

Luuakse virtuaalsed masinad ja seejärel käivitatakse provisjoni jaotises meie loetletud paketid - OS värskendatakse ja CMS Bitrix installitakse.

Ühendusteabe vastuvõtmine

Pärast plaani täitmist soovime saada serveritega ühenduse loomiseks andmeid teksti kujul, selleks vormindame väljundi jaotise järgmiselt:

output "nginxpassword" {

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

}

Ja järgmine väljund ütleb meile loodud virtuaalmasina parooli:

Outputs: nginx_password = F#4u8!!N

Tänu sellele saame oma edasiseks tööks ligipääsu uuendatud operatsioonisüsteemiga ja eelinstallitud pakettidega virtuaalmasinatele. Kõik on valmis!

Aga mis siis, kui teil on juba olemasolev infrastruktuur?

3.1. Töökorras Terraform olemasoleva infrastruktuuriga

See on lihtne. Impordikäsuga saate importida praeguseid virtuaalmasinaid ja nende vApp-konteinereid.

Kirjeldame vAPP-i ressurssi ja virtuaalmasinat.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Järgmine samm on vApp-i ressursside atribuutide importimine vormingus vcdvapp.<vApp> <org>.<orgvdc>.<vApp>kus:

  • vApp – vApp nimi;

  • org – organisatsiooni nimi;

  • org_vdc — virtuaalse andmekeskuse nimi.

Kuidas hallata pilveinfrastruktuuri TerraformigaVAPP-i ressursi atribuutide importimine

Impordime VM-i ressursside atribuudid järgmises vormingus: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, milles:

  • VM – VM nimi;

  • vApp – vApp nimi;

  • org – organisatsiooni nimi;

  • orgvdc on virtuaalse andmekeskuse nimi.

Import õnnestus

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.

Nüüd saame vaadata uut imporditud ressurssi:

Imporditud ressurss

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

}

}

Nüüd oleme kindlasti valmis – oleme viimase punktiga (importimine olemasolevasse taristusse) valmis ja läbi mõelnud kõik Terraformiga töötamise põhipunktid. 

Tööriist osutus väga mugavaks ja võimaldab kirjeldada oma infrastruktuuri koodina, alustades ühe pilvepakkuja virtuaalmasinatest kuni võrgukomponentide ressursside kirjeldamiseni.

Samal ajal võimaldab sõltumatus keskkonnast töötada kohalike, pilveressurssidega ja isegi hallata platvormi. Ja kui toetatud platvormi pole ja soovite lisada uue, võite kirjutada oma pakkuja ja seda kasutada.

Allikas: www.habr.com

Lisa kommentaar