A felhő infrastruktúrájának kezelése a Terraform segítségével

A felhő infrastruktúrájának kezelése a Terraform segítségével

Ebben a cikkben megnézzük, miből áll a Terraform, és fokozatosan elindítjuk saját infrastruktúránkat is felhőben a VMware-rel — három virtuális gépet készítünk különböző célokra: proxy, fájltárolás és CMS.

Mindenről részletesen és három szakaszban:

1. Terraform - leírás, előnyei és összetevői

A Terraform egy IaC (Infrastructure-as-Code) eszköz a virtuális infrastruktúra kód segítségével történő felépítéséhez és kezeléséhez.

Számos előnyt tapasztaltunk az eszközzel való munka során:

  • Új bérlők telepítési sebessége (egyedi virtuális környezetek). Általában minél több új ügyfél van, annál több „kattintásra” van szükség a technikai támogatást nyújtó személyzetnek az új források közzétételéhez. A Terraform segítségével a felhasználók módosíthatják a virtuális gép beállításait (például automatikusan leállíthatják az operációs rendszert és növelhetik a virtuális lemezpartíciót) anélkül, hogy technikai támogatást igényelnének vagy magát a gépet leállítanák.

  • Az aktiválási terv azonnali ellenőrzése új Tennant. Az infrastruktúra kód leírása segítségével azonnal ellenőrizhetjük, hogy mi kerül hozzáadásra és milyen sorrendben, valamint, hogy milyen végső állapotba kerül ez vagy az a virtuális gép vagy virtuális hálózat virtuális gépekhez kapcsolódó kapcsolatokkal.

  • Lehetőség a legnépszerűbb felhőplatformok leírására. Használhatja az eszközt az Amazontól és a Google Cloudtól az IaaS, SaaS és PaaS megoldásokon belüli szolgáltatásokat kínáló VMware vCloud Director alapú privát platformokig.

  • Több felhőszolgáltató kezelése és az infrastruktúra szétosztása közöttük a fokozott rugalmasság érdekében, egyetlen konfiguráció használatával a felhő-erőforrások létrehozásához, diagnosztizálásához és kezeléséhez.

  • Kényelmes használat bemutató állványok készítéséhez szoftver teszteléshez és hibakereséshez. Létrehozhat és átvihet állványokat a tesztelési részleg számára, párhuzamosan tesztelhet szoftvereket különböző környezetekben, és azonnal módosíthatja és törölheti az erőforrásokat egyetlen erőforrás-építési terv létrehozásával.

"Terrárium" Terraform

Röviden beszéltünk az eszköz előnyeiről, most bontsuk szét alkatrészeire

Szolgáltatók. 

A Terraformban szinte bármilyen típusú infrastruktúra megjeleníthető erőforrásként. Az erőforrások és az API platform közötti kapcsolatot szolgáltatói modulok biztosítják, amelyek lehetővé teszik erőforrások létrehozását egy adott platformon belül, például az Azure vagy a VMware vCloud Directoron belül.

A projekt részeként különböző platformokon különböző szolgáltatókkal léphet kapcsolatba.

Erőforrások (forrásleírás).

Az erőforrások leírása lehetővé teszi a platformösszetevők, például a virtuális gépek vagy hálózatok kezelését. 

Saját maga is létrehozhat erőforrásleírást a VMware vCloud Director szolgáltatóhoz, és ezzel a leírással erőforrásokat hozhat létre bármely, a vCloud Directort használó tárhelyszolgáltatónál. Csak a hitelesítési paramétereket és a hálózati kapcsolat paramétereit kell módosítania a kívánt tárhelyszolgáltatóra

Ellátók.

Ez az összetevő lehetővé teszi az operációs rendszer kezdeti telepítéséhez és karbantartásához szükséges műveletek végrehajtását a virtuális gépek létrehozása után. Miután létrehozott egy virtuálisgép-erőforrást, a szolgáltatók segítségével konfigurálhatja és csatlakozhat SSH-n keresztül, frissítheti az operációs rendszert, valamint letölthet és futtathat egy parancsfájlt. 

Bemeneti és kimeneti változók.

Bemeneti változók - bemeneti változók bármilyen blokktípushoz. 

A kimeneti változók lehetővé teszik az értékek mentését az erőforrások létrehozása után, és bemeneti változókként használhatók más modulokban, például a Provisioners blokkban.

Államok.

Az állapotfájlok információkat tárolnak a szolgáltatói platform erőforrásainak konfigurációjáról. A platform első létrehozásakor nincs információ az erőforrásokról, és minden művelet előtt a Terraform frissíti az állapotot a már leírt erőforrások valós infrastruktúrájával.

Az állapotok fő célja egy csomó objektum mentése a már létrehozott erőforrásokból, hogy összehasonlítsa a hozzáadott erőforrások és objektumok konfigurációját, hogy elkerülhető legyen a platform ismételt létrehozása és módosítása.

Alapértelmezés szerint az állapotinformációkat a helyi terraform.tfstate fájl tárolja, de szükség esetén lehetőség van távoli tárhely használatára a csoportmunkához.

A jelenlegi platformerőforrásokat állapotba is importálhatja, hogy további interakciót végezhessen más erőforrásokkal, amelyeket a Terraform segítsége nélkül hoztak létre.  

2. Infrastruktúra létrehozása

A komponensek szétválogatásra kerültek, most a Terraform segítségével fokozatosan három virtuális gépből álló infrastruktúrát hozunk létre. Az első telepített nginx proxyszerverrel, a második Nextcloud alapú fájltárolóval, a harmadik pedig CMS Bitrixszel.

Kódot írunk és végrehajtjuk a példánk segítségével felhők a VMware vCloud Directoron. Felhasználóink ​​Szervezeti adminisztrátori jogosultságokkal rendelkező fiókot kapnak Ha egy másik VMware felhőben azonos jogokkal rendelkező fiókot használ, a példáinkból reprodukálhatja a kódot. Megy!

Először is hozzunk létre egy könyvtárat az új projektünkhöz, amelybe az infrastruktúrát leíró fájlok kerülnek.

mkdir project01

Ezután az infrastruktúra összetevőit ismertetjük. A Terraform kapcsolatokat hoz létre és fájlokat dolgoz fel a fájlok leírása alapján. Magukat a fájlokat a leírt blokkok célja alapján lehet elnevezni, például network.tf – az infrastruktúra hálózati paramétereit írja le.

Infrastruktúránk összetevőinek leírásához a következő fájlokat hoztuk létre:

Fájlok listája.

main.tf - a virtuális környezet paramétereinek leírása - virtuális gépek, virtuális tárolók;

network.tf - a virtuális hálózati paraméterek, valamint a NAT és tűzfalszabályok leírása;

variables.tf - az általunk használt változók listája;

vcd.tfvars – a VMware vCloud Director modul projektváltozóértékei.

A Terraform konfigurációs nyelve deklaratív, és a blokkok sorrendje nem számít, kivéve a kezelő blokkokat, mert ebben a blokkban leírjuk az infrastruktúra előkészítésekor végrehajtandó parancsokat és ezek sorrendben fognak végrehajtásra kerülni.

Blokk szerkezet.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

A blokkok leírásához saját HCL (HashiCorp Configuration Language) programozási nyelvet használnak, az infrastruktúra leírása JSON segítségével lehetséges. A szintaxisról többet megtudhat olvassa el a fejlesztő honlapján.

Környezeti változók konfigurációja, variables.tf és vcd.tfvars

Először hozzunk létre két fájlt, amelyek leírják a VMware vCloud Director modul összes használt változójának listáját és azok értékét. Először hozzuk létre a variables.tf fájlt.

A variables.tf fájl tartalma.

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

Változó értékek, amelyeket a szolgáltatótól kapunk.

  • vcd_org_user — szervezeti adminisztrátori jogokkal rendelkező felhasználónév,

  • vcd_org_password — felhasználói jelszó,

  • vcd_org – a szervezet neve,

  • vcd_org_vdc — a virtuális adatközpont neve,

  • vcd_org_url – API URL,

  • vcd_org_edge_name — a virtuális útválasztó neve,

  • vcd_org_catalog — a virtuálisgép-sablonokat tartalmazó könyvtár neve,

  • vcd_edge_external_ip – nyilvános IP-cím,

  • vcd_edge_external_network — a külső hálózat neve,

  • vcd_org_hdd_sp — a HDD tárolási szabályzatának neve,

  • vcd_org_ssd_sp — az SSD tárolási szabályzatának neve.

És írja be a változóinkat:

  • vcd_edge_local_ip_nginx — az NGINX-szel rendelkező virtuális gép IP-címe,

  • vcd_edge_local_ip_bitrix – a virtuális gép IP-címe 1C: Bitrix-szel,

  • vcd_edge_local_ip_nextcloud – a virtuális gép IP-címe a Nextclouddal.

A második fájllal létrehozunk és megadunk változókat a VMware vCloud Director modulhoz a vcd.tfvars fájlban: Emlékezzünk vissza, hogy példánkban saját felhő mClouds, ha másik szolgáltatóval dolgozik, ellenőrizze velük az értékeket. 

A vcd.tfvars fájl tartalma.

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"

Hálózati konfiguráció, network.tf.

A környezeti változók be vannak állítva, most beállítjuk a virtuális gép csatlakozási sémáját - minden virtuális géphez privát IP-címet rendelünk, és a Destination NAT segítségével „továbbítjuk” a portokat a külső hálózatra. A felügyeleti portokhoz való hozzáférés korlátozása érdekében csak az IP-címünkhöz állítjuk be a hozzáférést.

A felhő infrastruktúrájának kezelése a Terraform segítségévelHálózati diagram a készülő Terraform platformhoz

Létrehozunk egy virtuális szervezeti hálózatot net_lan01 néven, az alapértelmezett átjáró: 192.168.110.254, valamint a címtér: 192.168.110.0/24.

Leírunk egy virtuális hálózatot.

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"

  }

}

Hozzunk létre tűzfalszabályokat, amelyek lehetővé teszik a virtuális gépek számára az internet elérését. Ezen a blokkon belül a felhőben lévő összes virtuális erőforrás hozzáfér majd az internethez:

Leírjuk a virtuális gépek internet-hozzáférésének szabályait.

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]

}

Miután megállapítottuk azt a függőséget, hogy a vcdnetworkrouted.net blokk feldolgozása után folytatjuk a vcdnsxvfirewallrule blokk konfigurálását, használva attól függ. Azért használjuk ezt a lehetőséget, mert előfordulhat, hogy bizonyos függőségek implicit módon felismerhetők a konfigurációban.

Ezután olyan szabályokat hozunk létre, amelyek lehetővé teszik a külső hálózat portjaihoz való hozzáférést, és megadjuk az IP-címünket az SSH-n keresztüli csatlakozáshoz a szerverekhez. Bármely internetfelhasználó hozzáférhet a webszerver 80-as és 443-as portjához, a 90.1.15.1 IP-című felhasználó pedig a virtuális szerverek SSH-portjaihoz.

Hozzáférés engedélyezése a külső hálózat portjaihoz.

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]

}

Forrás NAT-szabályokat hozunk létre az internet helyi felhőhálózatból való eléréséhez:

Leírjuk a Source NAT szabályait.

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]

}

És a hálózati blokk konfigurálásának befejezéséhez hozzáadjuk a Destination NAT szabályokat a szolgáltatások külső hálózatról való eléréséhez:

Cél NAT-szabályok hozzáadása.

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]

}

Adjon hozzá egy NAT-szabályt a portfordításhoz az SSH-kiszolgálóhoz az Nginx alatt.

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]

}

Adjon hozzá egy NAT-szabályt a portfordításhoz az SSH-kiszolgálóhoz az 1C-Bitrix segítségével.

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]

}

Adjon hozzá egy NAT-szabályt a portfordításhoz az SSH-kiszolgálóhoz a Nextcloud segítségével.

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ális környezet konfigurációja

Ahogy a cikk elején terveztük, három virtuális gépet fogunk létrehozni. A "Vendég testreszabása" segítségével készülnek. A hálózati paramétereket az általunk megadott beállításoknak megfelelően állítjuk be, és a felhasználói jelszó automatikusan generálásra kerül.

Ismertesse a vApp-ot, amelyben a virtuális gépek elhelyezkedni fognak, és azok konfigurációját.

A felhő infrastruktúrájának kezelése a Terraform segítségévelVirtuális gép konfigurációja

Hozzon létre egy vApp-tárolót. Annak érdekében, hogy a vApp-ot és a virtuális gépet azonnal csatlakoztathassuk a virtuális hálózathoz, hozzáadjuk a addict_on paramétert is:

Hozzon létre egy tárolót

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

}

Hozzunk létre egy virtuális gépet leírással

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

}

}

Fő paraméterek a virtuális gép leírásában:

  • név – a virtuális gép neve,

  • vappname - annak a vApp-nak a neve, amelyhez új virtuális gépet kell hozzáadni,

  • katalógusnév / sablonnév - katalógusnév és virtuális gép sablon neve,

  • storageprofile – alapértelmezett tárolási szabályzat.

Hálózati blokk paraméterei:

  • típus – a csatlakoztatott hálózat típusa,

  • név – melyik virtuális hálózathoz kell csatlakoztatni a virtuális gépet,

  • isprimary - elsődleges hálózati adapter,

  • ipallocation_mode — MANUAL / DHCP / POOL címkiosztási mód,

  • ip — a virtuális gép IP-címe, manuálisan adjuk meg.

override_template_disk block:

  • sizeinmb – a virtuális gép indítólemezének mérete

  • storage_profile — a lemez tárolási szabályzata

Hozzon létre egy második virtuális gépet a Nextcloud fájltároló leírásával

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 ]

}

A vcdvminternal_disk részben egy új virtuális lemezt írunk le, amely a virtuális géphez csatlakozik.

Magyarázatok a vcdvminternaldisk blokkhoz:

  • bustype - lemezvezérlő típusa

  • sizeinmb — lemez mérete

  • buszszám / egységszám - csatlakozási hely az adapterben

  • storage_profile — a lemez tárolási szabályzata

Ismertesse a Bitrix legújabb virtuális gépét

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

}

}

Az operációs rendszer frissítése és további szkriptek telepítése

A hálózat előkészítése, a virtuális gépek leírása. Infrastruktúránk importálása előtt előzetesen elvégezhetjük a kezdeti kiépítést a szolgáltatói blokkok használatával és az Ansible használata nélkül.

Nézzük meg, hogyan frissítheti az operációs rendszert, és futtassa a CMS Bitrix telepítőszkriptet a szolgáltató blokk használatával.

Először telepítsük a CentOS frissítőcsomagokat.

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

}

}

}

Az alkatrészek megnevezése:

  • „remote-exec” szolgáltató – csatlakoztassa a távoli kiépítési blokkot

  • A csatlakozási blokkban leírjuk a kapcsolat típusát és paramétereit:

  • típus — protokoll, esetünkben SSH;

  • user – felhasználói név;

  • jelszó – felhasználói jelszó. Esetünkben a vcdvappvm.nginx.customization[0].admin_password paraméterre mutatunk, amely a rendszerfelhasználó számára generált jelszót tárolja.

  • host – külső IP-cím a csatlakozáshoz;

  • port – csatlakozási port, amelyet korábban a DNAT-beállításokban határoztak meg;

  • inline - felsorolja a beírandó parancsok listáját. A parancsok az ebben a részben jelzett sorrendben kerülnek bevitelre.

Példaként hajtsuk végre az 1C-Bitrix telepítőszkriptet. A parancsfájl végrehajtási eredményének kimenete elérhető lesz a terv futása közben. A szkript telepítéséhez először leírjuk a blokkot:

Ismertesse az 1C-Bitrix telepítését.

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"

]

}

És azonnal leírjuk a Bitrix frissítést.

Példa az 1C-Bitrix kiépítésre.

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"

]

}

}

Fontos! Előfordulhat, hogy a szkript nem működik, ha nem tiltja le előre a SELinuxot! Ha részletes cikkre van szüksége a CMS 1C-Bitrix telepítéséről és konfigurálásáról a bitrix-env.sh használatával, akkor használja blogcikkünket a weboldalon.

3. Infrastruktúra inicializálása

A felhő infrastruktúrájának kezelése a Terraform segítségévelModulok és bővítmények inicializálása

A munkához egy egyszerű „úri készletet” használunk: egy laptopot Windows 10 operációs rendszerrel és egy disztribúciós készletet a hivatalos webhelyről terraform.io. Csomagoljuk ki és inicializáljuk a paranccsal: terraform.exe init

A számítási és hálózati infrastruktúra ismertetése után elindítjuk a tervezést, hogy teszteljük konfigurációnkat, ahol láthatjuk, hogy mi jön létre és hogyan kapcsolódik egymáshoz.

  1. Hajtsa végre a parancsot - terraform plan -var-file=vcd.tfvars.

  2. Megkapjuk az eredményt - Plan: 16 to add, 0 to change, 0 to destroy. Vagyis e terv szerint 16 forrás jön létre.

  3. Parancsra elindítjuk a tervet - terraform.exe apply -var-file=vcd.tfvars.

Létrejönnek a virtuális gépek, majd az általunk felsorolt ​​csomagok lefutnak a Provider részben – az operációs rendszer frissítése és a CMS Bitrix telepítése megtörténik.

Kapcsolódási információk fogadása

A terv végrehajtása után szöveges formában szeretnénk adatokat kapni a szerverekhez való csatlakozáshoz, ehhez a kimeneti részt a következőképpen formázzuk:

output "nginxpassword" {

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

}

És a következő kimenet megmondja nekünk a létrehozott virtuális gép jelszavát:

Outputs: nginx_password = F#4u8!!N

Ennek köszönhetően virtuális gépekhez jutunk hozzá frissített operációs rendszerrel és előre telepített csomagokkal a további munkánkhoz. Minden készen áll!

De mi van akkor, ha már rendelkezik meglévő infrastruktúrával?

3.1. Működő Terraform meglévő infrastruktúrával

Egyszerű, az import paranccsal importálhatja a jelenlegi virtuális gépeket és azok vApp-tárolóit.

Ismertesse a vAPP erőforrást és a virtuális gépet.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

A következő lépés a vApp-erőforrások tulajdonságainak formátumban történő importálása vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ahol:

  • vApp – vApp neve;

  • org – a szervezet neve;

  • org_vdc — a virtuális adatközpont neve.

A felhő infrastruktúrájának kezelése a Terraform segítségévelvAPP erőforrás tulajdonságainak importálása

Importáljuk a virtuálisgép-erőforrások tulajdonságait a következő formátumban: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, amiben:

  • VM – virtuális gép neve;

  • vApp – vApp neve;

  • org – a szervezet neve;

  • orgvdc a virtuális adatközpont neve.

Az importálás sikeres volt

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.

Most megnézhetjük az új importált erőforrást:

Importált erőforrás

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

}

}

Most már határozottan készen állunk – az utolsó ponttal (importálás a meglévő infrastruktúrába) végeztünk, és a Terraformmal való munka minden fő pontját átgondoltuk. 

Az eszköz nagyon kényelmesnek bizonyult, és lehetővé teszi az infrastruktúra kódként történő leírását, kezdve egy felhőszolgáltató virtuális gépeitől a hálózati összetevők erőforrásainak leírásáig.

A környezettől való függetlenség ugyanakkor lehetővé teszi a helyi, felhőalapú erőforrásokkal való munkát, sőt a platform kezelését is. És ha nincs támogatott platform, és újat szeretne hozzáadni, akkor írhat saját szolgáltatót és használhatja.

Forrás: will.com

Hozzászólás