Selles artiklis vaatleme, millest Terraform koosneb, ja käivitame järk-järgult ka oma infrastruktuuri
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
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
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
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.
Loomisel 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.
Virtuaalse 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
3. Infrastruktuuri lähtestamine
Moodulite ja pistikprogrammide lähtestamine
Tööks kasutame lihtsat “härrasmeeste komplekti”: Windows 10 OS-iga sülearvutit ja ametlikult veebisaidilt pärinevat turustuskomplekti 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.
-
Täitke käsk
- terraform plan -var-file=vcd.tfvars
. -
Saame tulemuse
- Plan: 16 to add, 0 to change, 0 to destroy.
See tähendab, et selle plaani kohaselt luuakse 16 ressurssi. -
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.
VAPP-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