Kā pārvaldīt mākoņa infrastruktūru, izmantojot Terraform

Kā pārvaldīt mākoņa infrastruktūru, izmantojot Terraform

Å ajā rakstā apskatÄ«sim, no kā sastāv Terraform, kā arÄ« pakāpeniski iedarbināsim savu infrastruktÅ«ru mākonÄ« ar VMware ā€” sagatavosim trÄ«s VM dažādiem mērÄ·iem: starpniekserveri, failu glabāŔanai un CMS.

Par visu sīkāk un trīs posmos:

1. Terraform - apraksts, priekŔrocības un sastāvdaļas

Terraform ir IaC (Infrastructure-as-Code) rīks virtuālās infrastruktūras veidoŔanai un pārvaldībai, izmantojot kodu.

Mēs atzÄ«mējām vairākas priekÅ”rocÄ«bas, strādājot ar rÄ«ku:

  • Jauno Ä«rnieku ievieÅ”anas ātrums (pielāgotas virtuālās vides). Parasti, jo vairāk ir jaunu klientu, jo vairāk ā€œklikŔķuā€ tehniskā atbalsta personālam ir jāveic, lai publicētu jaunus resursus. Izmantojot Terraform, lietotāji var mainÄ«t virtuālās maŔīnas iestatÄ«jumus (piemēram, automātiski izslēgt OS un palielināt virtuālā diska nodalÄ«jumu), neprasot tehnisko atbalstu vai neizslēdzot paÅ”u maŔīnu.

  • TÅ«lÄ«tēja aktivizācijas plāna pārbaude jaunais Tennants. Izmantojot infrastruktÅ«ras koda aprakstu, mēs uzreiz varam pārbaudÄ«t, kas tiks pievienots un kādā secÄ«bā, kā arÄ« kādā gala stāvoklÄ« bÅ«s tā vai cita virtuālā maŔīna vai virtuālais tÄ«kls ar pieslēgumiem virtuālajām maŔīnām.

  • Spēja aprakstÄ«t populārākās mākoņu platformas. Varat izmantot rÄ«ku no Amazon un Google Cloud lÄ«dz privātām platformām, kuru pamatā ir VMware vCloud Director, piedāvājot pakalpojumus IaaS, SaaS un PaaS risinājumos.

  • Pārvaldiet vairākus mākoņa pakalpojumu sniedzējus un izplatÄ«t infrastruktÅ«ru starp tām, lai uzlabotu kļūdu toleranci, izmantojot vienu konfigurāciju, lai izveidotu, diagnosticētu un pārvaldÄ«tu mākoņa resursus.

  • Ērta izmantoÅ”ana demonstrācijas stendu veidoÅ”anai programmatÅ«ras testÄ“Å”anai un atkļūdoÅ”anai. Varat izveidot un pārsÅ«tÄ«t testÄ“Å”anas nodaļas stendus, paralēli testēt programmatÅ«ru dažādās vidēs un uzreiz mainÄ«t un dzēst resursus, izveidojot tikai vienu resursu veidoÅ”anas plānu.

"Terārijs" Terraform

Mēs Ä«si runājām par rÄ«ka priekÅ”rocÄ«bām, tagad sadalÄ«sim to sastāvdaļās

Pakalpojumu sniedzēji. 

Terraformā gandrÄ«z jebkura veida infrastruktÅ«ru var attēlot kā resursu. Savienojumu starp resursiem un API platformu nodroÅ”ina pakalpojumu sniedzēju moduļi, kas ļauj izveidot resursus konkrētas platformas ietvaros, piemēram, Azure vai VMware vCloud Director.

Projekta ietvaros jūs varat sazināties ar dažādiem pakalpojumu sniedzējiem dažādās platformās.

Resursi (resursa apraksts).

Resursu apraksts ļauj pārvaldÄ«t platformas komponentus, piemēram, virtuālās maŔīnas vai tÄ«klus. 

Varat pats izveidot resursa aprakstu VMware vCloud Director nodroÅ”inātājam un izmantot Å”o aprakstu, lai izveidotu resursus ar jebkuru mitināŔanas pakalpojumu sniedzēju, kas izmanto vCloud Director. Jums tikai jāmaina autentifikācijas parametri un tÄ«kla savienojuma parametri uz nepiecieÅ”amo hostinga pakalpojumu sniedzēju

NodroŔinātāji.

Å is komponents ļauj veikt operētājsistēmas sākotnējās instalÄ“Å”anas un apkopes darbÄ«bas pēc virtuālo maŔīnu izveides. Kad esat izveidojis virtuālās maŔīnas resursu, varat izmantot nodroÅ”inātājus, lai konfigurētu un izveidotu savienojumu, izmantojot SSH, atjauninātu operētājsistēmu un lejupielādētu un palaistu skriptu. 

Ievades un izvades mainīgie.

Ievades mainÄ«gie - ievades mainÄ«gie jebkura veida blokiem. 

Izvades mainÄ«gie ļauj saglabāt vērtÄ«bas pēc resursu izveides, un tos var izmantot kā ievades mainÄ«gos citos moduļos, piemēram, nodroÅ”inātāju blokā.

valstis.

Stāvokļa faili glabā informāciju par nodroŔinātāja platformas resursu konfigurāciju. Pirmoreiz izveidojot platformu, nav informācijas par resursiem un pirms jebkādas darbības Terraform atjaunina stāvokli ar jau aprakstīto resursu reālo infrastruktūru.

Stāvokļu galvenais mērķis ir saglabāt jau izveidoto resursu objektu kopumu, lai salīdzinātu pievienoto resursu un objektu konfigurāciju, lai izvairītos no atkārtotas izveides un platformas izmaiņām.

Pēc noklusējuma informācija par stāvokli tiek glabāta lokālajā terraform.tfstate failā, bet nepiecieÅ”amÄ«bas gadÄ«jumā ir iespējams izmantot attālo krātuvi komandas darbam.

Varat arÄ« importēt paÅ”reizējos platformas resursus stāvoklÄ«, lai turpinātu mijiedarbÄ«bu ar citiem resursiem, kas savukārt tika izveidoti bez Terraform palÄ«dzÄ«bas.  

2. Infrastruktūras izveide

Komponenti ir sakārtoti, tagad izmantojot Terraform pakāpeniski veidosim infrastruktÅ«ru ar trim virtuālajām maŔīnām. Pirmais ar instalētu nginx starpniekserveri, otrais ar failu krātuvi, kura pamatā ir Nextcloud, un treÅ”ais ar CMS Bitrix.

Mēs rakstÄ«sim kodu un izpildÄ«sim to, izmantojot mÅ«su piemēru mākoņi vietnē VMware vCloud Director. MÅ«su lietotāji saņem kontu ar organizācijas administratora tiesÄ«bām. Ja izmantojat kontu ar tādām paŔām tiesÄ«bām citā VMware mākonÄ«, varat reproducēt kodu no mÅ«su piemēriem. Aiziet!

Vispirms izveidosim mūsu jaunajam projektam direktoriju, kurā tiks ievietoti infrastruktūru aprakstoŔie faili.

mkdir project01

Tālāk mēs aprakstam infrastruktÅ«ras komponentus. Terraform izveido attiecÄ«bas un apstrādā failus, pamatojoties uz aprakstu failos. PaÅ”us failus var nosaukt, pamatojoties uz aprakstÄ«to bloku mērÄ·i, piemēram, network.tf - apraksta infrastruktÅ«ras tÄ«kla parametrus.

Lai aprakstÄ«tu mÅ«su infrastruktÅ«ras komponentus, mēs izveidojām Ŕādus failus:

Failu saraksts.

main.tf - virtuālās vides parametru apraksts - virtuālās maŔīnas, virtuālie konteineri;

network.tf - virtuālā tīkla parametru un NAT un Firewall noteikumu apraksts;

variables.tf - izmantojamo mainīgo lielumu saraksts;

vcd.tfvars - projekta mainīgās vērtības modulim VMware vCloud Director.

Terraform konfigurācijas valoda ir deklaratÄ«va, un bloku secÄ«bai nav nozÄ«mes, izņemot nodroÅ”inātāja blokus, jo Å”ajā blokā aprakstām komandas, kas jāizpilda, sagatavojot infrastruktÅ«ru un tās tiks izpildÄ«tas kārtÄ«bā.

Bloku struktūra.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Bloku aprakstÄ«Å”anai tiek izmantota sava programmÄ“Å”anas valoda HCL (HashiCorp Configuration Language), infrastruktÅ«ru iespējams aprakstÄ«t, izmantojot JSON. Varat uzzināt vairāk par sintaksi lasiet izstrādātāja vietnē.

Vides mainīgā konfigurācija, variables.tf un vcd.tfvars

Vispirms izveidosim divus failus, kas apraksta visu izmantoto mainīgo sarakstu un to vērtības modulim VMware vCloud Director. Vispirms izveidosim failu variables.tf.

Faila variables.tf saturs.

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

Mainīgās vērtības, ko saņemam no pakalpojumu sniedzēja.

  • vcd_org_user ā€” lietotājvārds ar organizācijas administratora tiesÄ«bām,

  • vcd_org_password ā€” lietotāja parole,

  • vcd_org ā€” organizācijas nosaukums,

  • vcd_org_vdc ā€” virtuālā datu centra nosaukums,

  • vcd_org_url ā€” API URL,

  • vcd_org_edge_name ā€” virtuālā marÅ”rutētāja nosaukums,

  • vcd_org_catalog ā€” direktorija nosaukums ar virtuālās maŔīnas veidnēm,

  • vcd_edge_external_ip ā€” publiskā IP adrese,

  • vcd_edge_external_network ā€” ārējā tÄ«kla nosaukums,

  • vcd_org_hdd_sp ā€” HDD krātuves politikas nosaukums,

  • vcd_org_ssd_sp ā€” SSD krātuves politikas nosaukums.

Un ievadiet mūsu mainīgos:

  • vcd_edge_local_ip_nginx ā€” virtuālās maŔīnas IP adrese ar NGINX,

  • vcd_edge_local_ip_bitrix ā€” virtuālās maŔīnas IP adrese ar 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud ā€” virtuālās maŔīnas IP adrese ar Nextcloud.

Ar otro failu mēs izveidojam un norādām mainÄ«gos VMware vCloud Director modulim failā vcd.tfvars: Atgādināsim, ka mÅ«su piemērā mēs izmantojam paÅ”u mākonis mClouds, ja strādājat ar citu pakalpojumu sniedzēju, pārbaudiet vērtÄ«bas ar tiem. 

Faila vcd.tfvars saturs.

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"

Tīkla konfigurācija, network.tf.

Vides mainÄ«gie ir iestatÄ«ti, tagad mēs iestatÄ«sim virtuālās maŔīnas savienojuma shēmu - katrai virtuālajai maŔīnai pieŔķirsim privātu IP adresi un izmantosim Destination NAT, lai portus ā€œpārsÅ«tÄ«tuā€ uz ārējo tÄ«klu. Lai ierobežotu piekļuvi pārvaldÄ«bas portiem, mēs iestatÄ«sim piekļuvi tikai mÅ«su IP adresei.

Kā pārvaldīt mākoņa infrastruktūru, izmantojot TerraformTiek veidota platformas Terraform tīkla diagramma

Mēs izveidojam virtuālo organizācijas tÄ«klu ar nosaukumu net_lan01, noklusējuma vārteju: 192.168.110.254, kā arÄ« ar adreÅ”u telpu: 192.168.110.0/24.

Mēs aprakstām virtuālo tīklu.

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"

  }

}

Izveidosim ugunsmÅ«ra noteikumus, kas ļauj virtuālajām maŔīnām piekļūt internetam. Å ajā blokā visiem mākoņa virtuālajiem resursiem bÅ«s piekļuve internetam:

Mēs aprakstām noteikumus VM piekļuvei internetam.

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]

}

Konstatējot atkarÄ«bu, ka pēc vcdnetworkrouted.net bloka apstrādes mēs turpinām konfigurēt bloku vcdnsxvfirewallrule, izmantojot atkarÄ«gs no. Mēs izmantojam Å”o opciju, jo dažas atkarÄ«bas var tikt atpazÄ«tas konfigurācijā.

Tālāk mēs izveidosim noteikumus, kas ļauj piekļūt portiem no ārējā tīkla un norādīsim mūsu IP adresi savienojuma izveidei ar serveriem, izmantojot SSH. Jebkuram interneta lietotājam ir piekļuve tīmekļa servera portiem 80 un 443, un lietotājam ar IP adresi 90.1.15.1 ir piekļuve virtuālo serveru SSH portiem.

Atļaujiet piekļuvi portiem no ārējā tīkla.

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]

}

Mēs izveidojam avota NAT noteikumus, lai piekļūtu internetam no mākoņa lokālā tīkla:

Mēs aprakstām avota NAT noteikumus.

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]

}

Un, lai pabeigtu tīkla bloka konfigurāciju, mēs pievienojam galamērķa NAT noteikumus, lai piekļūtu pakalpojumiem no ārējā tīkla:

GalamērÄ·a NAT noteikumu pievienoÅ”ana.

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]

}

Pievienojiet NAT kārtulu portu tulkoŔanai SSH serverī zem 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]

}

Pievienojiet NAT noteikumu portu tulkoŔanai SSH serverim, izmantojot 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]

}

Pievienojiet NAT noteikumu porta tulkoŔanai SSH serverim, izmantojot 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 virtuālās vides konfigurācija

Kā plānojām raksta sākumā, mēs izveidosim trÄ«s virtuālās maŔīnas. Tie tiks sagatavoti, izmantojot "Viesa pielāgoÅ”anu". Mēs iestatÄ«sim tÄ«kla parametrus atbilstoÅ”i mÅ«su norādÄ«tajiem iestatÄ«jumiem, un lietotāja parole tiks Ä£enerēta automātiski.

Aprakstīsim vApp, kurā atradīsies virtuālās maŔīnas, un to konfigurāciju.

Kā pārvaldÄ«t mākoņa infrastruktÅ«ru, izmantojot TerraformVirtuālās maŔīnas konfigurācija

Izveidosim vApp konteineru. Lai mēs varētu nekavējoties savienot vApp un VM ar virtuālo tīklu, mēs pievienojam arī parametru addict_on:

Izveidojiet konteineru

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

}

Izveidosim virtuālo maŔīnu ar aprakstu

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

}

}

Galvenie parametri VM aprakstā:

  • nosaukums ā€” virtuālās maŔīnas nosaukums,

  • vappname ā€” tās vApp nosaukums, kurai jāpievieno jauna virtuālā maŔīna,

  • kataloga nosaukums/veidnes nosaukums ā€” kataloga nosaukums un virtuālās maŔīnas veidnes nosaukums,

  • storageprofile ā€” noklusējuma krātuves politika.

TÄ«kla bloka parametri:

  • tips ā€” savienotā tÄ«kla veids,

  • nosaukums ā€” ar kuru virtuālo tÄ«klu savienot virtuālo maŔīnu,

  • isprimary ā€” primārais tÄ«kla adapteris,

  • ipallocation_mode ā€” MANUĀLAIS / DHCP / POOL adreses pieŔķirÅ”anas režīms,

  • ip ā€” virtuālās maŔīnas IP adrese, mēs to norādÄ«sim manuāli.

override_template_disk bloks:

  • sizeinmb ā€” sāknÄ“Å”anas diska lielums virtuālajai maŔīnai

  • storage_profile ā€” diska uzglabāŔanas politika

Izveidosim otru virtuālo maŔīnu ar Nextcloud failu krātuves aprakstu

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 ]

}

Sadaļā vcdvminternal_disk mēs aprakstÄ«sim jaunu virtuālo disku, kas ir savienots ar virtuālo maŔīnu.

Paskaidrojumi par vcdvminternaldisk bloku:

  • bustype - diska kontrollera tips

  • sizeinmb ā€” diska izmērs

  • kopnes numurs / vienÄ«bas numurs - savienojuma vieta adapterÄ«

  • storage_profile ā€” diska uzglabāŔanas politika

AprakstÄ«sim jaunāko virtuālo maŔīnu vietnē 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

}

}

OS atjaunināŔana un papildu skriptu instalÄ“Å”ana

TÄ«kls ir sagatavots, virtuālās maŔīnas ir aprakstÄ«tas. Pirms mÅ«su infrastruktÅ«ras importÄ“Å”anas mēs varam veikt sākotnējo nodroÅ”ināŔanu iepriekÅ”, izmantojot nodroÅ”inātāju blokus un neizmantojot Ansible.

Apskatīsim, kā atjaunināt OS un palaist CMS Bitrix instalācijas skriptu, izmantojot nodroŔinātāja bloku.

Vispirms instalēsim CentOS atjaunināŔanas pakotnes.

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

}

}

}

Komponentu apzīmējums:

  • nodroÅ”inātājs ā€œremote-execā€ - pievienojiet attālās nodroÅ”ināŔanas bloku

  • Savienojuma blokā mēs aprakstām savienojuma veidu un parametrus:

  • tips ā€” protokols, mÅ«su gadÄ«jumā SSH;

  • user ā€” lietotājvārds;

  • parole ā€” lietotāja parole. MÅ«su gadÄ«jumā mēs norādām uz parametru vcdvappvm.nginx.customization[0].admin_password, kas saglabā sistēmas lietotāja Ä£enerēto paroli.

  • resursdators ā€” ārējā IP adrese savienojumam;

  • ports ā€” savienojuma ports, kas iepriekÅ” bija norādÄ«ts DNAT iestatÄ«jumos;

  • inline ā€” uzskaitiet to komandu sarakstu, kuras tiks ievadÄ«tas. Komandas tiks ievadÄ«tas tādā secÄ«bā, kā norādÄ«ts Å”ajā sadaļā.

Piemēram, papildus izpildīsim 1C-Bitrix instalācijas skriptu. Skripta izpildes rezultāta izvade būs pieejama, kamēr plāns darbojas. Lai instalētu skriptu, vispirms mēs aprakstam bloku:

Aprakstīsim 1C-Bitrix instalēŔanu.

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"

]

}

Un mēs nekavējoties aprakstīsim Bitrix atjauninājumu.

1C-Bitrix nodroÅ”ināŔanas piemērs.

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"

]

}

}

SvarÄ«gs! Skripts var nedarboties, ja iepriekÅ” neizslēdzat SELinux! Ja jums ir nepiecieÅ”ams detalizēts raksts par CMS 1C-Bitrix instalÄ“Å”anu un konfigurÄ“Å”anu, izmantojot bitrix-env.sh, varat izmantojiet mÅ«su emuāra rakstu vietnē.

3. Infrastruktūras inicializācija

Kā pārvaldīt mākoņa infrastruktūru, izmantojot TerraformModuļu un spraudņu inicializācija

Darbam mēs izmantojam vienkārÅ”u ā€œdžentlmeņa komplektuā€: klēpjdatoru ar operētājsistēmu Windows 10 un izplatÄ«Å”anas komplektu no oficiālās vietnes. terraform.io. Izpakosim un inicializējam, izmantojot komandu: terraform.exe init

Pēc skaitļoÅ”anas un tÄ«kla infrastruktÅ«ras aprakstÄ«Å”anas mēs uzsākam plānoÅ”anu, lai pārbaudÄ«tu mÅ«su konfigurāciju, kur mēs varam redzēt, kas tiks izveidots un kā tas tiks savienots viens ar otru.

  1. Izpildi komandu - terraform plan -var-file=vcd.tfvars.

  2. Mēs iegÅ«stam rezultātu - Plan: 16 to add, 0 to change, 0 to destroy. Tas ir, saskaņā ar Å”o plānu tiks izveidoti 16 resursi.

  3. Mēs palaižam plānu pēc komandas - terraform.exe apply -var-file=vcd.tfvars.

Tiks izveidotas virtuālās maŔīnas, un pēc tam mÅ«su uzskaitÄ«tās pakotnes tiks izpildÄ«tas nodroÅ”inātāju sadaļā - tiks atjaunināta OS un instalēta CMS Bitrix.

Saņem savienojuma datus

Pēc plāna izpildes vēlamies saņemt datus teksta formā savienojumam ar serveriem, Å”im nolÅ«kam izvades sadaļu formatēsim Ŕādi:

output "nginxpassword" {

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

}

Un Ŕāda izvade mums norāda izveidotās virtuālās maŔīnas paroli:

Outputs: nginx_password = F#4u8!!N

Rezultātā mēs iegÅ«stam piekļuvi virtuālajām maŔīnām ar atjauninātu operētājsistēmu un iepriekÅ” instalētām pakotnēm mÅ«su turpmākajam darbam. Viss ir gatavs!

Bet ko darīt, ja jums jau ir esoŔā infrastruktūra?

3.1. Darbojas Terraform ar esoŔo infrastruktūru

Tas ir vienkārÅ”i ā€” varat importēt paÅ”reizējās virtuālās maŔīnas un to vApp konteinerus, izmantojot importÄ“Å”anas komandu.

Aprakstīsim vAPP resursu un virtuālo maŔīnu.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Nākamais solis ir vApp resursu rekvizÄ«tu importÄ“Å”ana formātā vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, kur:

  • vApp ā€” vApp nosaukums;

  • org ā€” organizācijas nosaukums;

  • org_vdc ā€” virtuālā datu centra nosaukums.

Kā pārvaldÄ«t mākoņa infrastruktÅ«ru, izmantojot TerraformVAPP resursu rekvizÄ«tu importÄ“Å”ana

Importēsim VM resursu rekvizÄ«tus Ŕādā formātā: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, kurā:

  • VM ā€” VM nosaukums;

  • vApp ā€” vApp nosaukums;

  • org ā€” organizācijas nosaukums;

  • orgvdc ir virtuālā datu centra nosaukums.

ImportēŔana bija veiksmīga

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.

Tagad mēs varam apskatīt jauno importēto resursu:

Importēts resurss

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

}

}

Tagad noteikti esam gatavi - esam pabeiguÅ”i ar pēdējo punktu (importÄ“Å”ana esoÅ”ajā infrastruktÅ«rā) un esam apsvēruÅ”i visus galvenos darba ar Terraform punktus. 

RÄ«ks izrādÄ«jās ļoti ērts un ļauj raksturot savu infrastruktÅ«ru kā kodu, sākot no viena mākoņa nodroÅ”inātāja virtuālajām maŔīnām lÄ«dz tÄ«kla komponentu resursu aprakstÄ«Å”anai.

Tajā paŔā laikā neatkarÄ«ba no vides ļauj strādāt ar vietējiem, mākoņa resursiem un pat pārvaldÄ«t platformu. Un, ja nav atbalstÄ«tas platformas un vēlaties pievienot jaunu, varat uzrakstÄ«t savu pakalpojumu sniedzēju un izmantot to.

Avots: www.habr.com

Pievieno komentāru