Jinsi ya Kusimamia Miundombinu ya Wingu na Terraform

Jinsi ya Kusimamia Miundombinu ya Wingu na Terraform

Katika makala hii tutaangalia nini Terraform inajumuisha, na pia hatua kwa hatua kuzindua miundombinu yetu wenyewe katika wingu na VMware β€” tutatayarisha VM tatu kwa madhumuni tofauti: proksi, hifadhi ya faili na CMS.

Kuhusu kila kitu kwa undani na katika hatua tatu:

1. Terraform - maelezo, faida na vipengele

Terraform ni zana ya IaC (Miundombinu-kama-Msimbo) ya kujenga na kudhibiti miundombinu pepe kwa kutumia msimbo.

Tuligundua faida kadhaa za kufanya kazi na zana:

  • Kasi ya kupeleka wapangaji wapya (mazingira maalum ya mtandaoni). Kwa kawaida, wateja wapya wanapokuwa wengi, ndivyo wafanyakazi wa usaidizi wa kiufundi wanahitaji kufanya "mibofyo" zaidi ili kuchapisha rasilimali mpya. Kwa Terraform, watumiaji wanaweza kubadilisha mipangilio ya mashine ya kawaida (kwa mfano, kuzima kiotomatiki OS na kuongeza kizigeu cha diski halisi) bila kuhitaji msaada wa kiufundi au kuzima mashine yenyewe.

  • Uthibitishaji wa papo hapo wa mpango wa kuwezesha Mpangaji mpya. Kwa kutumia maelezo ya msimbo wa miundombinu, tunaweza kuangalia mara moja kile kitakachoongezwa na kwa utaratibu gani, na pia katika hali gani ya mwisho hii au mashine hiyo ya kawaida au mtandao wa kawaida na viunganisho vya mashine halisi itakuwa.

  • Uwezo wa kuelezea majukwaa maarufu ya wingu. Unaweza kutumia chombo kutoka Amazon na Google Cloud, hadi mifumo ya kibinafsi kulingana na Mkurugenzi wa VMware vCloud, inayotoa huduma ndani ya suluhu za IaaS, SaaS na PaaS.

  • Dhibiti watoa huduma wengi wa wingu na kusambaza miundombinu kati yao ili kuboresha uvumilivu wa makosa, kwa kutumia usanidi mmoja kuunda, kutambua na kudhibiti rasilimali za wingu.

  • Utumiaji rahisi kwa kuunda stendi za onyesho kwa majaribio ya programu na utatuzi. Unaweza kuunda na kuhamisha stendi za idara ya majaribio, programu ya majaribio katika mazingira tofauti sambamba, na kubadilisha na kufuta rasilimali papo hapo kwa kuunda mpango mmoja tu wa kuunda rasilimali.

"Terrarium" Terraform

Tulizungumza kwa ufupi juu ya faida za chombo, sasa hebu tuivunje katika vipengele vyake

Watoa huduma. 

Katika Terraform, karibu aina yoyote ya miundombinu inaweza kuwakilishwa kama rasilimali. Uunganisho kati ya rasilimali na jukwaa la API hutolewa na moduli za watoa huduma, ambayo inakuwezesha kuunda rasilimali ndani ya jukwaa maalum, kwa mfano, Mkurugenzi wa Azure au VMware vCloud.

Kama sehemu ya mradi, unaweza kuingiliana na watoa huduma tofauti kwenye mifumo tofauti.

Rasilimali (maelezo ya rasilimali).

Maelezo ya nyenzo hukuruhusu kudhibiti vipengee vya jukwaa, kama vile mashine pepe au mitandao. 

Unaweza kuunda maelezo ya nyenzo kwa mtoa huduma wa Mkurugenzi wa VMware vCloud mwenyewe na utumie maelezo haya kuunda nyenzo na mtoa huduma yeyote anayepangisha anayetumia Mkurugenzi wa vCloud. Unahitaji tu kubadilisha vigezo vya uthibitishaji na vigezo vya uunganisho wa mtandao kwa mtoaji anayehitajika wa mwenyeji

Watoa huduma.

Sehemu hii inafanya uwezekano wa kufanya shughuli kwa ajili ya ufungaji wa awali na matengenezo ya mfumo wa uendeshaji baada ya kuunda mashine za kawaida. Mara tu unapounda rasilimali ya mashine pepe, unaweza kutumia watoa huduma kusanidi na kuunganisha kupitia SSH, kusasisha mfumo wa uendeshaji, na kupakua na kuendesha hati. 

Vigezo vya Kuingiza na Pato.

Vigezo vya pembejeo - vigeu vya pembejeo kwa aina zozote za vizuizi. 

Vigezo vya pato hukuruhusu kuokoa maadili baada ya kuunda rasilimali na inaweza kutumika kama vigeu vya pembejeo katika moduli zingine, kwa mfano kwenye kizuizi cha Watoa huduma.

Mataifa.

Faili za mataifa huhifadhi maelezo kuhusu usanidi wa rasilimali za jukwaa la watoa huduma. Wakati jukwaa linapoundwa kwa mara ya kwanza, hakuna taarifa kuhusu rasilimali na kabla ya operesheni yoyote, Terraform inasasisha hali na miundombinu halisi ya rasilimali iliyoelezwa tayari.

Kusudi kuu la majimbo ni kuokoa rundo la vitu vya rasilimali zilizoundwa tayari ili kulinganisha usanidi wa rasilimali na vitu vilivyoongezwa ili kuzuia uundaji wa mara kwa mara na mabadiliko kwenye jukwaa.

Kwa chaguo-msingi, maelezo ya serikali yanahifadhiwa kwenye faili ya ndani ya terraform.tfstate, lakini ikiwa ni lazima, inawezekana kutumia hifadhi ya mbali kwa kazi ya timu.

Unaweza pia kuleta rasilimali za jukwaa la sasa katika hali ili kuingiliana zaidi na rasilimali zingine ambazo ziliundwa bila usaidizi wa Terraform.  

2. Uundaji wa miundombinu

Vipengele vimepangwa, sasa kwa kutumia Terraform, hatua kwa hatua tutaunda miundombinu na mashine tatu za mtandaoni. Ya kwanza ikiwa na seva ya proksi ya nginx iliyosakinishwa, ya pili ikiwa na hifadhi ya faili kulingana na Nextcloud na ya tatu na CMS Bitrix.

Tutaandika nambari na kuitekeleza kwa kutumia mfano wetu clouds kwenye VMware vCloud Director. Watumiaji wetu hupokea akaunti iliyo na haki za Msimamizi wa Shirika. Ikiwa unatumia akaunti iliyo na haki sawa katika wingu lingine la VMware, unaweza kutoa msimbo tena kutoka kwa mifano yetu. Nenda!

Kwanza, hebu tuunde saraka ya mradi wetu mpya ambayo faili zinazoelezea miundombinu zitawekwa.

mkdir project01

Ifuatayo, tunaelezea vipengele vya miundombinu. Terraform huunda uhusiano na kuchakata faili kulingana na maelezo katika faili. Faili zenyewe zinaweza kutajwa kulingana na madhumuni ya vitalu vinavyoelezwa, kwa mfano, network.tf - inaelezea vigezo vya mtandao kwa miundombinu.

Ili kuelezea vipengele vya miundombinu yetu, tumeunda faili zifuatazo:

Orodha ya faili.

main.tf - maelezo ya vigezo kwa mazingira virtual - mashine virtual, vyombo virtual;

mtandao.tf - maelezo ya vigezo vya mtandao wa virtual na sheria za NAT na Firewall;

variables.tf - orodha ya vigezo ambavyo tunatumia;

vcd.tfvars - maadili ya kutofautisha ya mradi kwa moduli ya Mkurugenzi wa VMware vCloud.

Lugha ya usanidi katika Terraform ni ya kutangaza na mpangilio wa vitalu haujalishi, isipokuwa kwa vizuizi vya mtoaji, kwa sababu. katika kizuizi hiki tunaelezea amri zinazopaswa kutekelezwa wakati wa kuandaa miundombinu na zitatekelezwa kwa utaratibu.

Muundo wa kuzuia.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Ili kuelezea vizuizi, lugha yake ya programu HCL (Lugha ya Usanidi ya HashiCorp) inatumika; inawezekana kuelezea miundombinu kwa kutumia JSON. Unaweza kujifunza zaidi kuhusu sintaksia soma kwenye tovuti ya msanidi programu.

Usanidi wa kutofautiana wa mazingira, vigezo.tf na vcd.tfvars

Kwanza, wacha tuunde faili mbili zinazoelezea orodha ya anuwai zote zilizotumiwa na maadili yao kwa moduli ya Mkurugenzi wa VMware vCloud. Kwanza, hebu tuunde faili za variables.tf.

Yaliyomo kwenye faili ya 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" {}

Thamani zinazobadilika tunazopokea kutoka kwa mtoa huduma.

  • vcd_org_user - jina la mtumiaji na haki za Msimamizi wa Shirika,

  • vcd_org_password - nenosiri la mtumiaji,

  • vcd_org - jina la shirika,

  • vcd_org_vdc - jina la kituo cha data halisi,

  • vcd_org_url - API URL,

  • vcd_org_edge_name - jina la kipanga njia pepe,

  • vcd_org_catalog - jina la saraka na violezo vya mashine halisi,

  • vcd_edge_external_ip - anwani ya IP ya umma,

  • vcd_edge_external_network - jina la mtandao wa nje,

  • vcd_org_hdd_sp - jina la sera ya kuhifadhi HDD,

  • vcd_org_ssd_sp - jina la sera ya hifadhi ya SSD.

Na ingiza anuwai zetu:

  • vcd_edge_local_ip_nginx - Anwani ya IP ya mashine halisi na NGINX,

  • vcd_edge_local_ip_bitrix - Anwani ya IP ya mashine pepe yenye 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud - Anwani ya IP ya mashine pepe iliyo na Nextcloud.

Kwa faili ya pili tunaunda na kubainisha vigezo vya moduli ya Mkurugenzi wa VMware vCloud katika faili ya vcd.tfvars: Hebu tukumbuke kwamba katika mfano wetu tunatumia wingu mwenyewe mClouds, ikiwa unafanya kazi na mtoaji mwingine, angalia maadili nao. 

Yaliyomo kwenye faili ya 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"

Usanidi wa mtandao, network.tf.

Vigezo vya mazingira vimewekwa, sasa tutasanidi mpango wa uunganisho wa mashine pepe - tutaweka anwani ya kibinafsi ya IP kwa kila mashine pepe na kutumia Lengwa la NAT "kusambaza" bandari kwenye mtandao wa nje. Ili kupunguza ufikiaji wa bandari za usimamizi, tutaweka ufikiaji kwa anwani yetu ya IP pekee.

Jinsi ya Kusimamia Miundombinu ya Wingu na TerraformMchoro wa mtandao wa jukwaa la Terraform linaloundwa

Tunaunda mtandao pepe wa shirika kwa jina net_lan01, lango chaguo-msingi: 192.168.110.254, na pia kwa nafasi ya anwani: 192.168.110.0/24.

Tunaelezea mtandao pepe.

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"

  }

}

Wacha tuunde sheria za ngome zinazoruhusu mashine pepe kufikia Mtandao. Ndani ya kizuizi hiki, rasilimali zote pepe kwenye wingu zitapata ufikiaji wa Mtandao:

Tunaelezea sheria za ufikiaji wa VM kwenye Mtandao.

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]

}

Baada ya kuanzisha utegemezi kwamba baada ya kusindika kizuizi cha vcdnetworkrouted.net, tunaendelea kusanidi kizuizi cha vcdnsxvfirewallrule., kwa kutumia inategemea na. Tunatumia chaguo hili kwa sababu baadhi ya vitegemezi vinaweza kutambuliwa kikamilifu katika usanidi.

Kisha, tutaunda sheria zinazoruhusu ufikiaji wa bandari kutoka kwa mtandao wa nje na kuashiria anwani yetu ya IP ya kuunganisha kupitia SSH kwa seva. Mtumiaji yeyote wa Mtandao anaweza kufikia bandari 80 na 443 kwenye seva ya wavuti, na mtumiaji aliye na anwani ya IP ya 90.1.15.1 anaweza kufikia bandari za SSH za seva pepe.

Ruhusu ufikiaji wa milango kutoka kwa mtandao wa nje.

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]

}

Tunaunda sheria za Chanzo cha NAT za kupata Mtandao kutoka kwa mtandao wa ndani wa wingu:

Tunaelezea sheria za Chanzo cha NAT.

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]

}

Na kukamilisha usanidi wa kizuizi cha mtandao, tunaongeza sheria za Destination NAT za kupata huduma kutoka kwa mtandao wa nje:

Inaongeza sheria za NAT Lengwa.

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]

}

Ongeza sheria ya NAT kwa utafsiri wa mlango kwenye seva ya SSH chini ya Nginx.

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH NGINX"

original_address = var.vcd_edge_external_ip
original_port = 58301

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Ongeza sheria ya NAT kwa tafsiri ya mlango kwenye seva ya SSH na 1C-Bitrix.

resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Bitrix"

original_address = var.vcd_edge_external_ip
original_port = 58302

translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Ongeza sheria ya NAT kwa utafsiri wa mlango kwenye seva ya SSH ukitumia Nextcloud.

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Nextcloud"

original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Usanidi wa mazingira pepe wa Main.tf

Kama tulivyopanga mwanzoni mwa kifungu, tutaunda mashine tatu za kawaida. Watatayarishwa kwa kutumia "Ubinafsishaji wa Wageni". Tutaweka vigezo vya mtandao kulingana na mipangilio tuliyotaja, na nenosiri la mtumiaji litatolewa moja kwa moja.

Wacha tueleze vApp ambayo mashine za kawaida zitapatikana na usanidi wao.

Jinsi ya Kusimamia Miundombinu ya Wingu na TerraformUsanidi wa mashine pepe

Wacha tuunde chombo cha vApp. Ili tuweze kuunganisha mara moja vApp na VM kwenye mtandao wa kawaida, tunaongeza pia kigezo cha depend_on:

Unda chombo

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

}

Wacha tuunde mashine pepe yenye maelezo

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

}

}

Vigezo kuu katika maelezo ya VM:

  • jina - jina la mashine ya kawaida,

  • vappname - jina la vApp ambayo unaweza kuongeza VM mpya,

  • catalogname / templatename - jina la katalogi na jina la kiolezo cha mashine halisi,

  • wasifu wa uhifadhi - sera ya uhifadhi chaguo-msingi.

Vigezo vya kuzuia mtandao:

  • aina - aina ya mtandao uliounganishwa,

  • jina - mtandao gani wa kawaida wa kuunganisha VM,

  • isprimary - adapta ya msingi ya mtandao,

  • ipallocation_mode - MANUAL / DHCP / POOL hali ya ugawaji wa anwani,

  • ip - Anwani ya IP kwa mashine ya kawaida, tutaibainisha kwa mikono.

override_template_disk block:

  • sizeinmb - saizi ya diski ya boot kwa mashine ya kawaida

  • storage_profile - sera ya uhifadhi wa diski

Wacha tuunde VM ya pili na maelezo ya uhifadhi wa faili ya Nextcloud

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 ]

}

Katika sehemu ya vcdvminternal_disk tutaelezea diski mpya ya kawaida ambayo imeunganishwa kwenye mashine ya kawaida.

Maelezo ya kizuizi cha vcdvminternaldisk:

  • bustype - aina ya mtawala wa diski

  • sizeinmb - saizi ya diski

  • nambari ya basi / nambari ya nambari - eneo la unganisho kwenye adapta

  • storage_profile - sera ya uhifadhi wa diski

Wacha tueleze VM ya hivi karibuni kwenye Bitrix

resource "vcd_vapp_vm" "bitrix" {

vapp_name = vcd_vapp.vapp.name

name = "bitrix"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_bitrix

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "81920"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

Kusasisha OS na kusakinisha hati za ziada

Mtandao umeandaliwa, mashine za kawaida zinaelezwa. Kabla ya kuagiza miundombinu yetu, tunaweza kutekeleza utoaji wa awali mapema kwa kutumia vitalu vya watoa huduma na bila kutumia Ansible.

Wacha tuangalie jinsi ya kusasisha OS na kuendesha hati ya usakinishaji ya CMS Bitrix kwa kutumia kizuizi cha mtoaji.

Kwanza, wacha tusakinishe vifurushi vya sasisho vya CentOS.

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

}

}

}

Uainishaji wa vipengele:

  • mtoaji "remote-exec" - unganisha kizuizi cha utoaji cha mbali

  • Katika kizuizi cha unganisho tunaelezea aina na vigezo vya unganisho:

  • aina - itifaki, kwa upande wetu SSH;

  • mtumiaji - jina la mtumiaji;

  • nenosiri - nenosiri la mtumiaji. Kwa upande wetu, tunaelekeza kwenye parameta vcdvappvm.nginx.customization[0].admin_password, ambayo huhifadhi nenosiri lililozalishwa kwa mtumiaji wa mfumo.

  • mwenyeji - anwani ya IP ya nje kwa unganisho;

  • bandari - bandari ya uunganisho, ambayo hapo awali ilielezwa katika mipangilio ya DNAT;

  • inline - orodhesha orodha ya amri ambazo zitaingizwa. Amri zitaingizwa kwa mpangilio kama ilivyoonyeshwa katika sehemu hii.

Kwa mfano, wacha tutekeleze hati ya usakinishaji ya 1C-Bitrix. Matokeo ya matokeo ya utekelezaji wa hati yatapatikana wakati mpango unaendelea. Ili kufunga hati, kwanza tunaelezea kizuizi:

Hebu tueleze usakinishaji wa 1C-Bitrix.

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"

]

}

Na tutaelezea mara moja sasisho la Bitrix.

Mfano wa utoaji wa 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"

]

}

}

Muhimu! Hati inaweza kufanya kazi ikiwa hautazima SELinux mapema! Ikiwa unahitaji makala ya kina kuhusu kusakinisha na kusanidi CMS 1C-Bitrix kwa kutumia bitrix-env.sh, oo unaweza tumia nakala yetu ya blogi kwenye wavuti.

3. Uanzishaji wa miundombinu

Jinsi ya Kusimamia Miundombinu ya Wingu na TerraformKuanzisha moduli na programu-jalizi

Kwa kazi, tunatumia "kit ya muungwana" rahisi: kompyuta ya mkononi yenye Windows 10 OS na vifaa vya usambazaji kutoka kwa tovuti rasmi. terraform.io. Wacha tufungue na tuanzishe kwa kutumia amri: terraform.exe init

Baada ya kuelezea miundombinu ya kompyuta na mtandao, tunazindua mipango ya kujaribu usanidi wetu, ambapo tunaweza kuona ni nini kitakachoundwa na jinsi kitaunganishwa kwa kila mmoja.

  1. Tekeleza amri - terraform plan -var-file=vcd.tfvars.

  2. Tunapata matokeo - Plan: 16 to add, 0 to change, 0 to destroy. Hiyo ni, kulingana na mpango huu, rasilimali 16 zitaundwa.

  3. Tunazindua mpango kwa amri - terraform.exe apply -var-file=vcd.tfvars.

Mashine pepe zitaundwa, na kisha vifurushi ambavyo tumeorodhesha vitatekelezwa ndani ya sehemu ya mtoaji - Mfumo wa Uendeshaji utasasishwa na CMS Bitrix itasakinishwa.

Inapokea habari ya muunganisho

Baada ya kutekeleza mpango huo, tunataka kupokea data katika fomu ya maandishi kwa kuunganisha kwenye seva, kwa hili tutaunda sehemu ya pato kama ifuatavyo:

output "nginxpassword" {

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

}

Na matokeo yafuatayo yanatuambia nenosiri la mashine iliyoundwa iliyoundwa:

Outputs: nginx_password = F#4u8!!N

Kwa hivyo, tunapata ufikiaji wa mashine pepe na mfumo wa uendeshaji uliosasishwa na vifurushi vilivyosakinishwa mapema kwa kazi yetu zaidi. Kila kitu kiko tayari!

Lakini vipi ikiwa tayari una miundombinu iliyopo?

3.1. Kufanya kazi Terraform na miundombinu iliyopo

Ni rahisi, unaweza kuagiza mashine pepe za sasa na vyombo vyake vya vApp kwa kutumia amri ya kuagiza.

Wacha tueleze rasilimali ya vAPP na mashine ya kawaida.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Hatua inayofuata ni kuleta sifa za rasilimali za vApp katika umbizo vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ambapo:

  • vApp - jina la vApp;

  • org - jina la shirika;

  • org_vdc - jina la kituo cha data pepe.

Jinsi ya Kusimamia Miundombinu ya Wingu na TerraformInaleta sifa za rasilimali za vAPP

Wacha tuingize mali ya rasilimali za VM katika umbizo: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, ambayo:

  • VM - jina la VM;

  • vApp - jina la vApp;

  • org - jina la shirika;

  • orgvdc ni jina la kituo cha data pepe.

Uingizaji ulifanikiwa

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.

Sasa tunaweza kuangalia rasilimali mpya iliyoagizwa:

Rasilimali iliyoingizwa

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

}

}

Sasa tuko tayari - tumemaliza na hatua ya mwisho (kuagiza katika miundombinu iliyopo) na tumezingatia mambo yote kuu ya kufanya kazi na Terraform. 

Chombo kiligeuka kuwa rahisi sana na hukuruhusu kuelezea miundombinu yako kama nambari, kuanzia mashine pepe za mtoaji mmoja wa wingu hadi kuelezea rasilimali za vipengee vya mtandao.

Wakati huo huo, uhuru kutoka kwa mazingira hufanya iwezekanavyo kufanya kazi na rasilimali za ndani, za wingu, na hata kusimamia jukwaa. Na ikiwa hakuna jukwaa linalotumika na unataka kuongeza jipya, unaweza kuandika mtoaji wako mwenyewe na uitumie.

Chanzo: mapenzi.com

Kuongeza maoni