Nola kudeatu hodeiko azpiegitura Terraform-ekin

Nola kudeatu hodeiko azpiegitura Terraform-ekin

Artikulu honetan Terraform zertan datzan aztertuko dugu, eta pixkanaka gure azpiegitura propioa martxan jarriko dugu hodeian VMware-rekin — hiru VM prestatuko ditugu helburu ezberdinetarako: proxy, fitxategien biltegiratzea eta CMS.

Dena xehetasunez eta hiru fasetan:

1. Terraform - deskribapena, abantailak eta osagaiak

Terraform IaC (Infrastructure-as-Code) tresna bat da, kodea erabiliz azpiegitura birtualak eraikitzeko eta kudeatzeko.

Erremintarekin lan egitean hainbat abantaila adierazi ditugu:

  • Maizter berrien hedapen-abiadura (ingurune birtualak pertsonalizatuak). Normalean, zenbat eta bezero berri gehiago egon, orduan eta "klik" gehiago egin behar dituzte laguntza teknikoko langileek baliabide berriak argitaratzeko. Terraform-ekin, erabiltzaileek makina birtualaren ezarpenak alda ditzakete (adibidez, sistema eragilea automatikoki itzaltzea eta disko birtualaren partizioa handitzea) laguntza teknikorik behar edo makina bera itzali gabe.

  • Aktibazio-planaren berehalako egiaztapena Tennant berria. Azpiegitura-kodearen deskribapena erabiliz, berehala egiaztatu ahal izango dugu zer gehituko den eta zein ordenatan, baita zein azken egoeratan egongo den makina birtualeko konexioa duen makina birtual edo sare birtual hori edo hura.

  • Hodeiko plataforma ezagunenak deskribatzeko gaitasuna. Tresna erabil dezakezu Amazon eta Google Cloud-etik, VMware vCloud Director-en oinarritutako plataforma pribatuetara, IaaS, SaaS eta PaaS soluzioen barruan zerbitzuak eskainiz.

  • Kudeatu hodeiko hornitzaile anitz eta haien artean banatu azpiegitura akatsen tolerantzia hobetzeko, hodeiko baliabideak sortu, diagnostikatu eta kudeatzeko konfigurazio bakarra erabiliz.

  • Erabilera erosoa demo standak sortzeko software probak eta arazketarako. Proba sailerako standak sortu eta transferitu ditzakezu, softwarea ingurune ezberdinetan probatu paraleloan, eta baliabideak berehala aldatu eta ezaba ditzakezu baliabideak sortzeko plan bakarra sortuz.

"Terrarium" Terraform

Tresnaren abantailei buruz laburki hitz egin dugu, orain zati dezagun bere osagaietan

Hornitzaileak. 

Terraform-en, ia edozein azpiegitura mota irudika daiteke baliabide gisa. Baliabideen eta API plataformaren arteko konexioa hornitzaileen moduluek eskaintzen dute, plataforma jakin baten barruan baliabideak sortzeko aukera ematen dutenak, adibidez, Azure edo VMware vCloud Director.

Proiektuaren barruan, plataforma ezberdinetan hornitzaile ezberdinekin elkarreragin dezakezu.

Baliabideak (baliabideen deskribapena).

Baliabideen deskribapenak plataformaren osagaiak kudeatzeko aukera ematen du, hala nola makina birtualak edo sareak. 

Zuk zeuk sor dezakezu VMware vCloud Director hornitzailearen baliabideen deskribapena eta deskribapen hau erabil dezakezu vCloud Director erabiltzen duen edozein ostalaritza hornitzailerekin baliabideak sortzeko. Autentifikazio-parametroak eta sare-konexio-parametroak behar diren ostalaritza-hornitzailera bakarrik aldatu behar dituzu

Hornitzaileak.

Osagai honek makina birtualak sortu ondoren sistema eragilearen hasierako instalazio eta mantentze-lanetarako eragiketak egiteko aukera ematen du. Makina birtualaren baliabide bat sortu ondoren, hornitzaileak erabil ditzakezu SSH bidez konfiguratzeko eta konektatzeko, sistema eragilea eguneratzeko eta script bat deskargatzeko eta exekutatzeko. 

Sarrera eta Irteerako aldagaiak.

Sarrera-aldagaiak - edozein bloke motatarako sarrera-aldagaiak. 

Irteerako aldagaiek baliabideak sortu ondoren balioak gordetzeko aukera ematen dute eta beste modulu batzuetan sarrerako aldagai gisa erabil daitezke, hornitzaileak blokean adibidez.

Estatuak.

Estatuen fitxategiek hornitzaileen plataformaren baliabideen konfigurazioari buruzko informazioa gordetzen dute. Plataforma lehen aldiz sortzen denean, ez dago baliabideei buruzko informaziorik eta edozein eragiketa baino lehen, Terraformek egoera eguneratzen du dagoeneko deskribatutako baliabideen benetako azpiegiturarekin.

Estatuen helburu nagusia lehendik sortutako baliabideen objektu mordoa gordetzea da, gehitutako baliabideen eta objektuen konfigurazioa alderatzeko, plataforman behin eta berriro sortzea eta aldaketak ekiditeko.

Lehenespenez, egoeraren informazioa terraform.tfstate fitxategi lokalean gordetzen da, baina beharrezkoa bada, talde-lanerako urruneko biltegiratzea posible da.

Uneko plataformako baliabideak egoerara ere inporta ditzakezu Terraform-en laguntzarik gabe sortu ziren beste baliabide batzuekin gehiago elkarreragiteko.  

2. Azpiegiturak sortzea

Osagaiak ordenatuta daude, orain Terraform erabiliz hiru makina birtualeko azpiegitura bat sortuko dugu pixkanaka. Lehenengoa nginx proxy zerbitzaria instalatuta, bigarrena Nextcloud-en oinarritutako fitxategien biltegiratzearekin eta hirugarrena CMS Bitrix-ekin.

Kodea idatzi eta exekutatu egingo dugu gure adibidea erabiliz hodeiak VMware vCloud Director-en. Gure erabiltzaileek Erakundearen Administratzaile-eskubideak dituen kontu bat jasotzen dute. Eskubide berdinak dituen kontu bat erabiltzen baduzu beste VMware hodei batean, kodea erreproduzi dezakezu gure adibideetatik. Joan!

Lehenik eta behin, sor dezagun gure proiektu berrirako direktorio bat, zeinetan azpiegitura deskribatzen duten fitxategiak jarriko diren.

mkdir project01

Jarraian, azpiegituraren osagaiak deskribatuko ditugu. Terraformek harremanak sortzen ditu eta fitxategiak prozesatzen ditu, fitxategietako deskribapenean oinarrituta. Fitxategiak berak deskribatzen diren blokeen helburuaren arabera izenda daitezke, adibidez, network.tf - azpiegituraren sare-parametroak deskribatzen ditu.

Gure azpiegituraren osagaiak deskribatzeko, fitxategi hauek sortu ditugu:

Fitxategien zerrenda.

main.tf - ingurune birtualeko parametroen deskribapena - makina birtualak, edukiontzi birtualak;

network.tf - sare birtualen parametroen eta NAT eta Firewall arauen deskribapena;

variables.tf - erabiltzen ditugun aldagaien zerrenda;

vcd.tfvars - proiektuaren balio aldagaiak VMware vCloud Director modulurako.

Terraform-en konfigurazio-lengoaia deklaratiboa da eta blokeen ordenak ez du axola, hornitzaileen blokeetan izan ezik, zeren bloke honetan azpiegitura prestatzerakoan exekutatu beharreko komandoak deskribatzen ditugu eta ordenan exekutatu egingo dira.

Blokeen egitura.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Blokeak deskribatzeko, bere programazio-lengoaia HCL (HashiCorp Configuration Language) erabiltzen da; posible da azpiegitura deskribatzea JSON erabiliz. Sintaxiari buruz gehiago jakin dezakezu irakurri garatzailearen webgunean.

Inguruko aldagaien konfigurazioa, variables.tf eta vcd.tfvars

Lehenik eta behin, sor ditzagun bi fitxategi erabilitako aldagai guztien zerrenda eta haien balioak deskribatzen dituzten VMware vCloud Director modulurako. Lehenik eta behin, sor dezagun variables.tf fitxategia.

variables.tf fitxategiaren edukia.

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

Hornitzailetik jasotzen ditugun balio aldagaiak.

  • vcd_org_user — Erakundearen Administratzaile eskubideak dituen erabiltzaile-izena,

  • vcd_org_password — erabiltzailearen pasahitza,

  • vcd_org — erakundearen izena,

  • vcd_org_vdc — datu-zentro birtualaren izena,

  • vcd_org_url - APIaren URLa,

  • vcd_org_edge_name — bideratzaile birtualaren izena,

  • vcd_org_catalog — makina birtualeko txantiloiak dituen direktorioaren izena,

  • vcd_edge_external_ip — IP helbide publikoa,

  • vcd_edge_external_network — kanpoko sarearen izena,

  • vcd_org_hdd_sp — HDD biltegiratze politikaren izena,

  • vcd_org_ssd_sp — SSD biltegiratze politikaren izena.

Eta sartu gure aldagaiak:

  • vcd_edge_local_ip_nginx — NGINX-ekin makina birtualaren IP helbidea,

  • vcd_edge_local_ip_bitrix - 1C duen makina birtualaren IP helbidea: Bitrix,

  • vcd_edge_local_ip_nextcloud — Nextcloud-eko makina birtualaren IP helbidea.

Bigarren fitxategiarekin VMware vCloud Director modulurako aldagaiak sortu eta zehazten ditugu vcd.tfvars fitxategian: Gogora dezagun gure adibidean erabiltzen dugula. hodei propioa mClouds, beste hornitzaile batekin lan egiten baduzu, egiaztatu balioak haiekin. 

vcd.tfvars fitxategiaren edukia.

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"

Sarearen konfigurazioa, network.tf.

Inguruko aldagaiak ezarrita daude, orain makina birtualaren konexio-eskema konfiguratuko dugu - makina birtual bakoitzari IP helbide pribatu bat esleituko diogu eta Destination NAT erabiliko dugu portuak kanpoko sarera "birbidaltzeko". Kudeaketa portuetarako sarbidea mugatzeko, gure IP helbideari bakarrik ezarriko diogu sarbidea.

Nola kudeatu hodeiko azpiegitura Terraform-ekinSortzen ari den Terraform plataformaren sare-diagrama

Antolakuntza sare birtual bat sortzen dugu net_lan01 izenarekin, atebide lehenetsia: 192.168.110.254, eta helbide-espazioarekin ere: 192.168.110.0/24.

Sare birtual bat deskribatzen dugu.

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"

  }

}

Sor ditzagun firewall arauak, makina birtualak Internetera sartzeko aukera ematen dutenak. Bloke honen barruan, hodeiko baliabide birtual guztiek Interneterako sarbidea izango dute:

VM Internetera sartzeko arauak deskribatzen ditugu.

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]

}

vcdnetworkrouted.net blokea prozesatu ondoren, vcdnsxvfirewallrule blokea konfiguratzeari ekingo diogun menpekotasuna ezarrita., erabiliz araberakoa. Aukera hau erabiltzen dugu, menpekotasun batzuk inplizituki antzeman daitezkeelako konfigurazioan.

Ondoren, kanpoko saretik portuetara sarbidea ahalbidetzen duten arauak sortuko ditugu eta SSH bidez zerbitzarietara konektatzeko gure IP helbidea adieraziko dugu. Edozein Interneteko erabiltzaileek 80. eta 443. portuetarako sarbidea du web zerbitzarian, eta 90.1.15.1 IP helbidea duen erabiltzaileak zerbitzari birtualen SSH ataketarako sarbidea du.

Baimendu kanpoko saretik portuetarako sarbidea.

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]

}

Iturburu NAT arauak sortzen ditugu Internetera atzitzeko hodeiko sare lokal batetik:

Iturburu NAT arauak deskribatzen ditugu.

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]

}

Eta sare blokearen konfigurazioa osatzeko, Destination NAT arauak gehitzen ditugu kanpoko saretik zerbitzuetara sartzeko:

Destination NAT arauak gehitzea.

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]

}

Gehitu NAT arau bat portuak itzultzeko SSH zerbitzariari Nginx-en.

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]

}

Gehitu NAT arau bat portuak itzultzeko SSH zerbitzariari 1C-Bitrix-ekin.

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]

}

Gehitu NAT arau bat ataka itzultzeko SSH zerbitzariari Nextcloud-ekin.

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 ingurune birtualaren konfigurazioa

Artikuluaren hasieran aurreikusi genuen bezala, hiru makina birtual sortuko ditugu. "Gonbidatuen Pertsonalizazioa" erabiliz prestatuko dira. Sare-parametroak zehaztu ditugun ezarpenen arabera ezarriko ditugu eta erabiltzailearen pasahitza automatikoki sortuko da.

Deskriba dezagun makina birtualak kokatuko diren vApp-a eta haien konfigurazioa.

Nola kudeatu hodeiko azpiegitura Terraform-ekinMakina birtualaren konfigurazioa

Sortu dezagun vApp edukiontzi bat. vApp eta VM sare birtualera berehala konektatu ahal izateko, depends_on parametroa ere gehitzen dugu:

Sortu edukiontzi bat

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

}

Sor dezagun makina birtual bat deskribapen batekin

resource "vcd_vapp_vm" "nginx" {

vapp_name = vcd_vapp.vapp.name

name = "nginx"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nginx

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

VM deskribapenaren parametro nagusiak:

  • name — makina birtualaren izena,

  • vappname - VM berri bat gehitzeko vApp-aren izena,

  • katalogo izena / txantiloi izena - katalogoaren izena eta makina birtualaren txantiloiaren izena,

  • storageprofile - biltegiratze-politika lehenetsia.

Sare blokearen parametroak:

  • mota — konektatutako sare mota,

  • izena - zein sare birtualtara konektatu VM-a,

  • isprimary - lehen mailako sare egokitzailea,

  • ipallocation_mode — MANUAL / DHCP / POOL helbideak esleitzeko modua,

  • ip — makina birtualaren IP helbidea, eskuz zehaztuko dugu.

override_template_disk blokea:

  • sizeinmb — makina birtualaren abiarazteko diskoaren tamaina

  • storage_profile — diskoaren biltegiratze-politika

Sor dezagun bigarren VM bat Nextcloud fitxategien biltegiratzearen deskribapen batekin

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 ]

}

vcdvmininternal_disk atalean makina birtualera konektatuta dagoen disko birtual berri bat deskribatuko dugu.

vcdvmininternaldisk blokeari buruzko azalpenak:

  • bustype - disko kontrolagailu mota

  • sizeinmb — diskoaren tamaina

  • busnumber / unitnumber - konexioaren kokapena egokitzailean

  • storage_profile — diskoaren biltegiratze-politika

Deskriba dezagun Bitrix-en azken VM-a

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 eguneratzea eta script gehigarriak instalatzea

Sarea prestatzen da, makina birtualak deskribatzen dira. Gure azpiegitura inportatu aurretik, hasierako hornidura aldez aurretik egin dezakegu hornitzaile-blokeak erabiliz eta Ansible erabili gabe.

Ikus dezagun nola eguneratu OS eta CMS Bitrix instalazio-scripta exekutatu hornitzaile blokea erabiliz.

Lehenik eta behin, instala ditzagun CentOS eguneratze paketeak.

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

}

}

}

Osagaien izendapena:

  • hornitzailea "remote-exec" - konektatu urruneko hornikuntza blokea

  • Konexio blokean konexio mota eta parametroak deskribatzen ditugu:

  • mota — protokoloa, gure kasuan SSH;

  • user — erabiltzaile izena;

  • pasahitza — erabiltzailearen pasahitza. Gure kasuan, vcdvappvm.nginx.customization[0].admin_password parametrora seinalatzen dugu, sistemaren erabiltzailearentzat sortutako pasahitza gordetzen duena.

  • host — konexiorako kanpoko IP helbidea;

  • portua — konexiorako portua, aurretik DNAT ezarpenetan zehaztu zena;

  • inline - zerrendatu sartuko diren komandoen zerrenda. Komandoak atal honetan adierazitako ordenan sartuko dira.

Adibide gisa, gainera, exekutatu dezagun 1C-Bitrix instalazio-gidoia. Script exekuzioaren emaitzaren irteera eskuragarri egongo da plana exekutatzen ari den bitartean. Scripta instalatzeko, lehenengo blokea deskribatuko dugu:

Deskriba dezagun 1C-Bitrix-en instalazioa.

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"

]

}

Eta berehala deskribatuko dugu Bitrix eguneratzea.

1C-Bitrix hornikuntzaren adibide bat.

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"

]

}

}

Garrantzitsua! Baliteke scriptak ez funtzionatzea aldez aurretik SELinux desgaitzen ez baduzu! Bitrix-env.sh erabiliz CMS 1C-Bitrix instalatu eta konfiguratzeari buruzko artikulu zehatza behar baduzu, oo dezakezu erabili gure blogeko artikulua webgunean.

3. Azpiegitura hasieratzea

Nola kudeatu hodeiko azpiegitura Terraform-ekinModuluak eta pluginak hasieratzea

Lanerako, "jaunaren kit" sinple bat erabiltzen dugu: Windows 10 OS-a duen ordenagailu eramangarri bat eta webgune ofizialeko banaketa-kit bat. terraform.io. Despaketeatu eta hasieratu dezagun komandoa erabiliz: terraform.exe init

Informatika eta sareko azpiegitura deskribatu ondoren, gure konfigurazioa probatzeko plangintza abiarazten dugu, non ikusi ahal izango dugun zer sortuko den eta nola konektatuko den elkarren artean.

  1. Exekutatu komandoa - terraform plan -var-file=vcd.tfvars.

  2. Emaitza lortzen dugu - Plan: 16 to add, 0 to change, 0 to destroy. Hau da, plan horren arabera, 16 baliabide sortuko dira.

  3. Agintean plana martxan jartzen dugu - terraform.exe apply -var-file=vcd.tfvars.

Makina birtualak sortuko dira, eta ondoren zerrendatu ditugun paketeak hornitzaileen atalean exekutatu egingo dira - OS eguneratuko da eta CMS Bitrix instalatuko da.

Konexio-datuak jasotzea

Plana exekutatu ondoren, zerbitzarietara konektatzeko datuak testu moduan jaso nahi ditugu, horretarako irteerako atala honela formateatuko dugu:

output "nginxpassword" {

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

}

Eta hurrengo irteerak sortutako makina birtualaren pasahitza esaten digu:

Outputs: nginx_password = F#4u8!!N

Ondorioz, sistema eragile eguneratua eta aurrez instalatutako paketeak dituzten makina birtualetara sarbidea lortzen dugu gure lan gehiagorako. Dena prest dago!

Baina zer gertatzen da dagoeneko lehendik dauden azpiegiturak badituzu?

3.1. Terraform lehendik dagoen azpiegiturekin lan egitea

Erraza da, egungo makina birtualak eta haien vApp edukiontziak inporta ditzakezu inportazio komandoa erabiliz.

Deskriba ditzagun vAPP baliabidea eta makina birtuala.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Hurrengo urratsa vApp baliabideen propietateak formatuan inportatzea da vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, non:

  • vApp - vApp izena;

  • org — erakundearen izena;

  • org_vdc — datu-zentro birtualaren izena.

Nola kudeatu hodeiko azpiegitura Terraform-ekinvAPP baliabideen propietateak inportatzen

Inporta ditzagun VM baliabideen propietateak formatuan: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, zeinetan:

  • VM - VM izena;

  • vApp - vApp izena;

  • org — erakundearen izena;

  • orgvdc datu-zentro birtualaren izena da.

Inportazioa arrakastatsua izan da

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.

Orain inportatutako baliabide berria ikus dezakegu:

Inportatutako baliabidea

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

}

}

Orain, zalantzarik gabe, prest gaude - azken puntua amaitu dugu (lehendik dauden azpiegituretara inportatzea) eta Terraform-ekin lan egiteko puntu nagusi guztiak kontuan hartu ditugu. 

Tresna oso erosoa izan da eta zure azpiegitura kode gisa deskribatzeko aukera ematen dizu, hodeiko hornitzaile baten makina birtualetik hasita sareko osagaien baliabideak deskribatzera arte.

Aldi berean, ingurunearekiko independentziak aukera ematen du tokiko baliabideekin, hodeikoekin lan egitea, baita plataforma kudeatzea ere. Eta onartzen ez bada plataformarik eta berri bat gehitu nahi baduzu, zure hornitzailea idatzi dezakezu eta erabil dezakezu.

Iturria: www.habr.com

Gehitu iruzkin berria