Kuidas hallata pilveinfrastruktuuri Terraformi abil

Kuidas hallata pilveinfrastruktuuri Terraformi abil

Selles artiklis vaatleme, millest Terraform koosneb, ning samas etapis käivitame oma infrastruktuuri pilves VMwareiga — valmistame ette kolm VM erinevate eesmärkide jaoks: vahendaja, failide salvestamine ja CMS.

Kõigest üksikasjalikult ja kolme etapi kaupa:

1. Terraform — kirjeldus, eelised ja komponendid

Terraform on IaC (Infrastructure-as-Code) tööriist virtuaalse infrastruktuuri loomise ja haldamise jaoks koodi abil.

Tööriista kasutamisel märkisime mitmeid eeliseid:

  • Uute tenantide juurutamise kiirus (kasutaja virtuaalsed keskkonnad). Tavaliselt, mida rohkem uusi kliente, seda rohkem «klikke» peab tehnilise toe töötaja tegema uute ressursside avaldamiseks. Terraformiga saavad kasutajad muuta virtuaalmasinate (nt automaatselt välja lülitada OS-i ja suurendada virtuaaldiski jagu) parameetreid ilma tehnilise toe ja masina välja lülitamiseta.

  • Äkitselt aktiveerimise plaani kontrollimine uue tenantide kohta. Infrastruktuurikoodi kirjelduse abil saame kohe kontrollida, mis ja millises järjekorras lisatakse, samuti millises lõppseisundis on teatud virtuaalne masin või virtuaalne võrk koos ühendustega virtuaalmasinatega.

  • Võimalus kirjeldada enamiku populaarseid pilveplatvorme. Saate kasutada tööriista Amazonist ja Google Cloudist kuni privaatsete VMware vCloud Directoril põhinevate platvormideni, mis pakuvad teenuseid IaaS, SaaS ja PaaS lahenduste raames.

  • Haldada mitmeid pilveteenuse pakkujaid ja jaotada infrastruktuuri nende vahel kõrge kättesaadavuse saavutamiseks, kasutades ühte konfiguratsiooni pilveressursside loomiseks, diagnostikaks ja haldamiseks.

  • Mugav kasutamine demo-standide loomisel tarkvara testimiseks ja silumiseks. Saate luua ja edastada stande testimisosakonnale, samal ajal kontrollides tarkvara erinevates keskkondades, samuti hetkega muuta ja eemaldada ressursse, luues vaid ühe ressursi ehitamise plaani.

Terraformi «Terrarium»

Oleme lühidalt rääkinud tööriista eelistest, nüüd analüüsime selle komponente

Providers (pakkujad). 

Terraformis saab peaaegu iga tüüpi infrastruktuuri esitada ressursina. Ressursside ja API platvormi vahelise ühenduse tagavad providerit moodulid, mis võimaldavad luua ressursse teatud platvormi, näiteks Azure või VMware vCloud Directori raames.

Projekti raames saate suhelda erinevate pakkujatega erinevates platvormides.

Ressursid (ressursside kirjeldus).

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

Saate ise luua ressursi kirjelduse VMware vCloud Directori pakkujaks ja kasutada seda kirjeldust ressursside loomiseks igasugustes hostimisteenustes, mis kasutavad vCloud Directorit. Teil tuleb vaid asendada autentimisparameetrid ja võrguühenduse parameetrid vajaliku hostimisteenuse pakkujaga.

Provisioners.

See komponent võimaldab teostada algse seadistamise ja operatsioonisüsteemi hooldust pärast virtuaalmasinate loomist. Pärast virtuaalmasina ressursi loomist saate provisionerite abil seadistada ja SSH-ühenduse luua, operatsioonisüsteemi uuendada ning alla laadida ja käivitada skripti. 

Sisendi ja väljundi muutujad.

Sisendmuutujad on kõikide plokkide jaoks sisendmuutujad. 

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

Olekufailid..

Olekufailid säilitavad teavet pakkuja platvormi ressursside konfiguratsiooni kohta. Platvormi esmakordsel loomisel ei ole ressursse puudutavaid andmeid ning enne iga toimingut värskendab Terraform seisundit juba kirjeldatud ressursside reaalse infrastruktuuriga.

Oleku peamine eesmärk on säilitada loodud ressursside objektide seos, et võrrelda lisatavate ressursside ja objektide konfiguratsiooni, et vältida platvormi uuesti loomist ja muutmist.

Oleku teave salvestatakse vaikimisi kohalikku faili terraform.tfstate, kuid vajadusel on võimalik kasutada eemalolevat salvestust meeskonnatöös töötamiseks.

Samuti saate importida praegused platvormi ressursid seisundisse, et suhelda edaspidi teiste ressurssidega, mis on loodud ilma Terraformita.  

2. Infrastruktuuri loomine

Komponendid on läbi vaadatud, nüüd loome Terraformiga samm-sammult infrastruktuuri, kus on kolm virtuaalset masinat. Esimene koos nginx-proksi serveriga, teine Nextcloudi põhine failihoidla ja kolmas CMS Bitrix.

Koodi kirjutame ja käitame meie VMware vCloud Directorpilve näite põhjal. Meie kasutajad saavad Organization Administratori õigustega konto, kui kasutate teises VMware pilves sama õiguste kontot, siis suudate meie näidetest koodi vastata. Alustame!

Esmalt loome meie uue projekti jaoks kausta, kuhu paigutame infrastruktuuri kirjeldavad failid.

mkdir project01

Seejärel kirjeldame infrastruktuuri komponente. Terraform loob seosed ja töötleb faile nende failide kirjelduste alusel. Faile saab nimetada lähtuvalt kirjeldatavate plokkide sihtotstarbest, näiteks network.tf — kirjeldab infrastruktuuri võrguparametreid.

Infrastruktuuri komponentide kirjeldamiseks oleme loonud järgmised failid:

Failide loend.

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

network.tf — virtuaalse võrgu ja NAT, Firewall reeglite parameetrite kirjeldus;

variables.tf — muutuja loend, mida kasutame;

vcd.tfvars — projekti muutuja väärtused VMware vCloud Director mooduli jaoks.

Terraformi konfiguratsiooni keel on deklaratiivne ja plokkide järjekord ei oma tähtsust, välja arvatud provisioner plokkides, kuna selles plokis kirjeldame infrastruktuuri ettevalmistamise käskusid ja need täidetakse järjest.

Plokkide struktuur.

"" "" {

# Block body

= # Argument

}

Plokkide kirjeldamiseks kasutatakse HCL (HashiCorp Configuration Language) enda programmeerimiskeelt, infrastruktuuri saab kirjeldada ka JSON-i abil. Rohkem süntaksist saab lugeda arendaja veebisaidilt.

Keskkonnamuutujate konfiguratsioon, variables.tf ja vcd.tfvars

Esmalt loome kaks faili, mis kirjeldavad kõiki kasutatavaid muutujaid ja nende väärtusi VMware vCloud Director mooduli jaoks. Esimene on faili variables.tf loomine.

Faili variables.tf sisu.

muutuja "vcd_org_user" {

  kirjeldus = "vCD Rentniku Kasutaja"

}

muutuja "vcd_org_password" {

  kirjeldus = "vCD Rentniku Parool"

}

muutuja "vcd_org" {

  kirjeldus = "vCD Rentniku Org"

}

muutuja "vcd_org_vdc" {

  kirjeldus = "vCD Rentniku VDC"

}

muutuja "vcd_org_url" {

  kirjeldus = "vCD Rentniku URL"

}

muutuja "vcd_org_max_retry_timeout" {

  vaikimisi = "60"

}

muutuja "vcd_org_allow_unverified_ssl" {

  vaikimisi = "tõene"

}

muutuja "vcd_org_edge_name" {

  kirjeldus = "vCD serva nimi"

}

muutuja "vcd_org_catalog" {

  kirjeldus = "vCD avalik kataloog"

}

muutuja "vcd_template_os_centos7" {

  kirjeldus = "OS CentOS 7"

  vaikimisi = "CentOS7"

}

muutuja "vcd_org_ssd_sp" {

  kirjeldus = "Salvestusstrateegiad"

  vaikimisi = "Kuldse Salvestusstrateegia"

}

muutuja "vcd_org_hdd_sp" {

  kirjeldus = "Salvestusstrateegiad"

  vaikimisi = "Pronks Salvestusstrateegia"

}

muutuja "vcd_edge_local_subnet" {

  kirjeldus = "Organisatsiooni Võrgu Alamvõrk"

}

muutuja "vcd_edge_external_ip" {

  kirjeldus = "Väline avalik IP"

}

muutuja "vcd_edge_local_ip_nginx" {}

muutuja "vcd_edge_local_ip_bitrix" {}

muutuja "vcd_edge_local_ip_nextcloud" {}

muutuja "vcd_edge_external_network" {}

Muutujad, mille me saame pakkujalt.

  • 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 marsruuteri nimi,

  • vcd_org_catalog — virtuaalmasinate mallide kataloogi nimi,

  • vcd_edge_external_ip — avalik IP-aadress,

  • vcd_edge_external_network — välise võrgu nimi,

  • vcd_org_hdd_sp — HDD salvestusstrateegia nimi,

  • vcd_org_ssd_sp — SSD salvestusstrateegia nimi.

Ja sisestame oma 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.

Teises failis loome ja määrame muutujad VMware vCloud Director mooduli jaoks failis vcd.tfvars: Tuletame meelde, et meie näites kasutame oma pilve mClouds,, kui töötate teise pakkujaga, küsige väärtusi temalt. 

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 = tõene

vcd_org_catalog = "Templates"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Kuldne Salvestusstrateegia"

vcd_org_hdd_sp = "Pronks Salvestusstrateegia"

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õrgukonfiguratsioon, network.tf.

Keskkonnamuutujad on määratud, nüüd seadistame virtuaalmasinate ühendusskeemi — igale virtuaalmasinale määrame privaatse IP-aadressi ja suuname koos Destination NAT-iga sadamad välisesse võrku. Juhtimist sadamate juurde pääsemise piiramiseks seadistame juurdepääsu ainult meie IP-aadressile.

Kuidas hallata pilveinfrastruktuuri Terraformi abilLootele seab loodava Terraform platvormi võrgu skeem

Loome virtuaalse organisatsioonivõrgu nimega net_lan01, vaikimisi lüüsiga: 192.168.110.254 ning 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üüri reeglid, mis võimaldavad virtuaalmasinatel pääseda Internetti. Selle ploki raames on kõik virtuaalsed ressursid pilves juurdepääsetavad Internetile:

Kirjeldame reegleid VM juurdepääsuks internetti.

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]

}

Seades sõltuvus, et pärast vcdnetworkrouted.net ploki töötlemist jätkame vcdnsxvfirewallrule ploki konfigureerimisega., kasutades dependson. Kasutame seda võimalust, kuna mõned sõltuvused võivad konfigureerimises olla ebamugavad.

Järgnevalt loome reeglid, mis võimaldavad juurdepääsu sadamatele välisest võrgust ning näitame meie IP-aadressi SSH-ühenduseks serveritega. Igal Interneti kasutajal on juurdepääs sadamatele 80 ja 443 veebiserveris ning kasutaja IP-aadressiga 90.1.15.1 juurdepääs virtuaalserverite SSH-sadamatele.

Lubame juurdepääsu sadamatele välisest võrgust.

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 juurde pääsuks pilves 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õrgubloki konfigureerimise lõpetamiseks lisame Destination NAT reeglid juurdepääsuks teenustele välisest võrgust:

Lisame Destination NAT reeglid.

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]

}

Lisame NAT-reegli, et suunata port SSH-serverile Nginx'i 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]

}

Lisame NAT-reegli, et suunata port SSH-serverile 1C-Bitrix'i all.

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]

}

Lisame NAT-reegli, et suunata port SSH-serverile Nextcloud'i all.

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]

}

Virtuaalse keskkonna konfiguratsioon main.tf

Nagu me artikli alguses planeerisime, loome kolme virtuaalmasina. Need seadistatakse „Guest Customization“ abil. Võrguseaded määrame vastavalt meie määratud seadetele ning kasutaja parool genereeritakse automaatselt.

Kirjeldame vApp'i, kuhu virtuaalmasinad ja nende konfiguratsioon paigutatakse.

Kuidas hallata pilveinfrastruktuuri Terraformi abilVirtuaalmasinate konfiguratsioon

Loome vApp konteineri. Et saaksime kohe vApp'i ja VM-i virtuaalvõrku ühendada, lisame ka parameetri depends_on:

Loome konteineri

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

}

}

VM-i kirjelduse põhialused:

  • name — virtuaalse masina nimi,

  • vappname — vApp'i nimi, kuhu uus VM lisada,

  • catalogname / templatename — katalooge ja virtuaalse masina šablooni nimi,

  • storageprofile — vaikeandmete salvestuspoliitika.

Network ploki parameetrid:

  • type — ühendatava võrgu tüüp,

  • name — millise virtuaalvõrku VM ühendatakse,

  • isprimary — peamine võrguadapter,

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

  • ip — virtuaalse masina IP-aadress, määrame käsitsi.

Override_template_disk plokk:

  • sizeinmb — boot-disk'i suurus virtuaalses masinas

  • storage_profile — salvestuspoliitika diskile

Loome teise VM-i koos Nextcloud'i andmesalvestuse 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

}

}

ressurs "vcd_vm_internal_disk" "disk1" {

vapp_nimi = vcd_vapp.vapp.nimi

vm_nimi = "nextcloud"

bus_tüüp = "paravirtual"

suurus_mb = "102400"

bus_numbr = 0

ühiku_numbr = 1

salvestamis_profiil = var.vcd_org_hdd_sp

luba_vm_uuendamine = true

sõltub = [ vcd_vapp_vm.nextcloud ]

}

Sektsioonis vcdvminternal_disk kirjeldame uut virtuaalset ketast, mis on ühendatud virtuaalmasinale.

Selgitused vcdvminternaldisk ploki kohta:

  • bustüüp — ketas kontrollere tüübi määratlemine

  • suurusmb — ketta suurus

  • busnumbr / ühiku_numbr — ühenduskoht adapteris

  • storage_profile — salvestuspoliitika diskile

Kirjeldame viimast VM-i Bitrixil

ressurs "vcd_vapp_vm" "bitrix" {

vapp_name = vcd_vapp.vapp.name

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

suurus_mb = "81920"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

OS-i uuendamine ja täiendavate skriptide installimine

Võrk on ette valmistatud, virtuaalmasinad on kirjeldatud. Enne meie infrastruktuuri importimist saame eelnevalt läbi viia algse proviisorimise provisioners plokkide abil ilma Ansible'ita.

Vaadakem, kuidas uuendada OS-i ja käivitada CMS Bitrixi installi skript provisioner bloki abil.

Esmalt teeme CentOS uuenduspakettide installimise.

ressurs "null_resource" "nginx_update_install" {

provisioner "remote-exec" {

ühendus {

tüüp = "ssh"

kasutaja = "root"

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

}

}

}

Koostisosade määratlemine:

  • provisioner «remote-exec» — ühendame kaugproviisorimise ploki

  • Ühenduse plokis määratleme ühenduse tüübi ja parameetrid:

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

  • kasutaja — kasutajanimi;

  • parool — kasutaja parool. Meie puhul viitame parameetrile vcdvappvm.nginx.customization[0].admin_password, mis sisaldab genereeritud parooli süsteemi kasutajale.

  • host — välise IP-aadress ühendamiseks;

  • port — ühendusport, mille määrasime varem DNAT seadistustes;

  • inline — loetleme käskude nimekirja, mis sisestatakse. Käskud sisestatakse järjestikku, nagu on märgitud selles sektsioonis.

Näiteks teeme veel 1C-Bitrixi installimise skripti. Skripti käitamise tulemuse väljund on saadaval plaani käitamise ajal. Skripti installimiseks kirjeldame esmalt ploki:

Kirjeldame 1C-Bitrixi installimist.

provisioner "file" {

allikas = "prepare.sh"

sihtkoht = "\/tmp\/prepare.sh"

ühendus {

tüüp = "ssh"

kasutaja = "root"

parool = 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 kohe kirjeldame Bitrixi uuendamist.

1C-Bitrixi proviisorimise näide.

ressurs "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

ühendus {

tüüp = "ssh"

kasutaja = "root"

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

]

}

}

Oluline! Skript ei pruugi töötada, kui SELinux ei ole eelnevalt keelatud! Kui vajate üksikasjalikku artiklit CMS 1C-Bitrixi installimise ja seadistamise kohta bitrix-env.sh abil, võite kasutada meie artiklit veebisaidil.

3. Infrastruktuuri initsialiseerimine

Kuidas hallata pilveinfrastruktuuri Terraformi abilModulite ja pluginade initsialiseerimine

Me kasutame lihtsat "gentlemani komplekti": sülearvutit Windows 10 operatsioonisüsteemiga ja jaotust ametlikult veebilehelt terraform.io. Lahti pakkime ja initsialiseerime selle käsklusega: terraform.exe init

Pärast arvutus- ja võrguinfrastruktuuri kirjeldamist käivitame planeerimise, et kontrollida meie konfiguratsiooni, kus näeme, mis luuakse ja kuidas need omavahel on seotud.

  1. Käivitame käsu - terraform plan -var-file=vcd.tfvars.

  2. Saame tulemuse - Plaan: 16 lisada, 0 muuta, 0 hävitada. See tähendab, et selle plaani kohaselt luuakse 16 ressursi.

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

Virtuaalsed masinad luuakse ja seejärel täidetakse meie loetletud paketid provisioneri sektsioonis — operatsioonisüsteem uuendatakse ja CMS Bitrix paigaldatakse.

Ühendusandmete saamine

Pärast plaani täitmist soovime saada tekstivormingus andmeid serveritega ühenduse loomiseks, selleks koostame väljundi sektsiooni järgmiselt:

output "nginxpassword" {

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

}

Ja järgmine väljund annab meile loodud virtuaalse masina parooli:

Väljundid: nginx_password = F#4u8!!N

Lõppkokkuvõttes saame ligipääsu virtuaalsetele masinatele, millel on uuendatud operatsioonisüsteem ja eelinstallitud paketid meie edasise töö jaoks. Kõik on valmis!

Aga mida teha, kui teil on juba olemasolev infrastruktuur?

3.1. Terraformi töö olemasoleva infrastruktuuriga

Kõik on lihtne, saate olemasolevaid virtuaalseid masinaid ja nende vApp mahuteid importida käsuga import.

Kirjeldame vAPP ressursi ja virtuaalmasina.

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 importida vApp ressursside omadused formaadis vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, kus:

  • vApp — vApp nimi;

  • org — organisatsiooni nimi;

  • org_vdc — virtuaalse andmekeskuse nimi.

Kuidas hallata pilveinfrastruktuuri Terraformi abilvAPP ressursi omaduste import

Impordime VM ressursside omadused formaadis: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, kuna:

  • VM — VM nimi;

  • vApp — vApp nimi;

  • org — organisatsiooni nimi;

  • orgvdc — virtuaalse andmekeskuse nimi.

Impordi oli edukas

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

vcd_vapp_vm.Zabbix: Imporditakse ID-lt "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import on ette valmistatud!

Valmistatud vcd_vapp_vm importimiseks

vcd_vapp_vm.Zabbix: Oleku värskendamine... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import oli edukas!

Üksikasjad imporditud ressurssidest on näidatud ülal. Need ressursid on nüüd
teie Terraformi olekus ja neid haldab edaspidi 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 on kõik valmis — oleme lõpetanud viimase sammu (import olemasolevasse infrastruktuuri) ja vaatlesime kõik kaasnevad punktid Terraformi kasutamisest. 

Tööriist osutus väga mugavaks ning võimaldab kirjeldada teie infrastruktuuri kui koodi, alates ühe pilveteenuse pakkuja virtuaalmasinatest kuni võrgu komponentide ressursside kirjeldamiseni.

Samas sõltumatus keskkonnast annab võimaluse töötada nii kohalike kui ka pilveressurssidega ning lõpetades platvormi haldamisega. Ja kui toetavat platvormi pole ja tekib soov uut lisada, saab kirjutada oma pakkuja ja kasutada seda.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster