Kif Immaniġġja l-Infrastruttura tal-Cloud b'Terraform

Kif Immaniġġja l-Infrastruttura tal-Cloud b'Terraform

F'dan l-artikolu se nħarsu lejn fiex jikkonsisti Terraform, u wkoll inniedu gradwalment l-infrastruttura tagħna stess fil-sħaba ma VMware — se nippreparaw tliet VMs għal skopijiet differenti: proxy, ħażna ta’ fajls u CMS.

Dwar kollox fid-dettall u fi tliet stadji:

1. Terraform - deskrizzjoni, vantaġġi u komponenti

Terraform hija għodda IaC (Infrastructure-as-Code) għall-bini u l-ġestjoni ta 'infrastruttura virtwali bl-użu tal-kodiċi.

Aħna nnutajna diversi vantaġġi meta naħdmu mal-għodda:

  • Veloċità ta 'skjerament ta' kerrejja ġodda (ambjenti virtwali apposta). Tipikament, aktar ma jkun hemm klijenti ġodda, aktar "klikks" jeħtieġ li l-persunal ta 'appoġġ tekniku jagħmel biex jippubblika riżorsi ġodda. B'Terraform, l-utenti jistgħu jibdlu l-issettjar tal-magni virtwali (pereżempju, jagħlqu awtomatikament l-OS u jżidu l-partizzjoni tad-disk virtwali) mingħajr ma jeħtieġu appoġġ tekniku jew jagħlqu l-magna nnifisha.

  • Verifika immedjata tal-pjan ta 'attivazzjoni Tennant ġdid. Bl-użu tad-deskrizzjoni tal-kodiċi tal-infrastruttura, nistgħu niċċekkjaw immedjatament x'se jiżdied u f'liema ordni, kif ukoll f'liema stat finali se tkun din jew dik il-magna virtwali jew netwerk virtwali b'konnessjonijiet ma 'magni virtwali.

  • Kapaċità li tiddeskrivi l-aktar pjattaformi tal-cloud popolari. Tista 'tuża l-għodda minn Amazon u Google Cloud, għal pjattaformi privati ​​bbażati fuq VMware vCloud Director, li joffru servizzi fi ħdan soluzzjonijiet IaaS, SaaS u PaaS.

  • Immaniġġja fornituri multipli tas-sħab u tqassam l-infrastruttura bejniethom biex ittejjeb it-tolleranza tal-ħsarat, billi tuża konfigurazzjoni waħda biex toħloq, tiddijanjostika u timmaniġġja r-riżorsi tal-cloud.

  • Użu konvenjenti għall-ħolqien ta 'stands demo għall-ittestjar tas-softwer u debugging. Tista 'toħloq u tittrasferixxi stands għad-dipartiment tal-ittestjar, tittestja softwer f'ambjenti differenti b'mod parallel, u tbiddel u tħassar ir-riżorsi istantanjament billi toħloq pjan wieħed biss ta' bini tar-riżorsi

"Terrarium" Terraform

Tkellimna fil-qosor dwar il-vantaġġi tal-għodda, issa ejja nkissruha fil-komponenti tagħha

Fornituri. 

F'Terraform, kważi kull tip ta' infrastruttura tista' tiġi rappreżentata bħala riżorsa. Il-konnessjoni bejn ir-riżorsi u l-pjattaforma API hija pprovduta minn moduli tal-fornitur, li jippermettulek toħloq riżorsi fi pjattaforma speċifika, pereżempju, Azure jew VMware vCloud Director.

Bħala parti mill-proġett, tista' tinteraġixxi ma' fornituri differenti fuq pjattaformi differenti.

Riżorsi (deskrizzjoni tar-riżorsi).

Deskrizzjoni tar-riżorsi tippermettilek timmaniġġja komponenti tal-pjattaforma, bħal magni virtwali jew netwerks. 

Tista' toħloq deskrizzjoni tar-riżorsi għall-fornitur ta' VMware vCloud Director lilek innifsek u tuża din id-deskrizzjoni biex toħloq riżorsi ma' kwalunkwe fornitur ta' hosting li juża vCloud Director. Għandek bżonn biss li tibdel il-parametri tal-awtentikazzjoni u l-parametri tal-konnessjoni tan-netwerk għall-fornitur tal-hosting meħtieġ

Fornituri.

Dan il-komponent jagħmilha possibbli li jitwettqu operazzjonijiet għall-installazzjoni inizjali u l-manutenzjoni tas-sistema operattiva wara li jinħolqu magni virtwali. Ladarba tkun ħloqt riżors ta' magna virtwali, tista' tuża provvedituri biex tikkonfigura u tikkonnettja permezz ta' SSH, taġġorna s-sistema operattiva, u tniżżel u tmexxi skript. 

Input u Output varjabbli.

Input varjabbli - input varjabbli għal kwalunkwe tip ta 'blokk. 

Il-varjabbli tal-output jippermettulek tiffranka l-valuri wara li toħloq ir-riżorsi u jistgħu jintużaw bħala varjabbli tal-input f'moduli oħra, pereżempju fil-blokk tal-Provvedituri.

l-Istati.

Fajls tal-Istati jaħżnu informazzjoni dwar il-konfigurazzjoni tar-riżorsi tal-pjattaforma tal-fornitur. Meta l-pjattaforma tinħoloq għall-ewwel darba, m'hemm l-ebda informazzjoni dwar ir-riżorsi u qabel kwalunkwe operazzjoni, Terraform taġġorna l-istat bl-infrastruttura reali tar-riżorsi diġà deskritti.

L-għan ewlieni tal-istati huwa li jiffrankaw mazz ta 'oġġetti ta' riżorsi diġà maħluqa biex iqabblu l-konfigurazzjoni ta 'riżorsi u oġġetti miżjuda sabiex jiġi evitat ħolqien ripetut u bidliet fil-pjattaforma.

B'mod awtomatiku, l-informazzjoni tal-istat hija maħżuna fil-fajl terraform.tfstate lokali, iżda jekk meħtieġ, huwa possibbli li tuża ħażna remota għal xogħol f'tim.

Tista 'wkoll timporta riżorsi tal-pjattaforma attwali fl-istat biex tinteraġixxi aktar ma' riżorsi oħra li mbagħad inħolqu mingħajr l-għajnuna ta 'Terraform.  

2. Ħolqien ta' infrastruttura

Il-komponenti ġew riżolti, issa bl-użu ta 'Terraform se noħolqu gradwalment infrastruttura bi tliet magni virtwali. L-ewwel bis-server proxy nginx installat, it-tieni b'ħażna ta 'fajls ibbażata fuq Nextcloud u t-tielet b'CMS Bitrix.

Aħna se niktbu kodiċi u nwettquh billi tuża l-eżempju tagħna sħab fuq VMware vCloud Director. L-utenti tagħna jirċievu kont bi drittijiet ta' Amministratur tal-Organizzazzjoni. Jekk tuża kont bl-istess drittijiet f'sħab ta' VMware ieħor, tista' tirriproduċi l-kodiċi mill-eżempji tagħna. Mur!

L-ewwel, ejja noħolqu direttorju għall-proġett il-ġdid tagħna li fih se jitqiegħdu fajls li jiddeskrivu l-infrastruttura.

mkdir project01

Sussegwentement, niddeskrivu l-komponenti tal-infrastruttura. Terraform joħloq relazzjonijiet u jipproċessa fajls ibbażati fuq id-deskrizzjoni fil-fajls. Il-fajls infushom jistgħu jissemmew abbażi tal-iskop tal-blokki li qed jiġu deskritti, pereżempju, network.tf - jiddeskrivi l-parametri tan-netwerk għall-infrastruttura.

Biex niddeskrivu l-komponenti tal-infrastruttura tagħna, ħloqna l-fajls li ġejjin:

Lista ta' fajls.

main.tf - deskrizzjoni tal-parametri għall-ambjent virtwali - magni virtwali, kontenituri virtwali;

network.tf - deskrizzjoni tal-parametri tan-netwerk virtwali u regoli NAT u Firewall;

variables.tf - lista ta 'varjabbli li nużaw;

vcd.tfvars - valuri varjabbli tal-proġett għall-modulu VMware vCloud Director.

Il-lingwa tal-konfigurazzjoni f'Terraform hija dikjarattiva u l-ordni tal-blokki ma jimpurtax, ħlief għall-blokki provveditur, minħabba li f'dan il-blokk niddeskrivu l-kmandi li għandhom jiġu esegwiti meta nippreparaw l-infrastruttura u se jiġu eżegwiti fl-ordni.

Struttura tal-blokk.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Biex tiddeskrivi blokki, tintuża l-lingwa ta 'programmar tagħha stess HCL (HashiCorp Configuration Language); huwa wkoll possibbli li tiddeskrivi l-infrastruttura bl-użu ta' JSON. Tista' titgħallem aktar dwar is-sintassi aqra fuq il-websajt tal-iżviluppatur.

Konfigurazzjoni varjabbli tal-ambjent, variables.tf u vcd.tfvars

L-ewwel, ejja noħolqu żewġ fajls li jiddeskrivu l-lista tal-varjabbli kollha użati u l-valuri tagħhom għall-modulu VMware vCloud Director. L-ewwel, ejja noħolqu l-fajl variables.tf.

Kontenut tal-fajl variables.tf.

variable "vcd_org_user" {

  description = "vCD Tenant User"

}

variable "vcd_org_password" {

  description = "vCD Tenant Password"

}

variable "vcd_org" {

  description = "vCD Tenant Org"

}

variable "vcd_org_vdc" {

  description = "vCD Tenant VDC"

}

variable "vcd_org_url" {

  description = "vCD Tenant URL"

}

variable "vcd_org_max_retry_timeout" {

  default = "60"

}

variable "vcd_org_allow_unverified_ssl" {

  default = "true"

}

variable "vcd_org_edge_name" {

  description = "vCD edge name"

}

variable "vcd_org_catalog" {

  description = "vCD public catalog"

}

variable "vcd_template_os_centos7" {

  description = "OS CentOS 7"

  default = "CentOS7"

}

variable "vcd_org_ssd_sp" {

  description = "Storage Policies"

  default = "Gold Storage Policy"

}

variable "vcd_org_hdd_sp" {

  description = "Storage Policies"

  default = "Bronze Storage Policy"

}

variable "vcd_edge_local_subnet" {

  description = "Organization Network Subnet"

}

variable "vcd_edge_external_ip" {

  description = "External public IP"

}

variable "vcd_edge_local_ip_nginx" {}

variable "vcd_edge_local_ip_bitrix" {}

variable "vcd_edge_local_ip_nextcloud" {}

variable "vcd_edge_external_network" {}

Valuri varjabbli li nirċievu mingħand il-fornitur.

  • vcd_org_user — isem tal-utent bi drittijiet ta' Amministratur tal-Organizzazzjoni,

  • vcd_org_password — password tal-utent,

  • vcd_org — isem l-organizzazzjoni,

  • vcd_org_vdc — isem iċ-ċentru tad-dejta virtwali,

  • vcd_org_url - URL tal-API,

  • vcd_org_edge_name — isem tar-router virtwali,

  • vcd_org_catalog — isem tad-direttorju b'mudelli ta' magni virtwali,

  • vcd_edge_external_ip — indirizz IP pubbliku,

  • vcd_edge_external_network — isem in-netwerk estern,

  • vcd_org_hdd_sp — isem il-politika tal-ħażna tal-HDD,

  • vcd_org_ssd_sp — isem il-politika tal-ħażna SSD.

U daħħal il-varjabbli tagħna:

  • vcd_edge_local_ip_nginx — indirizz IP tal-magna virtwali b'NGINX,

  • vcd_edge_local_ip_bitrix - indirizz IP tal-magna virtwali b'1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — indirizz IP tal-magna virtwali ma Nextcloud.

Bit-tieni fajl noħolqu u nispeċifikaw varjabbli għall-modulu VMware vCloud Director fil-fajl vcd.tfvars: Ejja nfakkru li fl-eżempju tagħna nużaw sħab stess mClouds, jekk taħdem ma 'fornitur ieħor, iċċekkja l-valuri magħhom. 

Kontenut tal-fajl vcd.tfvars.

vcd_org_url = "https://vcloud.mclouds.ru/api"

vcd_org_user = "orgadmin"

vcd_org_password = "*"

vcd = "org"

vcd_org_vdc = "orgvdc"

vcd_org_maxretry_timeout = 60

vcd_org_allow_unverified_ssl = true

vcd_org_catalog = "Templates"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Gold Storage Policy"

vcd_org_hdd_sp = "Bronze Storage Policy"

vcd_org_edge_name = "MCLOUDS-EDGE"

vcd_edge_external_ip = "185.17.66.1"

vcd_edge_local_subnet = "192.168.110.0/24"

vcd_edge_local_ip_nginx = "192.168.110.1"

vcd_edge_local_ip_bitrix = "192.168.110.10"

vcd_edge_local_ip_nextcloud = "192.168.110.11"

vcd_edge_external_network = "NET-185-17-66-0"

Konfigurazzjoni tan-netwerk, network.tf.

Il-varjabbli tal-ambjent huma stabbiliti, issa se nwaqqfu l-iskema tal-konnessjoni tal-magni virtwali - aħna ser nassenjaw indirizz IP privat għal kull magna virtwali u nużaw Destination NAT biex "tgħaddi" l-portijiet għan-netwerk estern. Biex nillimitaw l-aċċess għall-portijiet ta 'ġestjoni, aħna se nissettjaw aċċess biss għall-indirizz IP tagħna.

Kif Immaniġġja l-Infrastruttura tal-Cloud b'TerraformDijagramma tan-netwerk għall-pjattaforma Terraform li qed tinħoloq

Noħolqu netwerk organizzattiv virtwali bl-isem net_lan01, il-portal default: 192.168.110.254, u wkoll bl-ispazju tal-indirizz: 192.168.110.0/24.

Aħna niddeskrivu netwerk virtwali.

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"

  }

}

Ejja noħolqu regoli tal-firewall li jippermettu lill-magni virtwali jaċċessaw l-Internet. Fi ħdan dan il-blokk, ir-riżorsi virtwali kollha fil-cloud se jkollhom aċċess għall-Internet:

Aħna niddeskrivu r-regoli għall-aċċess tal-VM għall-Internet.

resource "vcd_nsxv_firewall_rule" "fw_internet_access" {

  edge_gateway   = var.vcdorgedgename

  name = "Internet Access"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

Wara li stabbilixxa d-dipendenza li wara l-ipproċessar tal-blokk vcdnetworkrouted.net, nipproċedu biex tikkonfigura l-blokk vcdnsxvfirewallrule, billi tuża jiddependi fuq. Aħna nużaw din l-għażla minħabba li xi dipendenzi jistgħu jiġu rikonoxxuti impliċitament fil-konfigurazzjoni.

Sussegwentement, se noħolqu regoli li jippermettu aċċess għall-portijiet min-netwerk estern u nindikaw l-indirizz IP tagħna għall-konnessjoni permezz ta 'SSH mas-servers. Kull utent tal-Internet għandu aċċess għall-portijiet 80 u 443 fuq is-server tal-web, u utent b'indirizz IP ta '90.1.15.1 għandu aċċess għall-portijiet SSH tas-servers virtwali.

Ħalli aċċess għall-portijiet min-netwerk estern.

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]

}

Aħna noħolqu regoli Sors NAT għall-aċċess għall-Internet minn netwerk lokali tal-cloud:

Aħna niddeskrivu r-regoli tas-Sors NAT.

resource "vcd_nsxv_snat" "snat_local" {

edge_gateway = var.vcd_org_edge_name

  network_type = "ext"

  network_name = var.vcdedgeexternalnetwork

  original_address   = var.vcd_edge_local_subnet

translated_address = var.vcd_edge_external_ip

  depends_on = [vcd_network_routed.net]

}

U biex tlesti l-konfigurazzjoni tal-blokka tan-netwerk, aħna nżidu r-regoli tad-Destinazzjoni NAT għall-aċċess għas-servizzi min-netwerk estern:

Żieda tar-regoli tad-Destinazzjoni NAT.

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]

}

Żid regola NAT għat-traduzzjoni tal-port lis-server SSH taħt Nginx.

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH NGINX"

original_address = var.vcd_edge_external_ip
original_port = 58301

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Żid regola NAT għat-traduzzjoni tal-port lis-server SSH b'1C-Bitrix.

resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Bitrix"

original_address = var.vcd_edge_external_ip
original_port = 58302

translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Żid regola NAT għat-traduzzjoni tal-port lis-server SSH ma Nextcloud.

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Nextcloud"

original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Konfigurazzjoni ta 'l-ambjent virtwali Main.tf

Kif ippjanajna fil-bidu tal-artiklu, se noħolqu tliet magni virtwali. Huma se jiġu ppreparati bl-użu ta '"Perswalizzazzjoni tal-Mistednin". Se nissettjaw il-parametri tan-netwerk skont is-settings li speċifikajna, u l-password tal-utent tiġi ġġenerata awtomatikament.

Ejja niddeskrivu l-vApp li fiha se jkunu jinsabu l-magni virtwali u l-konfigurazzjoni tagħhom.

Kif Immaniġġja l-Infrastruttura tal-Cloud b'TerraformKonfigurazzjoni tal-magna virtwali

Ejja noħolqu kontenitur vApp. Sabiex inkunu nistgħu nqabbdu immedjatament il-vApp u l-VM man-netwerk virtwali, aħna nżidu wkoll il-parametru depends_on:

Oħloq kontenitur

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

}

Ejja noħolqu magna virtwali b'deskrizzjoni

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

}

}

Parametri ewlenin fid-deskrizzjoni tal-VM:

  • isem — isem il-magna virtwali,

  • vappname - l-isem tal-vApp li miegħu żżid VM ġdida,

  • catalogname / templatename - isem katalogu u isem tal-mudell tal-magna virtwali,

  • storageprofile - politika tal-ħażna default.

Parametri tal-blokk tan-netwerk:

  • tip — tip ta' netwerk konness,

  • isem — liema netwerk virtwali tikkonnettja l-VM,

  • isprimary - adapter tan-netwerk primarju,

  • ipallocation_mode — Mod ta' allokazzjoni tal-indirizz MANUAL / DHCP / POOL,

  • ip — indirizz IP għall-magna virtwali, aħna se nispeċifikawha manwalment.

blokk override_template_disk:

  • sizeinmb — daqs tal-boot disk għall-magna virtwali

  • storage_profile — politika tal-ħażna għad-diska

Ejja noħolqu t-tieni VM b'deskrizzjoni tal-ħażna tal-fajls Nextcloud

resource "vcd_vapp_vm" "nextcloud" {

vapp_name = vcd_vapp.vapp.name

name = "nextcloud"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nextcloud

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

resource "vcd_vm_internal_disk" "disk1" {

vapp_name = vcd_vapp.vapp.name

vm_name = "nextcloud"

bus_type = "paravirtual"

size_in_mb = "102400"

bus_number = 0

unit_number = 1

storage_profile = var.vcd_org_hdd_sp

allow_vm_reboot = true

depends_on = [ vcd_vapp_vm.nextcloud ]

}

Fit-taqsima vcdvminternal_disk se niddeskrivu disk virtwali ġdid li huwa konness mal-magna virtwali.

Spjegazzjonijiet għall-blokk vcdvmininternaldisk:

  • bustype - tip ta' kontrollur tad-disk

  • sizeinmb — daqs tad-diska

  • busnumber / unitnumber - il-post tal-konnessjoni fl-adapter

  • storage_profile — politika tal-ħażna għad-diska

Ejja niddeskrivu l-aħħar VM fuq Bitrix

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

}

}

Aġġorna l-OS u tinstalla skripts addizzjonali

In-netwerk huwa ppreparat, il-magni virtwali huma deskritti. Qabel ma nimportaw l-infrastruttura tagħna, nistgħu nwettqu l-proviżjonament inizjali bil-quddiem bl-użu ta’ blokki ta’ provviżorju u mingħajr ma nużaw Ansible.

Ejja nħarsu lejn kif taġġorna l-OS u tħaddem l-iskrittura tal-installazzjoni CMS Bitrix billi tuża l-blokk tal-provveditur.

L-ewwel, ejja ninstallaw pakketti ta 'aġġornament ta' CentOS.

resource "null_resource" "nginx_update_install" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip" ]

}

}

}

Denominazzjoni tal-komponenti:

  • provisioner "remote-exec" - qabbad il-blokk tal-proviżjon remot

  • Fil-blokka tal-konnessjoni niddeskrivu t-tip u l-parametri għall-konnessjoni:

  • tip — protokoll, fil-każ tagħna SSH;

  • utent — isem tal-utent;

  • password — password tal-utent. Fil-każ tagħna, aħna nippuntaw lejn il-parametru vcdvappvm.nginx.customization[0].admin_password, li jaħżen il-password ġġenerata għall-utent tas-sistema.

  • host — indirizz IP estern għall-konnessjoni;

  • port — port għall-konnessjoni, li qabel kien speċifikat fis-settings tad-DNAT;

  • inline - elenka l-lista tal-kmandi li se jiddaħħlu. Il-kmandi jiddaħħlu fl-ordni kif indikat f'din it-taqsima.

Bħala eżempju, ejja wkoll tesegwixxi l-iskrittura ta 'installazzjoni 1C-Bitrix. L-output tar-riżultat tal-eżekuzzjoni tal-iskript se jkun disponibbli waqt li l-pjan ikun qed jaħdem. Biex tinstalla l-iskrittura, l-ewwel niddeskrivu l-blokk:

Ejja niddeskrivu l-installazzjoni ta '1C-Bitrix.

provisioner "file" {

source = "prepare.sh"

destination = "/tmp/prepare.sh"

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

}

provisioner "remote-exec" {

inline = [

"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"

]

}

U aħna se niddeskrivu immedjatament l-aġġornament Bitrix.

Eżempju ta' forniment ta' 1C-Bitrix.

resource "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.bitrix.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58302"

timeout = "60s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip",

"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",

"chmod +x /tmp/bitrix-env.sh",

"/tmp/bitrix-env.sh"

]

}

}

Importanti! L-iskritt jista' ma jaħdimx jekk ma tiddiżattivax SELinux minn qabel! Jekk għandek bżonn artikolu dettaljat dwar l-installazzjoni u l-konfigurazzjoni tas-CMS 1C-Bitrix billi tuża bitrix-env.sh, oo tista' uża l-artiklu tal-blog tagħna fuq il-websajt.

3. Inizjalizzazzjoni tal-infrastruttura

Kif Immaniġġja l-Infrastruttura tal-Cloud b'TerraformInizjalizzazzjoni ta 'moduli u plugins

Għax-xogħol, nużaw "kit ta' gentleman" sempliċi: laptop bil-Windows 10 OS u kit ta' distribuzzjoni mill-websajt uffiċjali terraform.io. Ejja nispakkjaw u inizjalizzaw billi tuża l-kmand: terraform.exe init

Wara li niddeskrivew l-infrastruttura tal-kompjuters u tan-netwerk, inniedu l-ippjanar biex nittestjaw il-konfigurazzjoni tagħna, fejn nistgħu naraw x'se jinħoloq u kif se tkun konnessa ma 'xulxin.

  1. Teżegwixxi l-kmand - terraform plan -var-file=vcd.tfvars.

  2. Nirċievu r-riżultat - Plan: 16 to add, 0 to change, 0 to destroy. Jiġifieri skont dan il-pjan se jinħolqu 16-il riżorsi.

  3. Inniedu l-pjan fuq kmand - terraform.exe apply -var-file=vcd.tfvars.

Se jinħolqu magni virtwali, u mbagħad il-pakketti li elenkajna jiġu eżegwiti fi ħdan it-taqsima tal-provveditur - l-OS se jiġi aġġornat u CMS Bitrix se jiġi installat.

Jirċievi informazzjoni dwar il-konnessjoni

Wara li nwettqu l-pjan, irridu nirċievu data f'forma ta 'test għall-konnessjoni mas-servers; għal dan, aħna nifformattjaw is-sezzjoni tal-output kif ġej:

output "nginxpassword" {

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

}

U l-output li ġej jgħidilna l-password għall-magna virtwali maħluqa:

Outputs: nginx_password = F#4u8!!N

Bħala riżultat, ikollna aċċess għal magni virtwali b'sistema operattiva aġġornata u pakketti installati minn qabel għal aktar xogħol tagħna. Kollox lest!

Imma x'jiġri jekk diġà għandek infrastruttura eżistenti?

3.1. Xogħol Terraform b'infrastruttura eżistenti

Huwa sempliċi, tista 'timporta magni virtwali kurrenti u l-kontenituri vApp tagħhom billi tuża l-kmand tal-importazzjoni.

Ejja niddeskrivu r-riżors tal-vAPP u l-magna virtwali.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Il-pass li jmiss huwa li timporta l-proprjetajiet tar-riżorsi vApp fil-format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, fejn:

  • vApp - isem tal-vApp;

  • org — isem l-organizzazzjoni;

  • org_vdc — isem taċ-ċentru tad-dejta virtwali.

Kif Immaniġġja l-Infrastruttura tal-Cloud b'TerraformL-importazzjoni tal-proprjetajiet tar-riżorsi vAPP

Ejja nimportaw il-proprjetajiet tar-riżorsi VM fil-format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, F'liema:

  • VM - isem VM;

  • vApp - isem tal-vApp;

  • org — isem l-organizzazzjoni;

  • orgvdc huwa l-isem taċ-ċentru tad-dejta virtwali.

L-importazzjoni kienet suċċess

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.

Issa nistgħu nħarsu lejn ir-riżorsa l-ġdida importata:

Riżors importat

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

}

}

Issa aħna definittivament lesti - aħna lesti bl-aħħar punt (importazzjoni fl-infrastruttura eżistenti) u kkunsidra l-punti ewlenin kollha ta 'ħidma ma' Terraform. 

L-għodda rriżulta li kienet konvenjenti ħafna u tippermettilek tiddeskrivi l-infrastruttura tiegħek bħala kodiċi, billi tibda minn magni virtwali ta 'fornitur wieħed tas-sħab sa tiddeskrivi r-riżorsi tal-komponenti tan-netwerk.

Fl-istess ħin, l-indipendenza mill-ambjent tagħmilha possibbli li taħdem ma 'riżorsi lokali, tal-cloud, u anke tmexxi l-pjattaforma. U jekk ma jkunx hemm pjattaforma appoġġjata u trid iżżid waħda ġdida, tista 'tikteb il-fornitur tiegħek stess u tużaha.

Sors: www.habr.com

Żid kumment