Ebben a cikkben megnézzük, miből áll a Terraform, és fokozatosan elindítjuk saját infrastruktúránkat is
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
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
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
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.
Há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.
Virtuá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
3. Infrastruktúra inicializálása
Modulok é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.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.
-
Hajtsa végre a parancsot
- terraform plan -var-file=vcd.tfvars
. -
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. -
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.
vAPP 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