Kaip valdyti debesies infrastruktūrą naudojant „Terraform“.

Kaip valdyti debesies infrastruktūrą naudojant „Terraform“.

Šiame straipsnyje apžvelgsime, ką sudaro „Terraform“, taip pat palaipsniui pradėsime savo infrastruktūrą debesyje su VMware — paruošime tris skirtingų paskirčių VM: proxy, failų saugykla ir TVS.

Apie viską išsamiai ir trimis etapais:

1. Terraform - aprašymas, privalumai ir komponentai

Terraform yra IaC (Infrastructure-as-Code) įrankis, skirtas kurti ir valdyti virtualią infrastruktūrą naudojant kodą.

Mes pastebėjome keletą darbo su įrankiu pranašumų:

  • Naujų nuomininkų diegimo greitis (priskirtos virtualios aplinkos). Paprastai kuo daugiau naujų klientų, tuo daugiau „paspaudimų“ techninės pagalbos darbuotojai turi padaryti, kad paskelbtų naujus išteklius. Naudodami „Terraform“ vartotojai gali keisti virtualios mašinos nustatymus (pavyzdžiui, automatiškai išjungti OS ir padidinti virtualaus disko skaidinį) nereikalaujant techninės pagalbos ir neišjungdami paties įrenginio.

  • Momentinis aktyvinimo plano patikrinimas naujas Tennantas. Naudodami infrastruktūros kodo aprašymą galime iš karto patikrinti, kas ir kokia tvarka bus pridėta, taip pat kokios galutinės būsenos bus ta ar kita virtuali mašina ar virtualus tinklas su jungtimis prie virtualių mašinų.

  • Gebėjimas apibūdinti populiariausias debesų platformas. Galite naudoti įrankį nuo „Amazon“ ir „Google Cloud“ iki privačių platformų, pagrįstų „VMware vCloud Director“, siūlančių paslaugas IaaS, SaaS ir PaaS sprendimuose.

  • Tvarkykite kelis debesies paslaugų teikėjus ir paskirstykite infrastruktūrą tarp jų, kad pagerintumėte atsparumą gedimams, naudodami vieną konfigūraciją debesies ištekliams kurti, diagnozuoti ir valdyti.

  • Patogus naudoti kuriant demonstracinius stendus programinės įrangos testavimui ir derinimui. Galite sukurti ir perkelti testavimo skyriaus stendus, lygiagrečiai išbandyti programinę įrangą skirtingose ​​aplinkose ir akimirksniu pakeisti bei ištrinti išteklius sukurdami tik vieną išteklių kūrimo planą.

Terariumas „Terariumas“.

Trumpai kalbėjome apie įrankio privalumus, dabar suskirstykime jį į komponentus

Teikėjai. 

„Terraform“ beveik bet kokia infrastruktūra gali būti pateikiama kaip išteklius. Ryšį tarp išteklių ir API platformos užtikrina teikėjo moduliai, leidžiantys kurti išteklius konkrečioje platformoje, pavyzdžiui, Azure arba VMware vCloud Director.

Vykdydami projektą galite bendrauti su skirtingais tiekėjais skirtingose ​​platformose.

Ištekliai (resurso aprašymas).

Išteklių aprašymas leidžia valdyti platformos komponentus, pvz., virtualias mašinas ar tinklus. 

Galite patys sukurti „VMware vCloud Director“ teikėjo išteklių aprašą ir naudoti šį aprašą kurdami išteklius su bet kuriuo prieglobos paslaugų teikėju, kuris naudoja „vCloud Director“. Jums tereikia pakeisti autentifikavimo parametrus ir tinklo ryšio parametrus į reikiamą prieglobos paslaugų teikėją

Teikėjai.

Šis komponentas leidžia atlikti pradinio operacinės sistemos diegimo ir priežiūros operacijas sukūrus virtualias mašinas. Sukūrę virtualios mašinos išteklius, galite naudoti teikėjus, kad sukonfigūruotumėte ir prisijungtumėte per SSH, atnaujintumėte operacinę sistemą ir atsisiųstumėte bei paleistumėte scenarijų. 

Įvesties ir išvesties kintamieji.

Įvesties kintamieji – bet kokių blokų tipų įvesties kintamieji. 

Išvesties kintamieji leidžia išsaugoti reikšmes sukūrus išteklius ir gali būti naudojami kaip įvesties kintamieji kituose moduliuose, pavyzdžiui, bloke Teikėjai.

valstybėse.

Valstijų failuose saugoma informacija apie teikėjo platformos išteklių konfigūraciją. Pirmą kartą kuriant platformą nėra informacijos apie išteklius ir prieš bet kokią operaciją Terraform atnaujina būseną realia jau aprašytų išteklių infrastruktūra.

Pagrindinis būsenų tikslas yra išsaugoti krūvą jau sukurtų išteklių objektų, kad būtų galima palyginti pridėtų išteklių ir objektų konfigūraciją, kad būtų išvengta pakartotinio platformos kūrimo ir pakeitimų.

Pagal numatytuosius nustatymus būsenos informacija saugoma vietiniame terraform.tfstate faile, tačiau esant poreikiui galima naudoti nuotolinę saugyklą komandiniam darbui.

Taip pat galite importuoti esamus platformos išteklius į būseną, kad galėtumėte toliau sąveikauti su kitais ištekliais, kurie savo ruožtu buvo sukurti be Terraform pagalbos.  

2. Infrastruktūros sukūrimas

Komponentai buvo surūšiuoti, dabar naudodami Terraform palaipsniui kursime infrastruktūrą su trimis virtualiomis mašinomis. Pirmasis su įdiegtu nginx tarpiniu serveriu, antrasis su failų saugykla, pagrįstas Nextcloud, o trečiasis su CMS Bitrix.

Mes parašysime kodą ir vykdysime jį naudodami mūsų pavyzdį debesys „VMware vCloud Director“.. Mūsų vartotojai gauna paskyrą su organizacijos administratoriaus teisėmis. Jei naudojate paskyrą su tokiomis pat teisėmis kitame VMware debesyje, galite atkurti kodą iš mūsų pavyzdžių. Pirmyn!

Pirmiausia sukurkime katalogą mūsų naujam projektui, kuriame bus patalpinti infrastruktūrą aprašantys failai.

mkdir project01

Toliau aprašome infrastruktūros komponentus. „Terraform“ kuria ryšius ir apdoroja failus pagal failuose pateiktą aprašymą. Patys failai gali būti pavadinti pagal aprašomų blokų paskirtį, pavyzdžiui, network.tf – aprašo infrastruktūros tinklo parametrus.

Norėdami apibūdinti mūsų infrastruktūros komponentus, sukūrėme šiuos failus:

Failų sąrašas.

main.tf - virtualios aplinkos parametrų aprašymas - virtualios mašinos, virtualūs konteineriai;

network.tf - virtualaus tinklo parametrų ir NAT bei ugniasienės taisyklių aprašymas;

variables.tf – kintamųjų, kuriuos naudojame, sąrašas;

vcd.tfvars - projekto kintamųjų reikšmės VMware vCloud Director moduliui.

Konfigūravimo kalba „Terraform“ yra deklaratyvi ir blokų eiliškumas nesvarbi, išskyrus aprūpinimo blokus, nes šiame bloke aprašome komandas, kurios turi būti vykdomos ruošiant infrastruktūrą ir jos bus vykdomos eilės tvarka.

Bloko struktūra.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Blokams aprašyti naudojama sava programavimo kalba HCL (HashiCorp Configuration Language), infrastruktūrą galima apibūdinti naudojant JSON. Galite sužinoti daugiau apie sintaksę skaitykite kūrėjo svetainėje.

Aplinkos kintamojo konfigūracija, variables.tf ir vcd.tfvars

Pirmiausia sukurkime du failus, kuriuose aprašomas visų VMware vCloud Director modulio naudojamų kintamųjų sąrašas ir jų reikšmės. Pirmiausia sukurkime failą variables.tf.

Failo variables.tf turinys.

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

Kintamos reikšmės, kurias gauname iš teikėjo.

  • vcd_org_user – vartotojo vardas su organizacijos administratoriaus teisėmis,

  • vcd_org_password – vartotojo slaptažodis,

  • vcd_org – organizacijos pavadinimas,

  • vcd_org_vdc – virtualaus duomenų centro pavadinimas,

  • vcd_org_url – API URL,

  • vcd_org_edge_name – virtualaus maršruto parinktuvo pavadinimas,

  • vcd_org_catalog – katalogo su virtualios mašinos šablonais pavadinimas,

  • vcd_edge_external_ip – viešas IP adresas,

  • vcd_edge_external_network – išorinio tinklo pavadinimas,

  • vcd_org_hdd_sp – HDD saugojimo strategijos pavadinimas,

  • vcd_org_ssd_sp – SSD saugojimo strategijos pavadinimas.

Ir įveskite mūsų kintamuosius:

  • vcd_edge_local_ip_nginx – virtualios mašinos su NGINX IP adresas,

  • vcd_edge_local_ip_bitrix – virtualios mašinos IP adresas su 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud – virtualios mašinos su Nextcloud IP adresas.

Antruoju failu sukuriame ir nurodome VMware vCloud Director modulio kintamuosius vcd.tfvars faile: Prisiminkime, kad mūsų pavyzdyje mes naudojame nuosavas debesis mClouds, jei dirbate su kitu teikėju, patikrinkite reikšmes su jais. 

Failo vcd.tfvars turinys.

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"

Tinklo konfigūracija, network.tf.

Aplinkos kintamieji nustatyti, dabar nustatysime virtualios mašinos prisijungimo schemą - kiekvienai virtualiai mašinai priskirsime privatų IP adresą ir naudosime paskirties NAT, kad „persiųstume“ prievadus į išorinį tinklą. Norėdami apriboti prieigą prie valdymo prievadų, nustatysime prieigą tik mūsų IP adresui.

Kaip valdyti debesies infrastruktūrą naudojant „Terraform“.Kuriama Terraform platformos tinklo schema

Sukuriame virtualų organizacijos tinklą pavadinimu net_lan01, numatytuoju šliuzu: 192.168.110.254, taip pat su adresų erdve: 192.168.110.0/24.

Mes aprašome virtualų tinklą.

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"

  }

}

Sukurkime ugniasienės taisykles, leidžiančias virtualioms mašinoms pasiekti internetą. Šiame bloke visi virtualūs debesies ištekliai turės prieigą prie interneto:

Aprašome VM prieigos prie interneto taisykles.

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]

}

Nustatę priklausomybę, kad apdorojus bloką vcdnetworkrouted.net, mes pradedame konfigūruoti bloką vcdnsxvfirewallrule, naudojant priklauso nuo. Mes naudojame šią parinktį, nes kai kurios priklausomybės gali būti netiesiogiai atpažintos konfigūracijoje.

Toliau sukursime taisykles, kurios leis prieiti prie prievadų iš išorinio tinklo ir nurodysime mūsų IP adresą jungtis per SSH prie serverių. Bet kuris interneto vartotojas turi prieigą prie 80 ir 443 prievadų žiniatinklio serveryje, o vartotojas, kurio IP adresas yra 90.1.15.1, turi prieigą prie virtualių serverių SSH prievadų.

Suteikite prieigą prie prievadų iš išorinio tinklo.

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]

}

Kuriame šaltinio NAT taisykles, skirtas prieigai prie interneto iš debesies vietinio tinklo:

Mes aprašome šaltinio NAT taisykles.

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]

}

Norėdami užbaigti tinklo bloko konfigūraciją, pridedame paskirties NAT taisykles, skirtas prieigai prie paslaugų iš išorinio tinklo:

Pridedamos paskirties vietos NAT taisyklės.

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]

}

Pridėkite prievado vertimo NAT taisyklę į SSH serverį naudodami „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]

}

Pridėkite NAT taisyklę prievado vertimui į SSH serverį su 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]

}

Pridėkite prievado vertimo NAT taisyklę į SSH serverį naudodami 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]

}

Main.tf virtualios aplinkos konfigūracija

Kaip planavome straipsnio pradžioje, sukursime tris virtualias mašinas. Jie bus paruošti naudojant „Svečio pritaikymą“. Tinklo parametrus nustatysime pagal mūsų nurodytus nustatymus, o vartotojo slaptažodis bus sugeneruotas automatiškai.

Aprašykime vApp, kurioje bus virtualios mašinos, ir jų konfigūraciją.

Kaip valdyti debesies infrastruktūrą naudojant „Terraform“.Virtualios mašinos konfigūracija

Sukurkime vApp konteinerį. Kad galėtume iš karto prijungti vApp ir VM prie virtualiojo tinklo, taip pat pridedame priklausomas_on parametrą:

Sukurkite konteinerį

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

}

Sukurkime virtualią mašiną su aprašymu

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

}

}

Pagrindiniai parametrai VM aprašyme:

  • pavadinimas – virtualios mašinos pavadinimas,

  • vappname – vApp, prie kurios reikia pridėti naują VM, pavadinimas,

  • katalogo pavadinimas / šablono pavadinimas – katalogo pavadinimas ir virtualios mašinos šablono pavadinimas,

  • storageprofile – numatytoji saugojimo politika.

Tinklo bloko parametrai:

  • tipas – prijungto tinklo tipas,

  • pavadinimas – prie kurio virtualaus tinklo prijungti VM,

  • isprimary - pagrindinis tinklo adapteris,

  • ipallocation_mode – MANUAL / DHCP / POOL adresų paskirstymo režimas,

  • ip — virtualios mašinos IP adresas, nurodysime rankiniu būdu.

override_template_disk blokas:

  • sizeinmb – virtualios mašinos įkrovos disko dydis

  • storage_profile – disko saugojimo politika

Sukurkime antrąją VM su Nextcloud failų saugyklos aprašymu

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 ]

}

Skyriuje vcdvminternal_disk aprašysime naują virtualų diską, kuris yra prijungtas prie virtualios mašinos.

Vcdvminternaldisk bloko paaiškinimai:

  • bustype – disko valdiklio tipas

  • sizeinmb – disko dydis

  • magistralės numeris / vieneto numeris – prijungimo vieta adapteryje

  • storage_profile – disko saugojimo politika

Apibūdinkime naujausią „Bitrix“ VM

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 atnaujinimas ir papildomų scenarijų įdiegimas

Parengiamas tinklas, aprašomos virtualios mašinos. Prieš importuodami savo infrastruktūrą, galime iš anksto atlikti pradinį aprūpinimą naudodami teikėjų blokus ir nenaudodami Ansible.

Pažiūrėkime, kaip atnaujinti OS ir paleisti CMS Bitrix diegimo scenarijų naudojant aprūpinimo bloką.

Pirmiausia įdiegkime CentOS naujinimo paketus.

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

}

}

}

Komponentų žymėjimas:

  • aprūpinimo priemonė „remote-exec“ - prijunkite nuotolinio aprūpinimo bloką

  • Ryšio bloke aprašome ryšio tipą ir parametrus:

  • tipas — protokolas, mūsų atveju SSH;

  • user – vartotojo vardas;

  • slaptažodis – vartotojo slaptažodis. Mūsų atveju nurodome parametrą vcdvappvm.nginx.customization[0].admin_password, kuriame saugomas sugeneruotas sistemos vartotojo slaptažodis.

  • host — išorinis IP adresas prisijungimui;

  • prievadas - prijungimo prievadas, kuris anksčiau buvo nurodytas DNAT nustatymuose;

  • inline – nurodykite komandų, kurios bus įvestos, sąrašą. Komandos bus įvedamos tokia tvarka, kaip nurodyta šiame skyriuje.

Pavyzdžiui, papildomai vykdykime 1C-Bitrix diegimo scenarijų. Scenarijaus vykdymo rezultato išvestis bus pasiekiama, kol bus vykdomas planas. Norėdami įdiegti scenarijų, pirmiausia aprašome bloką:

Apibūdinkime 1C-Bitrix diegimą.

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"

]

}

Ir mes tuoj pat apibūdinsime Bitrix atnaujinimą.

1C-Bitrix aprūpinimo pavyzdys.

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"

]

}

}

Svarbu! Scenarijus gali neveikti, jei iš anksto neišjungsite SELinux! Jei jums reikia išsamaus straipsnio apie CMS 1C-Bitrix diegimą ir konfigūravimą naudojant bitrix-env.sh, tai galite naudokite mūsų tinklaraščio straipsnį svetainėje.

3. Infrastruktūros inicijavimas

Kaip valdyti debesies infrastruktūrą naudojant „Terraform“.Modulių ir priedų inicijavimas

Darbui naudojame paprastą „džentelmenų rinkinį“: nešiojamąjį kompiuterį su „Windows 10“ OS ir platinimo rinkinį iš oficialios svetainės. terraform.io. Išpakuosime ir inicijuokime naudodami komandą: terraform.exe init

Aprašę skaičiavimo ir tinklo infrastruktūrą, pradedame planuoti savo konfigūracijos testavimą, kur pamatysime, kas bus sukurta ir kaip bus sujungta tarpusavyje.

  1. Vykdykite komandą - terraform plan -var-file=vcd.tfvars.

  2. Gauname rezultatą - Plan: 16 to add, 0 to change, 0 to destroy. Tai yra, pagal šį planą bus sukurta 16 išteklių.

  3. Mes pradedame planą pagal komandą - terraform.exe apply -var-file=vcd.tfvars.

Bus sukurtos virtualios mašinos, o tada mūsų išvardyti paketai bus vykdomi aprūpinimo skiltyje – bus atnaujinta OS ir įdiegta CMS Bitrix.

Priimama ryšio informacija

Įvykdę planą norime gauti duomenis teksto forma prisijungimui prie serverių, tam išvesties sekciją suformatuosime taip:

output "nginxpassword" {

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

}

Ir ši išvestis mums nurodo sukurtos virtualios mašinos slaptažodį:

Outputs: nginx_password = F#4u8!!N

Dėl to gauname prieigą prie virtualių mašinų su atnaujinta operacine sistema ir iš anksto įdiegtais paketais tolimesniam darbui. Viskas paruošta!

Bet ką daryti, jei jau turite esamą infrastruktūrą?

3.1. Veikia Terraform su esama infrastruktūra

Tai paprasta, naudodami importavimo komandą galite importuoti esamas virtualias mašinas ir jų vApp konteinerius.

Apibūdinkime vAPP šaltinį ir virtualią mašiną.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Kitas žingsnis yra importuoti vApp išteklių ypatybes tokiu formatu vcdvapp.<vApp> <org>.<orgvdc>.<vApp>kur:

  • vApp – vApp pavadinimas;

  • org – organizacijos pavadinimas;

  • org_vdc – virtualaus duomenų centro pavadinimas.

Kaip valdyti debesies infrastruktūrą naudojant „Terraform“.Importuojamos vAPP išteklių savybės

Importuokime VM išteklių ypatybes tokiu formatu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, kuriame:

  • VM – VM pavadinimas;

  • vApp – vApp pavadinimas;

  • org – organizacijos pavadinimas;

  • orgvdc yra virtualaus duomenų centro pavadinimas.

Importavimas buvo sėkmingas

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.

Dabar galime pažvelgti į naują importuotą šaltinį:

Importuotas išteklius

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

}

}

Dabar tikrai baigėme – baigėme paskutinį tašką (importavimas į esamą infrastruktūrą) ir aptarėme visus pagrindinius darbo su Terraform punktus. 

Įrankis pasirodė labai patogus ir leidžia apibūdinti savo infrastruktūrą kaip kodą, pradedant nuo vieno debesų tiekėjo virtualių mašinų iki tinklo komponentų resursų aprašymo.

Tuo pačiu metu nepriklausomybė nuo aplinkos leidžia dirbti su vietiniais, debesies ištekliais ir net valdyti platformą. Ir jei nėra palaikomos platformos ir norite pridėti naują, galite parašyti savo teikėją ir juo naudotis.

Šaltinis: www.habr.com

Добавить комментарий