Šiame straipsnyje apžvelgsime, ką sudaro „Terraform“, taip pat palaipsniui pradėsime savo infrastruktūrą
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į
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ę
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
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.
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ą.
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
3. Infrastruktūros inicijavimas
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.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.
-
Vykdykite komandą
- terraform plan -var-file=vcd.tfvars
. -
Gauname rezultatą
- Plan: 16 to add, 0 to change, 0 to destroy.
Tai yra, pagal šį planą bus sukurta 16 išteklių. -
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.
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