Meriv çawa bi Terraform-ê Binesaziya Cloud Rêvebir dike

Meriv çawa bi Terraform-ê Binesaziya Cloud Rêvebir dike

Di vê gotarê de em ê binihêrin ka Terraform ji çi pêk tê, û her weha hêdî hêdî binesaziya xwe dest pê dike di ewr de bi VMware - em ê sê VM-ê ji bo mebestên cihêreng amade bikin: proxy, hilanîna pelan û CMS.

Li ser her tiştî bi hûrgulî û di sê qonaxan de:

1. Terraform - danasîn, avantaj û pêkhate

Terraform amûrek IaC (Binesaziya-wek-Kodê) ye ku ji bo avakirina û rêvebirina binesaziya virtual bi karanîna kodê.

Me di xebata bi amûrê re çend avantajên xwe destnîşan kir:

  • Leza bicihkirina kirêdarên nû (dorgehên virtual yên xwerû). Bi gelemperî, her ku bêtir xerîdarên nû hene, pêdivî ye ku karmendên piştevaniya teknîkî bêtir "klîk" bikin da ku çavkaniyên nû çap bikin. Bi Terraform re, bikarhêner dikarin mîhengên makîneya virtual biguhezînin (mînakî, bixweber OS-ê rawestînin û dabeşkirina dîska virtual zêde bikin) bêyî ku hewcedariya piştgirîya teknîkî hebe an jî makîneyê bixwe rawestîne.

  • Verastkirina tavilê ya plana aktîfkirinê Tennant nû. Bi karanîna danasîna koda binesaziyê, em dikarin tavilê kontrol bikin ka dê çi were zêdekirin û bi çi rêzê, û her weha dê di kîjan rewşa dawî de ev an wê makîneya virtual an tora virtual ya bi girêdanên bi makîneyên virtual re be.

  • Qabiliyeta danasîna platformên ewr ên herî populer. Hûn dikarin amûrê bikar bînin ji Amazon û Google Cloud, heya platformên taybet ên li ser bingeha VMware vCloud Director, ku karûbarên di nav çareseriyên IaaS, SaaS û PaaS de pêşkêş dikin.

  • Gelek pêşkêşkerên ewr birêve bibin û binesaziyê di navbera wan de belav bikin da ku tolerasyona xeletiyê baştir bikin, ji bo afirandina, teşhîskirin û birêvebirina çavkaniyên ewr yek veavakirinê bikar bînin.

  • Bikaranîna rehet ji bo afirandina standên demo ji bo ceribandina nermalavê û xeletkirinê. Hûn dikarin ji bo beşa ceribandinê rawestan biafirînin û veguhezînin, nermalava li hawîrdorên cihêreng bi paralelî ceribandin, û bi çêkirina tenê yek plansaziyek avakirina çavkaniyê ve tavilê çavkaniyan biguhezînin û jêbirin.

"Terrarium" Terraform

Me bi kurtî li ser avantajên amûrê peyivî, naha em wê di nav pêkhateyên wê de veqetînin

Providers. 

Li Terraform, hema hema her celeb binesaziyek dikare wekî çavkaniyek were destnîşan kirin. Têkiliya di navbera çavkaniyan û platforma API-ê de ji hêla modulên pêşkêşker ve tê peyda kirin, ku dihêle hûn di hundurê platformek taybetî de çavkaniyan biafirînin, mînakî, Azure an VMware vCloud Director.

Wekî beşek projeyê, hûn dikarin li ser platformên cihêreng bi pêşkêşkerên cihêreng re têkilî daynin.

Çavkanî (ravekirina çavkaniyê).

Danasîna çavkaniyan destûrê dide te ku hûn hêmanên platformê, wek makîneyên virtual an torê, birêve bibin. 

Hûn dikarin bi xwe ji bo pêşkêşvanê VMware vCloud Director ravekek çavkaniyekê biafirînin û vê şirovekirinê bikar bînin da ku çavkaniyan bi her pêşkêşkerek mêvandariyê re ku Derhênerê vCloud bikar tîne biafirînin. Hûn tenê hewce ne ku pîvanên erêkirinê û pîvanên pêwendiya torê li pêşkêşvanê mêvandariyê yê hewce biguhezînin

Pêşkêşker.

Ev hêman dihêle ku piştî afirandina makîneyên virtual, ji bo sazkirina destpêkê û domandina pergala xebitandinê operasyonan pêk bîne. Gava ku we çavkaniyek makîneya virtual çêkir, hûn dikarin pêşkêşkeran bikar bînin da ku hûn bi SSH-ê veavakirin û girêdan, pergala xebitandinê nûve bikin, û skrîptek dakêşin û bimeşînin. 

Guherbarên Input û Output.

Guherbarên têketinê - guhêrbarên têketinê ji bo her cûreyên blokê. 

Guherbarên derketinê dihêle hûn piştî afirandina çavkaniyan nirxan hilînin û dikarin di modulên din de wekî guhêrbarên têketinê werin bikar anîn, mînakî di bloka Provisioners de.

Dewletên.

Pelên dewletan agahdarî li ser veavakirina çavkaniyên platforma pêşkêşker diparêzin. Dema ku platform yekem car tê afirandin, di derheqê çavkaniyan de agahdarî tune û berî her operasyonê, Terraform dewletê bi binesaziya rastîn a çavkaniyên ku berê hatî destnîşan kirin nûve dike.

Armanca sereke ya dewletan ew e ku komek tiştên çavkaniyên ku ji berê ve hatine afirandin xilas bikin da ku veavakirina çavkanî û tiştên lêzêdekirî bidin ber hev da ku ji dubarekirina afirandin û guhertinên platformê dûr nekevin.

Bi xwerû, agahdariya dewletê di pelê terraform.tfstate ya herêmî de tê hilanîn, lê heke hewce be, gengaz e ku meriv hilanîna dûr ji bo xebata tîmê bikar bîne.

Her weha hûn dikarin çavkaniyên platformê yên heyî bixin nav dewletê da ku bêtir bi çavkaniyên din ên ku di encamê de bêyî alîkariya Terraform hatine afirandin re têkilî daynin.  

2. Çêkirina binesaziyê

Parçe hatine rêz kirin, naha bi karanîna Terraform em ê hêdî hêdî bi sê makîneyên virtual binesaziyek çêbikin. Ya yekem bi servera proxy nginx ve hatî saz kirin, ya duyemîn bi hilanîna pelê li ser bingeha Nextcloud û ya sêyemîn jî bi CMS Bitrix re.

Em ê kodê binivîsin û bi karanîna mînaka xwe wê bicîh bikin ewrên li ser VMware vCloud Director. Bikarhênerên me hesabek bi mafên Rêvebirê Rêxistinê werdigirin. Ger hûn hesabek bi heman mafan di cloudek din a VMware de bikar bînin, hûn dikarin kodê ji mînakên me dubare bikin. Ajotin!

Pêşîn, bila em ji bo projeya xweya nû pelrêçekek biafirînin ku pelên ku binesaziyê vedibêjin dê tê de werin danîn.

mkdir project01

Piştre, em hêmanên binesaziyê diyar dikin. Terraform têkiliyan diafirîne û pelan li ser bingeha ravekirina pelan diafirîne. Pelên xwe dikarin li ser bingeha armanca blokên ku têne diyar kirin bêne nav kirin, mînakî network.tf - pîvanên torê yên ji bo binesaziyê diyar dike.

Ji bo danasîna pêkhateyên binesaziya xwe, me pelên jêrîn afirandin:

Lîsteya pelan.

main.tf - danasîna parametreyên ji bo jîngeha virtual - makîneyên virtual, konteynerên virtual;

network.tf - danasîna parametreyên tora virtual û qaîdeyên NAT û Firewall;

variables.tf - lîsteya guherbarên ku em bikar tînin;

vcd.tfvars - nirxên guhêrbar ên projeyê ji bo modula VMware vCloud Director.

Zimanê veavakirinê di Terraform de diyarker e û rêza blokan ne girîng e, ji bilî blokên dabînker, ji ber ku di vê blokê de em fermanên ku di dema amadekirina binesaziyê de bêne bicîhanîn vedibêjin û ew ê bi rêzê bêne bicîh kirin.

Struktura blokê.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Ji bo danasîna blokan, zimanê wê yê bernamesaziyê HCL (Zimanê Vesazkirina HashiCorp) tê bikar anîn; gengaz e ku binesaziyê bi karanîna JSON were ravekirin. Hûn dikarin li ser hevoksaziyê bêtir fêr bibin li ser malpera pêşdebiran bixwînin.

Veavakirina guhêrbar a jîngehê, variables.tf û vcd.tfvars

Pêşîn, em du pelan biafirînin ku navnîşa hemî guhêrbarên bikar anîn û nirxên wan ji bo modula VMware vCloud Director diyar dikin. Pêşî, em pelê variables.tf biafirînin.

Naveroka pelê variables.tf.

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

Nirxên guhêrbar ên ku em ji pêşkêşkerê werdigirin.

  • vcd_org_user - navê bikarhêner bi mafên Rêvebirê Rêxistinê,

  • vcd_org_password - şîfreya bikarhêner,

  • vcd_org - navê rêxistinê,

  • vcd_org_vdc - navê navenda daneya virtual,

  • vcd_org_url - API URL,

  • vcd_org_edge_name - navê routerê virtual,

  • vcd_org_catalog - navê pelrêça bi şablonên makîneya virtual,

  • vcd_edge_external_ip - navnîşana IP-ya gelemperî,

  • vcd_edge_external_network - navê tora derveyî,

  • vcd_org_hdd_sp - navê polîtîkaya hilanînê ya HDD,

  • vcd_org_ssd_sp - navê polîtîkaya hilanînê ya SSD.

Û guherbarên me binivîse:

  • vcd_edge_local_ip_nginx - Navnîşana IP ya makîneya virtual bi NGINX,

  • vcd_edge_local_ip_bitrix - Navnîşana IP ya makîneya virtual bi 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud - Navnîşana IP ya makîneya virtual ya bi Nextcloud re.

Bi pela duyemîn re em ji bo modula VMware vCloud Director di pelê vcd.tfvars de guherbaran diafirînin û diyar dikin: Ka em bînin bîra xwe ku di mînaka xwe de em bikar tînin. ewr mClouds xwe, heke hûn bi peydakerek din re dixebitin, nirxan bi wan re kontrol bikin. 

Naveroka pelê vcd.tfvars.

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"

Veavakirina torê, network.tf.

Guherînên hawirdorê hatine danîn, naha em ê pilana girêdana makîneya virtual saz bikin - em ê navnîşanek IP-ya taybet ji her makîneya virtual re destnîşan bikin û Destination NAT bikar bînin da ku portan bigihînin tora derveyî. Ji bo sînorkirina gihîştina portên rêveberiyê, em ê gihîştina tenê ji bo navnîşana IP-ya xwe saz bikin.

Meriv çawa bi Terraform-ê Binesaziya Cloud Rêvebir dikeDiyagrama torê ya ji bo platforma Terraform tê afirandin

Em bi navê net_lan01, dergehê xwerû: 192.168.110.254, û her weha bi cîhê navnîşanê: 192.168.110.0/24 torgilokek rêxistinî ya virtual diafirînin.

Em torgilokek virtual diyar dikin.

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"

  }

}

Werin em qaîdeyên firewallê biafirînin ku destûrê didin makîneyên virtual ku bigihîjin Înternetê. Di nav vê blokê de, hemî çavkaniyên virtual yên di ewr de dê bigihîjin Înternetê:

Em qaîdeyên ji bo gihîştina VM ya Înternetê diyar dikin.

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]

}

Me girêdana ku piştî hilanîna bloka vcdnetworkrouted.net saz kir, em dest bi mîhengkirina bloka vcdnsxvfirewallrule dikin., bi karanîna girêdayî ye. Em vê vebijarkê bikar tînin ji ber ku dibe ku hin girêdan di veavakirinê de nepenî bêne nas kirin.

Dûv re, em ê qaîdeyên ku destûrê didin gihandina portên ji tora derveyî biafirînin û navnîşana IP-ya me ji bo girêdana bi SSH-ê bi pêşkêşkeran re destnîşan dikin. Her bikarhênerek Înternetê xwedan benderên 80 û 443 li ser servera malperê ye, û bikarhênerek bi navnîşana IP-ya 90.1.15.1 xwedan benderên SSH yên serverên virtual ye.

Destûrê bide gihîştina benderan ji tora derveyî.

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]

}

Em qaîdeyên Çavkaniya NAT-ê ji bo gihîştina Înternetê ji tora herêmî ya cloudê diafirînin:

Em qaîdeyên Çavkanî NAT diyar dikin.

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]

}

Û ji bo temamkirina veavakirina bloka torê, em qaîdeyên Destination NAT-ê ji bo gihîştina karûbarên ji tora derveyî zêde dikin:

Zêdekirina qaîdeyên Destination NAT.

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]

}

Ji bo wergerandina portê qaîdeyek NAT-ê li servera SSH-ê di binê Nginx de zêde bikin.

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]

}

Bi 1C-Bitrix re qaîdeyek NAT-ê ji bo wergerandina portê li servera SSH-ê zêde bikin.

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]

}

Bi Nextcloud re qaîdeyek NAT ji bo wergerandina portê li servera SSH zêde bikin.

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]

}

Veavakirina jîngeha virtual Main.tf

Wekî ku me di destpêka gotarê de plan kir, em ê sê makîneyên virtual biafirînin. Ew ê bi karanîna "Pêşkêşkirina Mêvan" werin amadekirin. Em ê li gorî mîhengên ku me diyar kirine pîvanên torê bicîh bikin, û şîfreya bikarhêner dê bixweber were çêkirin.

Ka em vApp-a ku dê makîneyên virtual tê de bin û veavakirina wan vebêjin.

Meriv çawa bi Terraform-ê Binesaziya Cloud Rêvebir dikeVeavakirina makîneya virtual

Ka em konteynirek vApp biafirînin. Ji ber ku em dikarin tavilê vApp û VM-ê bi tora virtual ve girêbidin, em di heman demê de pîvanadependent_on jî lê zêde dikin:

Konteynirek ava bikin

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

}

Werin em makîneyek virtual bi ravek biafirînin

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

}

}

Parametreyên sereke di danasîna VM de:

  • nav - navê makîneya virtual,

  • vappname - navê vApp-ê ku VM-ya nû lê zêde bike,

  • navê katalogê / navê şablonê - navê katalogê û navê şablonê makîneya virtual,

  • Storageprofile - Siyaseta hilanînê ya xwerû.

Parametreyên bloka torê:

  • cure - cureyê tora girêdayî,

  • nav - kîjan tora virtual ku VM-ê bi kîjan ve girêdayî ye,

  • seretayî ye - adapterê torê ya bingehîn,

  • ipallocation_mode - moda veqetandina navnîşana MANUAL / DHCP / POOL,

  • ip - Navnîşana IP ya ji bo makîneya virtual, em ê wê bi destan diyar bikin.

astengkirina override_template_disk:

  • sizeinmb - Mezinahiya dîska boot ji bo makîneya virtual

  • storage_profile - Siyaseta hilanînê ji bo dîskê

Ka em VM-ya duyemîn bi danasîna hilanîna pelê Nextcloud-ê biafirînin

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 ]

}

Di beşa vcdvminternal_disk de em ê dîskek nû ya virtual ku bi makîneya virtual ve girêdayî ye vebêjin.

Ravekirinên ji bo bloka vcdvminternaldisk:

  • bustype - type controller dîskê

  • sizeinmb - mezinahiya dîskê

  • busnumber / jimareya yekîneyê - cîhê girêdanê di adapterê de

  • storage_profile - Siyaseta hilanînê ji bo dîskê

Werin em VM-ya herî dawî ya li ser Bitrix rave bikin

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

}

}

Nûvekirina OS û sazkirina nivîsarên din

Tora tê amadekirin, makîneyên virtual têne vegotin. Berî ku binesaziya xwe îtxal bikin, em dikarin bi karanîna blokên dabînker û bêyî karanîna Ansible pêşdîtina destpêkê pêk bînin.

Ka em binihêrin ka meriv çawa OS-ê nûve dike û bi karanîna bloka dabînkerê skrîpta sazkirinê ya CMS Bitrix dimeşîne.

Pêşîn, bila em pakêtên nûvekirina CentOS saz bikin.

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

}

}

}

Navnîşana pêkhateyan:

  • pêşkêşker "remote-exec" - bloka dabînkirina dûr ve girêdide

  • Di bloka pêwendiyê de em celeb û pîvanên pêwendiyê diyar dikin:

  • tîp - protokol, di rewşa me de SSH;

  • bikarhêner - navê bikarhêner;

  • şîfre - şîfreya bikarhêner. Di doza me de, em îşaret bi pîvana vcdvappvm.nginx.customization[0].admin_password dikin, ku şîfreya hatî çêkirin ji bo bikarhênerê pergalê hilîne.

  • mêvandar - navnîşana IP-ya derve ya ji bo girêdanê;

  • port - porta ji bo girêdanê, ku berê di mîhengên DNAT de hatî destnîşan kirin;

  • inline - navnîşa fermanên ku dê têkevin navnîş bikin. Ferman dê li gorî rêza ku di vê beşê de hatî destnîşan kirin bikevin.

Wekî mînakek, bila em skrîpta sazkirinê ya 1C-Bitrix jî bicîh bikin. Dema ku plan dimeşe dê encamnameya encamdana senaryoyê peyda bibe. Ji bo sazkirina skrîptê, pêşî em blokê vedibêjin:

Ka em sazkirina 1C-Bitrix rave bikin.

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"

]

}

Û em ê tavilê nûvekirina Bitrix diyar bikin.

Mînakek dabînkirina 1C-Bitrix.

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"

]

}

}

Giring! Ger hûn SELinux-ê pêşî neçalak bikin, dibe ku skrîpt nexebite! Ger ji we re gotarek berfireh li ser sazkirin û mîhengkirina CMS 1C-Bitrix bi karanîna bitrix-env.sh hewce bike, oo hûn dikarin gotara bloga me li ser malperê bikar bînin.

3. Destpêkirina binesaziyê

Meriv çawa bi Terraform-ê Binesaziya Cloud Rêvebir dikeDestpêkirina modul û pêvekan

Ji bo xebatê, em "kitek gentleman" ya hêsan bikar tînin: laptopek bi Windows 10 OS û kîtek belavkirinê ji malpera fermî terraform.io. Ka em bi karanîna fermanê pak bikin û dest pê bikin: terraform.exe init

Piştî danasîna binesaziya hesabker û torê, em dest bi plansaziyê dikin ku veavakirina xwe biceribîne, li ku derê em dikarin bibînin ka dê çi were afirandin û ew ê çawa bi hevûdu ve were girêdan.

  1. Ferman pêk bînin - terraform plan -var-file=vcd.tfvars.

  2. Em encamê digirin - Plan: 16 to add, 0 to change, 0 to destroy. Yanî li gorî vê planê dê 16 çavkanî bên çêkirin.

  3. Em planê li ser fermanê didin destpêkirin - terraform.exe apply -var-file=vcd.tfvars.

Dê makîneyên virtual werin afirandin, û dûv re pakêtên ku me navnîş kirine dê di beşa pêşkêşker de werin darve kirin - dê OS were nûve kirin û CMS Bitrix dê were saz kirin.

Daneyên girêdanê distînin

Piştî pêkanîna planê, em dixwazin ji bo girêdana bi pêşkêşkeran re daneyan di forma nivîsê de bistînin; ji bo vê yekê, em ê beşa derketinê wekî jêrîn format bikin:

output "nginxpassword" {

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

}

Û derana jêrîn şîfreya makîneya virtual ya hatî afirandin ji me re vedibêje:

Outputs: nginx_password = F#4u8!!N

Wekî encamek, em ji bo xebata xweya pêştir gihîştina makîneyên virtual bi pergalek xebitandinê ya nûvekirî û pakêtên pêş-sazkirî digirin. Her tişt amade ye!

Lê heke we berê binesaziya heyî hebe?

3.1. Terraform bi binesaziya heyî re dixebitin

Ew hêsan e, hûn dikarin makîneyên virtual yên heyî û konteynerên wan ên vApp-ê bi karanîna fermana importê têxin hundur.

Ka em çavkaniya vAPP û makîneya virtual rave bikin.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Pêngava paşîn ev e ku meriv taybetmendiyên çavkaniyên vApp-ê bi formatê veguhezîne vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ku li:

  • vApp - Navê vApp;

  • org - navê rêxistinê;

  • org_vdc - navê navenda daneya virtual.

Meriv çawa bi Terraform-ê Binesaziya Cloud Rêvebir dikeImportkirina taybetmendiyên çavkaniya vAPP

Werin em taybetmendiyên çavkaniyên VM-ê di formatê de derxînin: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, di kîjanê de:

  • VM - Navê VM;

  • vApp - Navê vApp;

  • org - navê rêxistinê;

  • orgvdc navê navenda daneya virtual e.

Import serkeftî bû

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.

Naha em dikarin li çavkaniya nû ya importkirî binêrin:

Çavkaniya îthalkirî

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

}

}

Naha em bê guman amade ne - me xala paşîn qedand (îhalkirina binesaziya heyî) û hemî xalên sereke yên xebata bi Terraform re nirxand. 

Amûr derket holê ku pir hêsan e û dihêle hûn binesaziya xwe wekî kodê binav bikin, ji makîneyên virtual yên yek pêşkêşkerê ewr dest pê bikin heya danasîna çavkaniyên hêmanên torê.

Di heman demê de, serbixwebûna ji jîngehê dihêle ku meriv bi çavkaniyên herêmî, ewr re bixebite, û tewra platformê jî birêve bibe. Û heke platformek piştgirî tune û hûn dixwazin yek nû lê zêde bikin, hûn dikarin pêşkêşvanê xwe binivîsin û wê bikar bînin.

Source: www.habr.com

Add a comment