Hogyan kezeljük a felhőinfrastruktúrát a Terraform segítségével

Hogyan kezeljük a felhőinfrastruktúrát a Terraform segítségével

Ebben a cikkben megvizsgáljuk, hogy miből áll a Terraform, és lépésről lépésre elindítjuk saját infrastruktúránkat a VMware felhőjében — három VM-et készítünk különböző célokra: proxy, fájltároló és CMS.

Mindenről részletesen és három lépésben:

1. Terraform — leírás, előnyök és összetevők

A Terraform egy IaC (Infrastructure-as-Code) eszköz, amely lehetővé teszi a virtuális infrastruktúra kód alapú létrehozását és kezelését.

Az eszköz használata során több előnyt is megfigyeltünk:

  • Új bérlők, azaz felhasználói virtuális környezetek gyors telepítése. Általában minél több új ügyfél van, annál több "kattintásra" van szüksége a technikai támogatást nyújtó munkatársaknak az új erő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épek paramétereit (például automatikusan kikapcsolhatják az operációs rendszert és növelhetik a virtuális lemez partícióját) a technikai támogatás bevonása nélkül, a gép leállítása nélkül. Az új bérlő aktiválási tervének azonnali ellenőrzése.

  • Az infrastruktúra kódjának leírása révén azonnal ellenőrizhetjük, hogy mi és milyen sorrendben kerül hozzáadásra, valamint hogy a virtuális gép vagy virtuális hálózat milyen végső állapotban lesz a virtuális gépekhez való kapcsolódásokkal együtt. Lehetőség a legnépszerűbb felhőplatformok leírására.

  • A legnépszerűbb felhőszolgáltatók eszközét használhatja, az Amazon és Google Cloud szolgáltatásoktól kezdve a VMware vCloud Director alapú magánplatformokig, amelyek IaaS, SaaS és PaaS megoldások keretében kínálnak szolgáltatásokat. Több felhőszolgáltató kezelése

  • és az infrastruktúra elosztása közöttük a megbízhatóság növelése érdekében, egyetlen konfigurációt használva a felhőerőforrások létrehozásához, diagnosztikájához és kezeléséhez. Kényelmes használat kiépítési demóstandokhoz

  • szoftverek teszteléséhez és hibakereséséhez. Standokat hozhat létre és adhat át a tesztelő csapat számára, párhuzamosan tesztelheti a szoftvert különböző környezetekben, valamint azonnal módosíthatja és törölheti az erőforrásokat, mindössze egy erőforrás-létrehozási terv készítésével. A Terraform „Terrárium”

Röviden bemutattuk az eszköz előnyeit, most nézzük meg az összetevőit.

Szolgáltatók.

Szolgáltatók. 

A Terraform szinte bármilyen típusú infrastruktúrát erőforrásként lehet ábrázolni. Az erőforrások és az API platform közötti kapcsolatot a providers modulok biztosítják, amelyek lehetővé teszik az erőforrások létrehozását egy adott platform keretein belül, például Azure vagy VMware vCloud Director.

A projekt keretein belül különböző szolgáltatókkal interakcióba léphet különböző platformokon.

Resources (erőforrások leírása).

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

Saját magának létrehozhat egy erőforrás-leírást a VMware vCloud Director szolgáltatóhoz, és ezt a leírást bármelyik h hosting szolgáltatónál felhasználhatja, amely a vCloud Directort használja. Csak az autentikációs paramétereket és a hálózati kapcsolat paramétereit kell megváltoztatnia a szükséges hosting szolgáltatóhoz.

Provisioners.

Ez az összetevő lehetővé teszi az operációs rendszer elsődleges telepítésének és karbantartásának végrehajtását virtuális gépek létrehozása után. Miután létrehozta a virtuális gép erőforrást, a provisioners segítségével beállíthatja és csatlakozhat SSH-n, frissítheti az operációs rendszert, valamint feltöltheti és futtathat egy szkriptet. 

Input és Output változók.

Az Input változók — bármilyen típusú blokkok belépő változói. 

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

States (állapotok).

A states fájlok tárolják a szolgáltató platform erőforrás-configurációjára vonatkozó információkat. Amikor először létrehozza a platformot, nincsenek információk az erőforrásokról, és bármilyen Terraform művelet előtt a rendszer frissíti az állapotot a már leírt erőforrásokkal rendelkező valós infrastruktúrával.

Az állapotok fő célja az, hogy megőrizzék az immár létrehozott erőforrások objektumainak összekapcsolását, hogy összehasonlíthassák az újonnan hozzáadott erőforrások és objektumok konfigurációját, ezzel elkerülve az újra létrehozást és a platform módosításait.

Az alapértelmezett állapotinformáció helyi fájlban, terraform.tfstate tárolódik, de szükség esetén van lehetőség távoli tárolásra is a csapatmunkához.

Ezen kívül importálhatja a platform aktuális erőforrásait egy állapotba, hogy további interakciót folytathasson más erőforrásokkal, amelyek viszont nem a Terraform segítségével készültek.  

2. Infrastruktúra létrehozása

A komponensek áttekintése után a Terraform segítségével lépésről lépésre létrehozzuk az infrastruktúrát három virtuális géppel. Az első egy nginx proxyszolgáltatóval, a második egy Nextcloud alapú fájltárral, a harmadik pedig a Bitrix CMS-sel.

A kódot és a végrehajtását a mi VMware vCloud Director felhőnk példáján fogjuk bemutatni. A felhasználók Organizational Administrator jogokkal kapják meg a fiókjukat; ha ugyanazzal a jogú fiókkal használja egy másik VMware felhőt, akkor képes lesz újra létrehozni a példáinkból származó kódot. Gyerünk!

Először hozzunk létre egy könyvtárat az új projektünk számára, ahol az infrastruktúra leíró fájljai lesznek elhelyezve.

mkdir project01

Ezután leírjuk az infrastruktúra elemeit. A Terraform összekapcsolja és feldolgozza a fájlokat a fájlokban található leírások alapján. A fájlokat a leírt blokkok célja szerint lehet elnevezni, például a network.tf — a hálózati paramétereket írja le az infrastruktúrához.

Az infrastruktúránk elemeinek 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ózat és a NAT, tűzfal szabályaik paramétereinek leírása;

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

vcd.tfvars — a VMware vCloud Director modul projekt változói.

A Terraform konfigurációs nyelve deklaratív, és a blokkok sorrendje nem számít, kivéve a provisioner blokkokat, mivel ebben a blokkban a infrastruktúra előkészítése során végrehajtandó parancsokat írjuk le, és ezek sorrendben kerülnek végrehajtásra.

A blokkok struktúrája.

"" "" {

# Block body

= # Argumentum

}

A blokkok leírásához a HCL (HashiCorp Configuration Language) saját programozási nyelvét használják, és az infrastruktúra leírása JSON segítségével is lehetséges. A szintaxisról bővebben olvashat a fejlesztő weboldalán.

Környezetváltozó konfiguráció, variables.tf és vcd.tfvars

Először létrehozunk két fájlt, amelyek leírják az összes használt változót és azok értékeit a VMware vCloud Director modulhoz. Először a variables.tf fájlt hozzuk létre.

A variables.tf fájl tartalma.

változó "vcd_org_user" {

  leírás = "vCD Bérlői Felhasználó"

}

változó "vcd_org_password" {

  leírás = "vCD Bérlői Jelszó"

}

változó "vcd_org" {

  leírás = "vCD Bérlői Szervezet"

}

változó "vcd_org_vdc" {

  leírás = "vCD Bérlői VDC"

}

változó "vcd_org_url" {

  leírás = "vCD Bérlői URL"

}

változó "vcd_org_max_retry_timeout" {

  alapértelmezett = "60"

}

változó "vcd_org_allow_unverified_ssl" {

  alapértelmezett = "true"

}

változó "vcd_org_edge_name" {

  leírás = "vCD élek neve"

}

változó "vcd_org_catalog" {

  leírás = "vCD nyilvános katalógus"

}

változó "vcd_template_os_centos7" {

  leírás = "OS CentOS 7"

  alapértelmezett = "CentOS7"

}

változó "vcd_org_ssd_sp" {

  leírás = "Tárhely Politika"

  alapértelmezett = "Arany Tárhely Politika"

}

változó "vcd_org_hdd_sp" {

  leírás = "Tárhely Politika"

  alapértelmezett = "Bronz Tárhely Politika"

}

változó "vcd_edge_local_subnet" {

  leírás = "Szervezeti Hálózat Alhálózata"

}

változó "vcd_edge_external_ip" {

  leírás = "Külső nyilvános IP"

}

változó "vcd_edge_local_ip_nginx" {}

változó "vcd_edge_local_ip_bitrix" {}

változó "vcd_edge_local_ip_nextcloud" {}

változó "vcd_edge_external_network" {}

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

  • vcd_org_user — felhasználónév az Szervezet Adminisztrátor jogokkal,

  • vcd_org_password — a felhasználó jelszava,

  • 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ális gépek sablonjainak katalógusa,

  • 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 politika neve,

  • vcd_org_ssd_sp — az SSD tárolási politika neve.

És beírjuk a saját változóinkat:

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

  • vcd_edge_local_ip_bitrix — 1C: Bitrix-szel rendelkező virtuális gép IP-címe,

  • vcd_edge_local_ip_nextcloud — Nextcloud-dal rendelkező virtuális gép IP-címe.

A második fájlban létrehozunk és megadjuk a VMware vCloud Director modul változóit a vcd.tfvars fájlban: Emlékeztetjük, hogy a példánkban mi saját mFelhőnket használjuk,, ha más szolgáltatóval dolgozik, kérdezze meg tőlü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 = "Sablonok"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Arany Tárhely Politika"

vcd_org_hdd_sp = "Bronz Tárhely Politika"

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 meg vannak adva, most beállítjuk a virtuális gépek csatlakozási séma, amelyhez minden virtuális géphez egy privát IP-cím kerül, és a Destination NAT segítségével "átirányítjuk" a portokat a külső hálózatra. A kezelői portokhoz való hozzáférés korlátozásához csak a mi IP-címünket engedélyezzük.

Hogyan kezeljük a felhőinfrastruktúrát a Terraform segítségévelA létrehozott Terraform platform hálózati sémája

Létrehozunk egy virtuális szervezeti hálózatot névvel net_lan01, alapértelmezett átjáróval: 192.168.110.254, valamint címtartománnyal: 192.168.110.0/24.

Leírjuk a 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"

  }

}

Létrehozunk tűzfal szabályokat, amelyek lehetővé teszik a virtuális gépek Internethez való hozzáférését. E blokk keretein belül minden virtuális erőforrás a felhőben hozzáférést kap az Internethez:

Leírjuk a VM-ek Internethez való 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]

}

A dependenciát beállítva, amely biztosítja, hogy a vcdnetworkrouted.net blokk feldolgozása után kezdjük meg a vcdnsxvfirewallrule blokk konfigurálását., a segítségével dependson. Használjuk ezt az opciót, mivel egyes függőségek implicit módon ismerhetők fel a konfigurációban.

Ezt követően létrehozunk olyan szabályokat, amelyek lehetővé teszik a portokhoz való hozzáférést a külső hálózatról, és megadjuk a mi IP-címünket a SSH-hoz való kapcsolódáshoz a szerverekhez. Bármely Internet felhasználó hozzáférést kap a 80-as és 443-as portokhoz a webszerveren, míg a 90.1.15.1 IP-címmel rendelkező felhasználó hozzáférést kap a virtuális szerverek SSH portjaihoz.

Lehetővé tesszük a portok külső hálózatról való hozzáférését.

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]

}

Létrehozunk Source NAT szabályokat az Internethez való hozzáféréshez a felhőalapú helyi hálózaton keresztül:

Leírjuk a Source NAT szabályokat.

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 külső hálózatról elérhető szolgáltatásokhoz:

Hozzáadjuk a Destination NAT szabályokat.

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"

eredeti_cím = var.vcd_edge_external_ip
eredeti_port = 443

lefordított_cím = var.vcd_edge_local_ip_nginx
lefordított_port = 443
protokoll = "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"

leírás = "NGINX HTTP"

eredeti_cím = var.vcd_edge_external_ip
eredeti_port = 80

lefordított_cím = var.vcd_edge_local_ip_nginx
lefordított_port = 80
protokoll = "tcp"

depends_on = [vcd_network_routed.net]

}

NAT szabályt adunk hozzá az SSH-szerver portjainak Nginx alatt történő fordításához.

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"

leírás = "SSH NGINX"

eredeti_cím = var.vcd_edge_external_ip
eredeti_port = 58301

lefordított_cím = var.vcd_edge_local_ip_nginx
lefordított_port = 22
protokoll = "tcp"

depends_on = [vcd_network_routed.net]

}

NAT szabályt adunk hozzá az SSH-szerver portjainak fordításához 1C-Bitrix alatt.

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"

leírás = "SSH Bitrix"

eredeti_cím = var.vcd_edge_external_ip
eredeti_port = 58302

lefordított_cím = var.vcd_edge_local_ip_bitrix
lefordított_port = 22
protokoll = "tcp"

depends_on = [vcd_network_routed.net]

}

NAT szabályt adunk hozzá az SSH-szerver portjainak fordításához Nextcloud alatt.

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"

leírás = "SSH Nextcloud"

eredeti_cím = var.vcd_edge_external_ip
eredeti_port = 58303 lefordított_cím = var.vcd_edge_local_ip_nextcloud
lefordított_port = 22
protokoll = "tcp"

depends_on = [vcd_network_routed.net]

}

A virtuális környezet konfigurációja main.tf

Ahogy a cikk elején terveztük, három virtuális gépet hozunk létre. Ezeket a „Guest Customization” segítségével készítjük el. A hálózati beállításokat az általunk megadott konfigurációk szerint írjuk, a felhasználói jelszó automatikusan generálódik.

Leírjuk a vApp-et, amelyben a virtuális gépek és azok konfigurációi találhatók.

Hogyan kezeljük a felhőinfrastruktúrát a Terraform segítségévelA virtuális gépek konfigurációja

Létrehozunk egy vApp konténert, hogy azonnal csatlakozhassuk a vApp-ot és a VM-eket a virtuális hálózathoz is, további depend_on paramétert adunk hozzá:

Konténer létrehozása

resource "vcd_vapp" "vapp" {
név = "web"
power_on = "true" depends_on = [vcd_network_routed.net]

}

Létrehozunk egy virtuális gépet a leírásával

resource "vcd_vapp_vm" "nginx" {

vapp_name = vcd_vapp.vapp.name

név = "nginx"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memória = 8192

cpu-k = 1

cpu_magok = 1

hálózat {

típus = "org"

név = vcd_network_routed.net.name

is_primary = true

adapter_típus = "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

}

}

A VM leírásának fő paraméterei:

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

  • vappname — a vApp neve, amelyhez új VM-et adunk,

  • catalogname / templatename — a katalógus neve és a virtuális gép sablonja,

  • storageprofile — az alapértelmezett tárolási politika.

A hálózat blokk paraméterei:

  • típus — a csatlakozó hálózat típusa,

  • név — melyik virtuális hálózathoz csatlakozzon a VM,

  • isprimary — a fő hálózati adapter,

  • ipallocation_mode — az IP cím kiosztásának módja MANUAL / DHCP / POOL,

  • ip — az IP-cím a virtuális géphez, amelyet kézzel adunk meg.

Az override_template_disk blokk:

  • sizeinmb — a virtuális gép boot lemezének mérete

  • storage_profile — a lemez tárolási politikája

Létrehozunk egy második VM-et a Nextcloud fájltároló leírásával

resource "vcd_vapp_vm" "nextcloud" {

vapp_name = vcd_vapp.vapp.name

név = "nextcloud"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memória = 8192

cpu-k = 1

cpu_magok = 1

hálózat {

típus = "org"

név = vcd_network_routed.net.name

is_primary = true

adapter_típus = "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 szakaszban új virtuális lemezt írunk le, amely csatlakozik a virtuális géphez.

Magyarázat a vcdvminternaldisk blokkhoz:

  • bustype — lemezvezérlő típusa

  • sizeinmb — a lemez mérete

  • busnumber / unitnumber — csatlakozási hely az adapteren

  • storage_profile — a lemez tárolási politikája

Leírjuk az utolsó VM-et a Bitrixen

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

memória = 8192

cpu-k = 1

cpu_magok = 1

hálózat {

típus = "org"

név = vcd_network_routed.net.name

is_primary = true

adapter_típus = "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 kiegészítő script-ek telepítése

A hálózat elkészült, a virtuális gépek leírva vannak. Az infrastruktúránk importálása előtt előzetes provizionálást végezhetünk a provisioners blokkok segítségével Ansible használata nélkül.

Nézzük meg, hogyan frissíthetjük az operációs rendszert és futtathatjuk a CMS Bitrix telepítő scriptjét a provisioner blokk segítségével.

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

}

}

}

A részek megjelölése:

  • provisioner «remote-exec» — csatlakozunk a távoli "provizionáló" blokhoz

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

  • type — a protokoll, esetünkben SSH;

  • user — felhasználónév;

  • password — a felhasználó jelszava. Esetünkben a vcdvappvm.nginx.customization[0].admin_password paraméterre hivatkozunk, amely a jelszót tárolja.

  • host — a csatlakozáshoz szükséges külső IP-cím;

  • port — a csatlakozási port, amelyet korábban a DNAT beállításokban határoztunk meg;

  • inline — felsoroljuk a végrehajtandó parancsok listáját. A parancsokat a megadott sorrendben hajtják végre, ahogy ezt a szakaszban megadtuk.

Például, baszni fogjuk a 1C-Bitrix telepítő scriptjét. A script futásának eredménye a terv végrehajtása során lesz elérhető. A script telepítéséhez először írjuk le a blokkot:

A 1C-Bitrix telepítését írjuk le.

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ését.

1C-Bitrix provizionálási példa.

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! A script nem fog működni, ha először nem kapcsolja ki a SELinux-ot! Ha részletes cikket szeretne a CMS 1C-Bitrix telepítéséről és beállításáról a bitrix-env.sh segítségével, akkor használja a weboldalunkon található blogcikkünket.

3. Az infrastruktúra inicializálása

Hogyan kezeljük a felhőinfrastruktúrát a Terraform segítségévelA modulok és pluginok inicializálása

A munkához egy egyszerű "úriember csomagot" használunk: laptop Windows 10 operációs rendszerrel és a hivatalos webhelyről letöltött disztribúciót terraform.io. Kicsomagoljuk és inicializáljuk a következő parancs segítségével: terraform.exe init

A számítási és hálózati infrastruktúra leírása után elindítjuk a tervezést a konfigurációnk ellenőrzésére, ahol láthatjuk, hogy mi fog létrejönni és hogyan kapcsolódnak egymáshoz.

  1. Futtassuk a parancsot - terraform plan -var-file=vcd.tfvars.

  2. Eredményt kapunk - Terv: 16 hozzáadni, 0 megváltoztatni, 0 eltüntetni. Tehát e terv szerint 16 erőforrást fogunk létrehozni.

  3. Elindítjuk a tervet a következő parancs segítségével - terraform.exe apply -var-file=vcd.tfvars.

A virtuális gépek létrejönnek, majd a megadott csomagok végrehajtódnak a provisioner szekció keretein belül — az operációs rendszer frissül és telepítve lesz a CMS Bitrix.

Kapcsolódási adatok beszerzése

A terv végrehajtása után szöveges formátumban szeretnénk megkapni az adatokat a szerverekhez való csatlakozáshoz, ehhez az output szekciót a következőképpen alakítsuk:

output "nginxpassword" {

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

}

És a következő kimenet azt jelzi számunkra a létrehozott virtuális gép jelszavát:

Outputs: nginx_password = F#4u8!!N

Végül hozzáférést nyerünk a frissített operációs rendszerrel és előtelepített csomagokkal rendelkező virtuális gépekhez. Minden készen áll!

De mi van, ha már van egy meglévő infrastruktúrája?

3.1. A Terraform használata már meglévő infrastruktúrával

Egyszerű, importálhatja a jelenlegi virtuális gépeket és vApp tárolóikat az import parancs segítségével.

Írjuk le 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 az erőforrások vApp tulajdonságainak importálása a következő formátumban vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ahol:

  • vApp — a vApp neve;

  • org — a szervezet neve;

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

Hogyan kezeljük a felhőinfrastruktúrát a Terraform segítségévelA vAPP erőforrás tulajdonságainak importálása

Importáljuk a VM erőforrások tulajdonságait a következő formátumban: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, amelyben:

  • VM — a VM neve;

  • vApp — a vApp neve;

  • org — a szervezet neve;

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

Az import sikeresen megtörtént

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Importálás az ID-ből "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Az import előkészítve!

vcd_vapp_vm előkészítve az importálásra

vcd_vapp_vm.Zabbix: Állapot frissítése... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Importálás sikeres!

Az importált erőforrások a fenti képernyőn láthatók. Ezek az erőforrások most már
a Terraform állapotában vannak, és a jövőben a Terraform által fognak kezelődni.

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

}

hálózat {

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 biztosan kész — befejeztük az utolsó dolgot (importálás a meglévő infrastruktúrába), és áttekintettük a Terraform használatának főbb pontjait. 

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

Ezenkívül a környezettől való függetlenség lehetővé teszi a helyi és felhőalapú erőforrásokkal, valamint platformkezeléssel végzett munkát. Ha pedig nem áll rendelkezésre támogatott platform, és új hozzáadását szeretnéd, létrehozhatsz saját szolgáltatót, és felhasználhatod azt.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster