Hvernig á að stjórna skýjainnviðum með Terraform

Hvernig á að stjórna skýjainnviðum með Terraform

Í þessari grein munum við skoða hvað Terraform samanstendur af og einnig smám saman opna okkar eigin innviði í skýinu með VMware — við munum undirbúa þrjá VM fyrir mismunandi tilgangi: proxy, skráageymslu og CMS.

Um allt í smáatriðum og í þremur áföngum:

1. Terraform — описание, преимущества и составляющие

Terraform er IaC (Infrastructure-as-Code) tól til að byggja upp og stjórna sýndarinnviðum með því að nota kóða.

Við bentum á nokkra kosti við að vinna með tólið:

  • Dreifingarhraði nýrra leigjenda (sérsniðið sýndarumhverfi). Venjulega, því fleiri nýir viðskiptavinir sem eru, því fleiri „smelli“ þarf tækniaðstoðarfólk að gera til að birta ný tilföng. Með Terraform geta notendur breytt sýndarvélastillingum (td slökkt á stýrikerfinu sjálfkrafa og aukið sýndardiskshluti) án þess að þurfa tæknilega aðstoð eða slökkva á vélinni sjálfri.

  • Tafarlaus staðfesting á virkjunaráætluninni nýr Tennant. Með því að nota lýsingu á innviðakóðanum getum við strax athugað hverju verður bætt við og í hvaða röð, sem og í hvaða lokaástandi þessi eða hin sýndarvélin eða sýndarnet með tengingum við sýndarvélar verður.

  • Geta til að lýsa vinsælustu skýjapöllunum. Þú getur notað tólið allt frá Amazon og Google Cloud, til einkakerfa byggða á VMware vCloud Director, sem býður upp á þjónustu innan IaaS, SaaS og PaaS lausna.

  • Stjórna mörgum skýjaveitum og dreifa innviðunum á milli þeirra til að bæta bilanaþol, með því að nota eina uppsetningu til að búa til, greina og stjórna skýjaauðlindum.

  • Þægileg notkun til að búa til kynningarstanda fyrir hugbúnaðarprófun og villuleit. Þú getur búið til og flutt standa fyrir prófunardeildina, prófað hugbúnað í mismunandi umhverfi samhliða og breytt og eytt auðlindum samstundis með því að búa til eina áætlun um að byggja upp auðlindir

"Terrarium" Terraform

Við ræddum stuttlega um kosti tólsins, nú skulum við skipta því niður í íhluti þess

Veitendur. 

Í Terraform er hægt að tákna næstum hvers kyns innviði sem auðlind. Tengingin á milli auðlinda og API vettvangsins er veitt af veitendaeiningum, sem gera þér kleift að búa til auðlindir innan tiltekins vettvangs, til dæmis Azure eða VMware vCloud Director.

Sem hluti af verkefninu geturðu átt samskipti við mismunandi veitendur á mismunandi kerfum.

Auðlindir (tilfangalýsing).

Lýsing á auðlindum gerir þér kleift að stjórna vettvangshlutum, svo sem sýndarvélum eða netkerfum. 

Þú getur sjálfur búið til auðlindalýsingu fyrir VMware vCloud Director veituna og notað þessa lýsingu til að búa til auðlindir hjá hvaða hýsingaraðila sem notar vCloud Director. Þú þarft aðeins að breyta auðkenningarbreytum og nettengingarbreytum í nauðsynlega hýsingaraðila

Veiðimenn.

Þessi hluti gerir það mögulegt að framkvæma aðgerðir fyrir fyrstu uppsetningu og viðhald stýrikerfisins eftir að sýndarvélar eru búnar til. Þegar þú hefur búið til sýndarvélaauðlind geturðu notað úthlutun til að stilla og tengja í gegnum SSH, uppfæra stýrikerfið og hlaða niður og keyra skriftu. 

Inntaks- og úttaksbreytur.

Inntaksbreytur - inntaksbreytur fyrir allar blokkargerðir. 

Úttaksbreytur leyfa þér að vista gildi eftir að hafa búið til tilföng og hægt er að nota þær sem inntaksbreytur í öðrum einingum, til dæmis í Provisioners blokkinni.

Ríki.

Ríkjaskrár geyma upplýsingar um uppsetningu á tilföngum veituvettvangs. Þegar vettvangurinn er fyrst búinn til eru engar upplýsingar um auðlindir og fyrir aðgerð uppfærir Terraform ástandið með raunverulegum innviðum auðlindanna sem þegar hefur verið lýst.

Megintilgangur ríkja er að vista fullt af hlutum af þegar búið til auðlindir til að bera saman uppsetningu á bættum auðlindum og hlutum til að forðast endurtekna sköpun og breytingar á pallinum.

Sjálfgefið er að ástandsupplýsingar eru geymdar í staðbundinni terraform.tfstate skrá, en ef nauðsyn krefur er hægt að nota fjargeymslu fyrir hópvinnu.

Þú getur líka flutt núverandi vettvangsauðlindir inn í ástand til að hafa frekari samskipti við önnur auðlind sem aftur var búin til án aðstoðar Terraform.  

2. Uppbygging innviða

Íhlutunum hefur verið raðað út, nú með því að nota Terraform munum við smám saman búa til innviði með þremur sýndarvélum. Sá fyrsti með nginx proxy-þjóninn uppsettan, sá annar með skráageymslu byggt á Nextcloud og sá þriðji með CMS Bitrix.

Við munum skrifa kóða og keyra hann með því að nota dæmið okkar ský á VMware vCloud Director. Notendur okkar fá reikning með skipulagsstjóraréttindi. Ef þú notar reikning með sömu réttindi í öðru VMware skýi geturðu endurskapað kóðann úr dæmunum okkar. Farðu!

Fyrst skulum við búa til möppu fyrir nýja verkefnið okkar þar sem skrár sem lýsa innviðunum verða settar í.

mkdir project01

Næst lýsum við innviðahlutunum. Terraform býr til sambönd og vinnur úr skrám út frá lýsingunni í skránum. Hægt er að nefna skrárnar sjálfar út frá tilgangi kubbanna sem lýst er, td network.tf - lýsir netbreytum fyrir innviðina.

Til að lýsa íhlutum innviða okkar bjuggum við til eftirfarandi skrár:

Listi yfir skrár.

main.tf - lýsing á breytum fyrir sýndarumhverfið - sýndarvélar, sýndarílát;

network.tf - lýsing á sýndarnetsbreytum og NAT og eldveggsreglum;

variables.tf - listi yfir breytur sem við notum;

vcd.tfvars - verkefnisbreytugildi fyrir VMware vCloud Director eininguna.

Stillingartungumálið í Terraform er lýsandi og röð blokkanna skiptir ekki máli, nema fyrir úthlutunarblokkirnar, vegna þess að í þessum reit lýsum við skipunum sem á að framkvæma þegar innviði er undirbúið og þær verða framkvæmdar í röð.

Blokkbygging.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Til að lýsa kubbum er eigin forritunarmál HCL (HashiCorp Configuration Language) notað; það er hægt að lýsa innviðum með JSON. Þú getur lært meira um setningafræði lesa á vefsíðu þróunaraðila.

Uppsetning umhverfisbreytu, variables.tf og vcd.tfvars

Í fyrsta lagi skulum við búa til tvær skrár sem lýsa lista yfir allar notaðar breytur og gildi þeirra fyrir VMware vCloud Director eininguna. Fyrst skulum við búa til variables.tf skrána.

Innihald variables.tf skráarinnar.

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

Breytileg gildi sem við fáum frá þjónustuveitunni.

  • vcd_org_user — notandanafn með réttindi stjórnanda,

  • vcd_org_password — lykilorð notanda,

  • vcd_org — название организации,

  • vcd_org_vdc — nafn sýndargagnaversins,

  • vcd_org_url - API vefslóð,

  • vcd_org_edge_name — nafn sýndarbeins,

  • vcd_org_catalog — heiti möppunnar með sýndarvélasniðmátum,

  • vcd_edge_external_ip — opinber IP-tala,

  • vcd_edge_external_network — heiti ytra netsins,

  • vcd_org_hdd_sp — heiti HDD geymslustefnunnar,

  • vcd_org_ssd_sp — heiti SSD geymslustefnunnar.

Og sláðu inn breyturnar okkar:

  • vcd_edge_local_ip_nginx — IP tölu sýndarvélarinnar með NGINX,

  • vcd_edge_local_ip_bitrix - IP tölu sýndarvélarinnar með 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — IP tölu sýndarvélarinnar með Nextcloud.

Með annarri skránni búum við til og tilgreinum breytur fyrir VMware vCloud Director einingu í vcd.tfvars skránni: Við skulum muna að í dæminu okkar notum við eigin ský mClouds, ef þú vinnur með öðrum þjónustuaðila skaltu athuga gildin hjá þeim. 

Innihald vcd.tfvars skráarinnar.

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"

Netstillingar, net.tf.

Umhverfisbreyturnar eru stilltar, nú munum við setja upp sýndarvélatengingarkerfið - við munum úthluta einka IP tölu á hverja sýndarvél og nota Destination NAT til að „framsenda“ gáttirnar yfir á ytra netið. Til að takmarka aðgang að stjórnunarhöfnum munum við aðeins stilla aðgang fyrir IP tölu okkar.

Hvernig á að stjórna skýjainnviðum með TerraformSkýringarmynd netkerfis fyrir Terraform vettvang sem verið er að búa til

Við búum til sýndarskipulagsnet með nafninu net_lan01, sjálfgefna gátt: 192.168.110.254, og einnig með vistfangarými: 192.168.110.0/24.

Við lýsum sýndarneti.

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"

  }

}

Búum til eldveggsreglur sem leyfa sýndarvélum aðgang að internetinu. Innan þessa blokk munu allar sýndarauðlindir í skýinu hafa aðgang að internetinu:

Описываем правила для доступа VM в интернет.

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]

}

Eftir að hafa staðfest þá ósjálfstæði að eftir að hafa unnið úr vcdnetworkrouted.net blokkinni, höldum við áfram að stilla vcdnsxvfirewallrule blokkina, með því að nota veltur á. Við notum þennan valmöguleika vegna þess að sumar ósjálfstæði kunna að vera viðurkennd óbeint í uppsetningunni.

Næst munum við búa til reglur sem leyfa aðgang að höfnum frá ytra neti og gefa til kynna IP tölu okkar til að tengjast í gegnum SSH við netþjónana. Allir netnotendur hafa aðgang að höfnum 80 og 443 á vefþjóninum og notandi með IP töluna 90.1.15.1 hefur aðgang að SSH höfnum sýndarþjónanna.

Leyfa aðgang að höfnum frá ytra neti.

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]

}

Við búum til Source NAT reglur fyrir aðgang að internetinu frá staðbundnu neti í skýi:

Við lýsum Source NAT reglum.

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]

}

Og til að klára uppsetningu netblokkarinnar, bætum við NAT-reglum áfangastaðs til að fá aðgang að þjónustu frá ytra netinu:

Bætir við NAT reglum áfangastaðar.

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]

}

Bættu við NAT reglu fyrir portþýðingu á SSH netþjóninn undir 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]

}

Bættu NAT reglu fyrir portþýðingu við SSH netþjóninn með 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]

}

Bættu NAT reglu fyrir portþýðingu við SSH netþjóninn með 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]

}

Main.tf sýndarumhverfisstillingar

Eins og við ætluðum í upphafi greinarinnar munum við búa til þrjár sýndarvélar. Þeir verða útbúnir með því að nota „Guest Customization“. Við munum stilla netfæribreyturnar í samræmi við stillingarnar sem við tilgreindum og notandalykilorðið verður sjálfkrafa til.

Við skulum lýsa vAppinu sem sýndarvélarnar verða staðsettar í og ​​uppsetningu þeirra.

Hvernig á að stjórna skýjainnviðum með TerraformStillingar sýndarvélar

Við skulum búa til vApp ílát. Svo að við getum tafarlaust tengt vApp og VM við sýndarnetið, bætum við líka breytu dependent_on:

Búðu til ílát

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

}

Við skulum búa til sýndarvél með lýsingu

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

}

}

Helstu færibreytur í VM lýsingunni:

  • nafn — nafn sýndarvélarinnar,

  • vappname - heiti vAppsins sem á að bæta nýjum VM við,

  • vörulistaheiti / sniðmátsnafn - vörulistaheiti og nafn sýndarvélarsniðmáts,

  • storageprofile - sjálfgefin geymslustefna.

Færibreytur netblokkar:

  • gerð — gerð tengds nets,

  • nafn — hvaða sýndarnet á að tengja VM við,

  • isprimary - aðal net millistykki,

  • ipallocation_mode — HANDLEIKUR / DHCP / POOL vistfangaúthlutunarhamur,

  • ip — IP-адрес для виртуальной машины, укажем вручную.

override_template_disk blokk:

  • sizeinmb - stærð ræsidisks fyrir sýndarvélina

  • storage_profile — geymslustefna fyrir diskinn

Við skulum búa til annan VM með lýsingu á Nextcloud skráargeymslunni

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 ]

}

Í hlutanum vcdvminternal_disk munum við lýsa nýjum sýndardiski sem er tengdur við sýndarvélina.

Skýringar á vcdvminternaldisk blokkinni:

  • bustype - gerð diskastýringar

  • sizeinmb — stærð disks

  • busnúmer / eininganúmer - tengingarstaður í millistykkinu

  • storage_profile — geymslustefna fyrir diskinn

Við skulum lýsa nýjustu VM á 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

}

}

Að uppfæra stýrikerfið og setja upp viðbótarforskriftir

Netið er undirbúið, sýndarvélunum er lýst. Áður en innviði okkar er flutt inn getum við framkvæmt upphaflega úthlutun fyrirfram með því að nota afgreiðslublokkir og án þess að nota Ansible.

Við skulum skoða hvernig á að uppfæra stýrikerfið og keyra CMS Bitrix uppsetningarforskriftina með því að nota afgreiðslublokkina.

Fyrst skulum við setja upp CentOS uppfærslupakka.

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

}

}

}

Tilnefning íhluta:

  • provisioner "remote-exec" - tengdu fjarveitublokkina

  • Í tengiblokkinni lýsum við gerð og breytum fyrir tenginguna:

  • tegund — siðareglur, í okkar tilviki SSH;

  • notandi — notendanafn;

  • lykilorð — lykilorð notanda. Í okkar tilviki bendum við á færibreytuna vcdvappvm.nginx.customization[0].admin_password, sem geymir útbúið lykilorð fyrir kerfisnotandann.

  • gestgjafi — ytri IP tölu fyrir tengingu;

  • port — tengi fyrir tengingu, sem áður var tilgreint í DNAT stillingunum;

  • inline - listi lista yfir skipanir sem verða færðar inn. Skipanirnar verða færðar inn í röð eins og tilgreint er í þessum hluta.

Sem dæmi skulum við að auki framkvæma 1C-Bitrix uppsetningarforskriftina. Úttak skriftuframkvæmdarniðurstöðunnar verður tiltækt á meðan áætlunin er í gangi. Til að setja upp handritið lýsum við fyrst blokkinni:

Við skulum lýsa uppsetningu 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"

]

}

Og við munum strax lýsa Bitrix uppfærslunni.

Dæmi um 1C-Bitrix úthlutun.

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"

]

}

}

Mikilvægt! Handritið virkar kannski ekki ef þú slökktir ekki á SELinux fyrirfram! Ef þú þarft ítarlega grein um uppsetningu og stillingu CMS 1C-Bitrix með bitrix-env.sh, oo þú getur notaðu blogggreinina okkar á vefsíðunni.

3. Uppsetning innviða

Hvernig á að stjórna skýjainnviðum með TerraformFrumstillir einingar og viðbætur

Fyrir vinnu notum við einfalt „herrasett“: fartölvu með Windows 10 stýrikerfi og dreifingarsett frá opinberu vefsíðunni terraform.io. Við skulum taka upp og frumstilla með skipuninni: terraform.exe init

Eftir að hafa lýst tölvu- og netinnviðum, ræsum við skipulagningu til að prófa stillingar okkar, þar sem við getum séð hvað verður búið til og hvernig það verður tengt hvert við annað.

  1. Framkvæma skipunina - terraform plan -var-file=vcd.tfvars.

  2. Við fáum niðurstöðuna - Plan: 16 to add, 0 to change, 0 to destroy. Það er að samkvæmt þessari áætlun verða til 16 úrræði.

  3. Við ræsum áætlunina eftir stjórn - terraform.exe apply -var-file=vcd.tfvars.

Sýndarvélar verða búnar til og síðan verða pakkarnir sem við höfum skráð upp í úthlutunarhlutanum - stýrikerfið verður uppfært og CMS Bitrix verður sett upp.

Tekur á móti tengigögnum

Eftir að áætlunin hefur verið framkvæmd viljum við fá gögn á textaformi til að tengjast netþjónunum, til þess munum við forsníða framleiðsluhlutann á eftirfarandi hátt:

output "nginxpassword" {

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

}

Og eftirfarandi framleiðsla segir okkur lykilorðið fyrir sýndarvélina sem búið var til:

Outputs: nginx_password = F#4u8!!N

Fyrir vikið fáum við aðgang að sýndarvélum með uppfærðu stýrikerfi og fyrirfram uppsettum pökkum til frekari vinnu. Allt er tilbúið!

En hvað ef þú ert nú þegar með núverandi innviði?

3.1. Vinnandi Terraform með núverandi innviðum

Það er einfalt, þú getur flutt inn núverandi sýndarvélar og vApp ílát þeirra með því að nota innflutningsskipunina.

Við skulum lýsa vAPP auðlindinni og sýndarvélinni.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Следующий шаг, это выполнить импорт свойств ресурсов vApp в формате vcdvapp.<vApp> <org>.<orgvdc>.<vApp>hvar:

  • vApp - vApp nafn;

  • org — nafn stofnunarinnar;

  • org_vdc — heiti sýndargagnaversins.

Hvernig á að stjórna skýjainnviðum með TerraformFlytur inn eiginleika vAPP auðlinda

Flytjum inn eiginleika VM auðlinda á sniðinu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, þar sem:

  • VM — имя VM;

  • vApp - vApp nafn;

  • org — nafn stofnunarinnar;

  • orgvdc er nafn sýndargagnaversins.

Innflutningur gekk vel

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.

Nú getum við litið á nýju innfluttu auðlindina:

Innflutt auðlind

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

}

}

Nú erum við svo sannarlega tilbúin - við erum búin með síðasta lið (innflutningur inn í núverandi innviði) og höfum íhugað öll helstu atriðin í því að vinna með Terraform. 

Tólið reyndist mjög þægilegt og gerir þér kleift að lýsa innviðum þínum sem kóða, allt frá sýndarvélum eins skýjaveitu til að lýsa auðlindum nethluta.

Á sama tíma gerir sjálfstæði frá umhverfinu mögulegt að vinna með staðbundnum, skýjaauðlindum og jafnvel stjórna pallinum. Og ef það er enginn studdur vettvangur og þú vilt bæta við nýjum geturðu skrifað þinn eigin þjónustuaðila og notað hann.

Heimild: www.habr.com

Bæta við athugasemd