Pilviinfrastruktuurin hallinta Terraformin avulla

Pilviinfrastruktuurin hallinta Terraformin avulla

Tässä artikkelissa tarkastellaan, mistä Terraform koostuu, ja otamme myös vähitellen käyttöön oman infrastruktuurimme pilvessä VMwaren kanssa — Valmistelemme kolme virtuaalikonetta eri tarkoituksiin: välityspalvelin, tiedostojen tallennus ja CMS.

Kaikesta yksityiskohtaisesti ja kolmessa vaiheessa:

1. Terraform - kuvaus, edut ja komponentit

Terraform on IaC (Infrastructure-as-Code) -työkalu virtuaalisen infrastruktuurin rakentamiseen ja hallintaan koodin avulla.

Huomasimme useita etuja työskennellessämme työkalun kanssa:

  • Uusien vuokralaisten käyttöönottonopeus (muokatut virtuaaliympäristöt). Tyypillisesti mitä enemmän uusia asiakkaita on, sitä enemmän "napsautuksia" teknisen tuen henkilöstö tarvitsee julkaistakseen uusia resursseja. Terraformin avulla käyttäjät voivat muuttaa virtuaalikoneen asetuksia (esimerkiksi automaattisesti sammuttaa käyttöjärjestelmän ja kasvattaa virtuaalilevyosiota) ilman teknistä tukea tai itse koneen sammuttamista.

  • Aktivointisuunnitelman välitön vahvistus uusi Tennant. Infrastruktuurikoodin kuvauksen avulla voimme heti tarkistaa, mitä lisätään ja missä järjestyksessä sekä missä lopullisessa tilassa tämä tai tuo virtuaalikone tai virtuaaliverkko virtuaalikoneiden yhteyksineen on.

  • Kyky kuvailla suosituimpia pilvialustoja. Voit käyttää työkalua Amazonista ja Google Cloudista yksityisiin VMware vCloud Directoriin perustuviin alustoihin, jotka tarjoavat palveluita IaaS-, SaaS- ja PaaS-ratkaisuissa.

  • Hallitse useita pilvipalveluntarjoajia ja jakaa infrastruktuuri niiden välillä parantaakseen vikasietoisuutta käyttämällä yhtä kokoonpanoa pilviresurssien luomiseen, diagnosointiin ja hallintaan.

  • Kätevä käyttö esittelytelineiden luomiseen ohjelmistojen testaukseen ja virheenkorjaukseen. Voit luoda ja siirtää telineitä testausosastolle, testata ohjelmistoja eri ympäristöissä rinnakkain sekä muuttaa ja poistaa resursseja välittömästi luomalla vain yhden resurssikoontisuunnitelman.

"Terrarium" Terraform

Puhuimme lyhyesti työkalun eduista, nyt jaetaan se osiin

Palveluntarjoajat. 

Terraformissa lähes mikä tahansa infrastruktuuri voidaan esittää resurssina. Yhteyden resurssien ja API-alustan välillä tarjoavat toimittajamoduulit, joiden avulla voit luoda resursseja tietyn alustan sisällä, esimerkiksi Azure tai VMware vCloud Director.

Osana projektia voit olla vuorovaikutuksessa eri palveluntarjoajien kanssa eri alustoilla.

Resurssit (resurssin kuvaus).

Resurssien kuvauksen avulla voit hallita alustakomponentteja, kuten virtuaalikoneita tai verkkoja. 

Voit itse luoda resurssikuvauksen VMware vCloud Director -palveluntarjoajalle ja käyttää tätä kuvausta resurssien luomiseen minkä tahansa vCloud Directoria käyttävän isännöintipalveluntarjoajan kanssa. Sinun tarvitsee vain muuttaa todennusparametrit ja verkkoyhteysparametrit vaaditulle hosting-palveluntarjoajalle

Palveluntarjoajat.

Tämä komponentti mahdollistaa toimintojen suorittamisen käyttöjärjestelmän alkuasennukseen ja ylläpitoon virtuaalikoneiden luomisen jälkeen. Kun olet luonut virtuaalikoneen resurssin, voit käyttää palveluntarjoajia määrittämään ja muodostamaan yhteyden SSH:n kautta, päivittämään käyttöjärjestelmän sekä lataamaan ja suorittamaan komentosarjan. 

Tulo- ja lähtömuuttujat.

Syöttömuuttujat - syötemuuttujat kaikille lohkotyypeille. 

Lähtömuuttujien avulla voit tallentaa arvoja resurssien luomisen jälkeen, ja niitä voidaan käyttää syöttömuuttujina muissa moduuleissa, esimerkiksi Provisioners-lohkossa.

osavaltioissa.

Osavaltiotiedostot tallentavat tietoja palveluntarjoajan alustan resurssien määrityksistä. Kun alusta luodaan ensimmäisen kerran, resursseista ei ole tietoa ja Terraform päivittää tilan jo kuvattujen resurssien todellisella infrastruktuurilla ennen toimenpiteitä.

Tilojen päätarkoitus on tallentaa joukko objekteja jo luoduista resursseista, jotta voidaan verrata lisättyjen resurssien ja objektien konfiguraatioita, jotta vältytään toistuvalta luomiselta ja alustan muutoksilta.

Oletusarvoisesti tilatiedot tallennetaan paikalliseen terraform.tfstate-tiedostoon, mutta tarvittaessa on mahdollista käyttää etätallennustilaa ryhmätyöskentelyyn.

Voit myös tuoda nykyiset alustan resurssit tilaan jatkaaksesi vuorovaikutusta muiden resurssien kanssa, jotka puolestaan ​​luotiin ilman Terraformin apua.  

2. Infrastruktuurin luominen

Komponentit on lajiteltu, nyt Terraformin avulla luomme asteittain infrastruktuurin, jossa on kolme virtuaalikonetta. Ensimmäinen nginx-välityspalvelin asennettuna, toinen Nextcloudiin perustuva tiedostotallennus ja kolmas CMS Bitrix.

Kirjoitamme koodin ja suoritamme sen esimerkkimme avulla pilvet VMware vCloud Directorissa. Käyttäjämme saavat tilin, jolla on organisaation järjestelmänvalvojan oikeudet. Jos käytät tiliä samoilla oikeuksilla toisessa VMware-pilvessä, voit kopioida koodin esimerkeistämme. Mennä!

Ensin luodaan uudelle projektillemme hakemisto, johon sijoitetaan infrastruktuuria kuvaavat tiedostot.

mkdir project01

Seuraavaksi kuvailemme infrastruktuurin komponentteja. Terraform luo suhteita ja käsittelee tiedostoja tiedostojen kuvauksen perusteella. Itse tiedostot voidaan nimetä kuvattavien lohkojen tarkoituksen perusteella, esimerkiksi network.tf - kuvaa infrastruktuurin verkkoparametreja.

Kuvataksemme infrastruktuurimme komponentteja loimme seuraavat tiedostot:

Lista tiedostoista.

main.tf - virtuaaliympäristön parametrien kuvaus - virtuaalikoneet, virtuaalikontit;

network.tf - kuvaus virtuaalisen verkon parametreista sekä NAT- ja palomuurisäännöistä;

variables.tf - luettelo käyttämistämme muuttujista;

vcd.tfvars - projektimuuttujien arvot VMware vCloud Director -moduulille.

Terraformin konfigurointikieli on deklaratiivinen ja lohkojen järjestyksellä ei ole väliä, lukuun ottamatta provisiolohkoja, koska tässä lohkossa kuvataan infrastruktuuria valmisteltaessa suoritettavat komennot ja ne suoritetaan järjestyksessä.

Lohkon rakenne.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Lohkojen kuvaamiseen käytetään sen omaa ohjelmointikieltä HCL (HashiCorp Configuration Language), infrastruktuuria on mahdollista kuvata JSON:n avulla. Voit oppia lisää syntaksista lue kehittäjän verkkosivuilta.

Ympäristömuuttujien kokoonpano, variables.tf ja vcd.tfvars

Luodaan ensin kaksi tiedostoa, jotka kuvaavat luettelon kaikista käytetyistä muuttujista ja niiden arvoista VMware vCloud Director -moduulille. Luodaan ensin variables.tf-tiedosto.

Variables.tf-tiedoston sisältö.

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

muuttuvat arvot, jotka saamme palveluntarjoajalta.

  • vcd_org_user — käyttäjätunnus, jolla on organisaation järjestelmänvalvojan oikeudet,

  • vcd_org_password — käyttäjän salasana,

  • vcd_org — organisaation nimi,

  • vcd_org_vdc — virtuaalisen datakeskuksen nimi,

  • vcd_org_url - API URL,

  • vcd_org_edge_name — virtuaalisen reitittimen nimi,

  • vcd_org_catalog — virtuaalikoneen malleja sisältävän hakemiston nimi,

  • vcd_edge_external_ip — julkinen IP-osoite,

  • vcd_edge_external_network — ulkoisen verkon nimi,

  • vcd_org_hdd_sp — HDD-tallennuskäytännön nimi,

  • vcd_org_ssd_sp — SSD-tallennuskäytännön nimi.

Ja syötä muuttujamme:

  • vcd_edge_local_ip_nginx — virtuaalikoneen IP-osoite, jossa on NGINX,

  • vcd_edge_local_ip_bitrix - virtuaalikoneen IP-osoite, jossa on 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — Virtuaalikoneen IP-osoite Nextcloudilla.

Toisella tiedostolla luomme ja määritämme muuttujat VMware vCloud Director -moduulille vcd.tfvars-tiedostossa: Muista, että esimerkissämme käytämme oma pilvi mClouds, jos työskentelet toisen palveluntarjoajan kanssa, tarkista arvot heiltä. 

vcd.tfvars-tiedoston sisältö.

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"

Verkkoasetukset, network.tf.

Ympäristömuuttujat on asetettu, nyt määritämme virtuaalikoneen yhteysmallin - määritämme yksityisen IP-osoitteen jokaiselle virtuaalikoneelle ja käytämme Destination NAT:ia porttien "välittämiseen" ulkoiseen verkkoon. Hallintaporttien käytön rajoittamiseksi määritämme pääsyn vain IP-osoitteellemme.

Pilviinfrastruktuurin hallinta Terraformin avullaLuotava Terraform-alustan verkkokaavio

Luomme virtuaalisen organisaatioverkon, jonka nimi on net_lan01, oletusyhdyskäytävä: 192.168.110.254 ja myös osoiteavaruus: 192.168.110.0/24.

Kuvaamme virtuaalista verkkoa.

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"

  }

}

Luodaan palomuurisäännöt, jotka mahdollistavat virtuaalikoneiden pääsyn Internetiin. Tämän lohkon sisällä kaikilla pilven virtuaalisilla resursseilla on pääsy Internetiin:

Kuvaamme säännöt virtuaalikoneen Internetiin pääsylle.

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]

}

Todettuaan riippuvuuden, että vcdnetworkrouted.net-lohkon käsittelyn jälkeen jatkamme vcdnsxvfirewallsääntö-lohkon määrittämistä., käyttämällä riippuu. Käytämme tätä vaihtoehtoa, koska jotkin riippuvuudet voidaan tunnistaa implisiittisesti kokoonpanossa.

Seuraavaksi luomme säännöt, jotka sallivat pääsyn ulkoisen verkon portteihin ja ilmaisemme IP-osoitteemme SSH-yhteyden muodostamiseksi palvelimiin. Kaikilla Internetin käyttäjillä on pääsy verkkopalvelimen portteihin 80 ja 443, ja käyttäjällä, jonka IP-osoite on 90.1.15.1, on pääsy virtuaalisten palvelimien SSH-portteihin.

Salli pääsy ulkoisen verkon portteihin.

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]

}

Luomme lähde-NAT-säännöt Internetiin pääsyä varten paikallisesta pilviverkosta:

Kuvaamme Source NAT -säännöt.

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 täydentääksemme verkkolohkon konfigurointia, lisäämme Destination NAT -säännöt palveluihin pääsyä varten ulkoisesta verkosta:

Lisätään Destination NAT -sääntöjä.

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]

}

Lisää NAT-sääntö portin kääntämiseksi SSH-palvelimeen Nginxissä.

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]

}

Lisää NAT-sääntö portin kääntämiseksi SSH-palvelimelle 1C-Bitrixin avulla.

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]

}

Lisää NAT-sääntö portin kääntämiseksi SSH-palvelimelle Nextcloudin avulla.

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-virtuaaliympäristön määritys

Kuten artikkelin alussa suunnittelimme, luomme kolme virtuaalikonetta. Ne valmistetaan käyttämällä "Vierasmuokkausta". Asetamme verkkoparametrit määrittämiemme asetusten mukaan, ja käyttäjän salasana luodaan automaattisesti.

Kuvataan vApp, jossa virtuaalikoneet sijoitetaan, ja niiden kokoonpano.

Pilviinfrastruktuurin hallinta Terraformin avullaVirtuaalikoneen konfigurointi

Luodaan vApp-säilö. Jotta voimme välittömästi yhdistää vAppin ja VM:n virtuaaliverkkoon, lisäämme myös riippuvaisen parametrin:

Luo säilö

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

}

Luodaan virtuaalikone kuvauksella

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

}

}

Pääparametrit VM-kuvauksessa:

  • nimi — virtuaalikoneen nimi,

  • vappname - sen vApp-sovelluksen nimi, johon lisätään uusi VM,

  • katalogin nimi / mallin nimi - luettelon nimi ja virtuaalikoneen mallin nimi,

  • storageprofile - oletustallennuskäytäntö.

Verkkolohkon parametrit:

  • tyyppi – yhdistetyn verkon tyyppi,

  • nimi — mihin virtuaaliseen verkkoon VM liitetään,

  • isprimary - ensisijainen verkkosovitin,

  • ipallocation_mode — MANUAALINEN / DHCP / POOL-osoitteen allokointitila,

  • ip - virtuaalikoneen IP-osoite, määritämme sen manuaalisesti.

override_template_disk block:

  • sizeinmb — virtuaalikoneen käynnistyslevyn koko

  • storage_profile — levyn tallennuskäytäntö

Luodaan toinen virtuaalikone, jossa on kuvaus Nextcloud-tiedostojen tallennustilasta

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 ]

}

Vcdvminternal_disk -osiossa kuvataan uusi virtuaalilevy, joka on yhdistetty virtuaalikoneeseen.

Selitykset vcdvminternaldisk-lohkolle:

  • bustype - levyohjaimen tyyppi

  • sizeinmb — levyn koko

  • väylänumero / yksikkönumero - liitäntäpaikka sovittimessa

  • storage_profile — levyn tallennuskäytäntö

Kuvataanpa Bitrixin uusinta virtuaalikonetta

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

}

}

Käyttöjärjestelmän päivittäminen ja lisäkomentosarjojen asentaminen

Verkko valmistetaan, virtuaalikoneet kuvataan. Ennen kuin tuomme infrastruktuurimme, voimme suorittaa alustavan provisioinnin etukäteen käyttämällä provisiolohkoja ja ilman Ansiblea.

Katsotaanpa, kuinka käyttöjärjestelmä päivitetään ja CMS Bitrix -asennusskripti suoritetaan provisiolohkon avulla.

Ensin asennetaan CentOS-päivityspaketit.

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

}

}

}

Komponenttien nimitys:

  • Provisioner “remote-exec” – yhdistä etähallintalohko

  • Yhteyslohkossa kuvataan yhteyden tyyppi ja parametrit:

  • tyyppi - protokolla, tässä tapauksessa SSH;

  • user — käyttäjänimi;

  • salasana — käyttäjän salasana. Tässä tapauksessa osoitamme parametriin vcdvappvm.nginx.customization[0].admin_password, joka tallentaa luodun salasanan järjestelmän käyttäjälle.

  • isäntä — ulkoinen IP-osoite yhteyttä varten;

  • portti — yhteysportti, joka määritettiin aiemmin DNAT-asetuksissa;

  • inline - luettele annettavien komentojen luettelo. Komennot syötetään tässä osiossa esitetyssä järjestyksessä.

Suoritetaan esimerkkinä lisäksi 1C-Bitrix-asennusskripti. Skriptin suoritustuloksen tulos on käytettävissä suunnitelman ollessa käynnissä. Komentosarjan asentamiseksi kuvataan ensin lohko:

Kuvataan 1C-Bitrixin asennus.

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 kuvaamme heti Bitrix-päivityksen.

Esimerkki 1C-Bitrix-tilauksesta.

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ärkeä! Komentosarja ei välttämättä toimi, jos et poista SELinuxia käytöstä etukäteen! Jos tarvitset yksityiskohtaisen artikkelin CMS 1C-Bitrixin asentamisesta ja määrittämisestä bitrix-env.sh:n avulla, voit käytä blogiartikkeliamme verkkosivustolla.

3. Infrastruktuurin alustus

Pilviinfrastruktuurin hallinta Terraformin avullaModuulien ja lisäosien alustus

Työssä käytämme yksinkertaista "herrasmiespakkausta": kannettavaa tietokonetta Windows 10 -käyttöjärjestelmällä ja jakelusarjaa viralliselta verkkosivustolta terraform.io. Puretaan ja alustetaan komennolla: terraform.exe init

Tietojenkäsittely- ja verkkoinfrastruktuurin kuvauksen jälkeen käynnistämme suunnittelun testataksemme konfiguraatiomme, jossa näemme, mitä luodaan ja miten se yhdistetään toisiinsa.

  1. Suorita komento - terraform plan -var-file=vcd.tfvars.

  2. Saamme tuloksen - Plan: 16 to add, 0 to change, 0 to destroy. Eli tämän suunnitelman mukaan luodaan 16 resurssia.

  3. Aloitamme suunnitelman käskystä - terraform.exe apply -var-file=vcd.tfvars.

Virtuaalikoneita luodaan, ja sitten listaamat paketit suoritetaan provisiointiosiossa - käyttöjärjestelmä päivitetään ja CMS Bitrix asennetaan.

Vastaanotetaan yhteystietoja

Suunnitelman suorittamisen jälkeen haluamme vastaanottaa dataa tekstimuodossa palvelimiin yhdistämistä varten; tätä varten muotoilemme tulososion seuraavasti:

output "nginxpassword" {

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

}

Ja seuraava tulos kertoo meille luodun virtuaalikoneen salasanan:

Outputs: nginx_password = F#4u8!!N

Tuloksena saamme pääsyn virtuaalikoneiden käyttöön päivitetyllä käyttöjärjestelmällä ja esiasennetuilla paketeilla jatkotyötä varten. Kaikki on valmista!

Mutta entä jos sinulla on jo olemassa oleva infrastruktuuri?

3.1. Toimiva Terraform olemassa olevan infrastruktuurin kanssa

Se on yksinkertaista, voit tuoda nykyiset virtuaalikoneet ja niiden vApp-säilöt käyttämällä tuontikomentoa.

Kuvataan vAPP-resurssi ja virtuaalikone.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Seuraava vaihe on tuoda vApp-resurssien ominaisuudet muodossa vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, jossa:

  • vApp - vApp-nimi;

  • org — organisaation nimi;

  • org_vdc — virtuaalisen datakeskuksen nimi.

Pilviinfrastruktuurin hallinta Terraformin avullaTuodaan vAPP-resurssin ominaisuuksia

Tuodaan VM-resurssien ominaisuudet muodossa: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, jossa:

  • VM - VM:n nimi;

  • vApp - vApp-nimi;

  • org — organisaation nimi;

  • orgvdc on virtuaalisen datakeskuksen nimi.

Tuonti onnistui

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.

Nyt voimme tarkastella uutta tuotua resurssia:

Tuotu resurssi

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

}

}

Nyt olemme ehdottomasti valmiita - olemme tehneet viimeisen kohdan (tuonti olemassa olevaan infrastruktuuriin) ja olemme huomioineet kaikki Terraformin kanssa työskentelyn pääkohdat. 

Työkalu osoittautui erittäin käteväksi ja mahdollistaa infrastruktuurin kuvaamisen koodina, alkaen yhden pilvipalveluntarjoajan virtuaalikoneista verkkokomponenttien resurssien kuvaamiseen.

Samaan aikaan riippumattomuus ympäristöstä mahdollistaa työskentelyn paikallisten, pilviresurssien kanssa ja jopa alustan hallinnan. Ja jos tuettua alustaa ei ole ja haluat lisätä uuden, voit kirjoittaa oman palveluntarjoajan ja käyttää sitä.

Lähde: will.com

Lisää kommentti