Katika makala hii tutaangalia nini Terraform inajumuisha, na pia hatua kwa hatua kuzindua miundombinu yetu wenyewe
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
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
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
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.
Mchoro 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.
Usanidi 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
3. Uanzishaji wa miundombinu
Kuanzisha 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.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.
-
Tekeleza amri
- terraform plan -var-file=vcd.tfvars
. -
Tunapata matokeo
- Plan: 16 to add, 0 to change, 0 to destroy.
Hiyo ni, kulingana na mpango huu, rasilimali 16 zitaundwa. -
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.
Inaleta 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