Å ajÄ rakstÄ apskatÄ«sim, no kÄ sastÄv Terraform, kÄ arÄ« pakÄpeniski iedarbinÄsim savu infrastruktÅ«ru
Par visu sÄ«kÄk un trÄ«s posmos:
1. Terraform - apraksts, priekÅ”rocÄ«bas un sastÄvdaļas
Terraform ir IaC (Infrastructure-as-Code) rÄ«ks virtuÄlÄs infrastruktÅ«ras veidoÅ”anai un pÄrvaldÄ«bai, izmantojot kodu.
MÄs atzÄ«mÄjÄm vairÄkas priekÅ”rocÄ«bas, strÄdÄjot ar rÄ«ku:
-
Jauno Ä«rnieku ievieÅ”anas Ätrums (pielÄgotas virtuÄlÄs vides). Parasti, jo vairÄk ir jaunu klientu, jo vairÄk āklikŔķuā tehniskÄ atbalsta personÄlam ir jÄveic, lai publicÄtu jaunus resursus. Izmantojot Terraform, lietotÄji var mainÄ«t virtuÄlÄs maŔīnas iestatÄ«jumus (piemÄram, automÄtiski izslÄgt OS un palielinÄt virtuÄlÄ diska nodalÄ«jumu), neprasot tehnisko atbalstu vai neizslÄdzot paÅ”u maŔīnu.
-
TÅ«lÄ«tÄja aktivizÄcijas plÄna pÄrbaude jaunais Tennants. Izmantojot infrastruktÅ«ras koda aprakstu, mÄs uzreiz varam pÄrbaudÄ«t, kas tiks pievienots un kÄdÄ secÄ«bÄ, kÄ arÄ« kÄdÄ gala stÄvoklÄ« bÅ«s tÄ vai cita virtuÄlÄ maŔīna vai virtuÄlais tÄ«kls ar pieslÄgumiem virtuÄlajÄm maŔīnÄm.
-
SpÄja aprakstÄ«t populÄrÄkÄs mÄkoÅu platformas. Varat izmantot rÄ«ku no Amazon un Google Cloud lÄ«dz privÄtÄm platformÄm, kuru pamatÄ ir VMware vCloud Director, piedÄvÄjot pakalpojumus IaaS, SaaS un PaaS risinÄjumos.
-
PÄrvaldiet vairÄkus mÄkoÅa pakalpojumu sniedzÄjus un izplatÄ«t infrastruktÅ«ru starp tÄm, lai uzlabotu kļūdu toleranci, izmantojot vienu konfigurÄciju, lai izveidotu, diagnosticÄtu un pÄrvaldÄ«tu mÄkoÅa resursus.
-
Ärta izmantoÅ”ana demonstrÄcijas stendu veidoÅ”anai programmatÅ«ras testÄÅ”anai un atkļūdoÅ”anai. Varat izveidot un pÄrsÅ«tÄ«t testÄÅ”anas nodaļas stendus, paralÄli testÄt programmatÅ«ru dažÄdÄs vidÄs un uzreiz mainÄ«t un dzÄst resursus, izveidojot tikai vienu resursu veidoÅ”anas plÄnu.
"TerÄrijs" Terraform
MÄs Ä«si runÄjÄm par rÄ«ka priekÅ”rocÄ«bÄm, tagad sadalÄ«sim to sastÄvdaļÄs
Pakalpojumu sniedzÄji.
TerraformÄ gandrÄ«z jebkura veida infrastruktÅ«ru var attÄlot kÄ resursu. Savienojumu starp resursiem un API platformu nodroÅ”ina pakalpojumu sniedzÄju moduļi, kas ļauj izveidot resursus konkrÄtas platformas ietvaros, piemÄram, Azure vai VMware vCloud Director.
Projekta ietvaros jÅ«s varat sazinÄties ar dažÄdiem pakalpojumu sniedzÄjiem dažÄdÄs platformÄs.
Resursi (resursa apraksts).
Resursu apraksts ļauj pÄrvaldÄ«t platformas komponentus, piemÄram, virtuÄlÄs maŔīnas vai tÄ«klus.
Varat pats izveidot resursa aprakstu VMware vCloud Director nodroÅ”inÄtÄjam un izmantot Å”o aprakstu, lai izveidotu resursus ar jebkuru mitinÄÅ”anas pakalpojumu sniedzÄju, kas izmanto vCloud Director. Jums tikai jÄmaina autentifikÄcijas parametri un tÄ«kla savienojuma parametri uz nepiecieÅ”amo hostinga pakalpojumu sniedzÄju
NodroÅ”inÄtÄji.
Å is komponents ļauj veikt operÄtÄjsistÄmas sÄkotnÄjÄs instalÄÅ”anas un apkopes darbÄ«bas pÄc virtuÄlo maŔīnu izveides. Kad esat izveidojis virtuÄlÄs maŔīnas resursu, varat izmantot nodroÅ”inÄtÄjus, lai konfigurÄtu un izveidotu savienojumu, izmantojot SSH, atjauninÄtu operÄtÄjsistÄmu un lejupielÄdÄtu un palaistu skriptu.
Ievades un izvades mainīgie.
Ievades mainīgie - ievades mainīgie jebkura veida blokiem.
Izvades mainÄ«gie ļauj saglabÄt vÄrtÄ«bas pÄc resursu izveides, un tos var izmantot kÄ ievades mainÄ«gos citos moduļos, piemÄram, nodroÅ”inÄtÄju blokÄ.
valstis.
StÄvokļa faili glabÄ informÄciju par nodroÅ”inÄtÄja platformas resursu konfigurÄciju. Pirmoreiz izveidojot platformu, nav informÄcijas par resursiem un pirms jebkÄdas darbÄ«bas Terraform atjaunina stÄvokli ar jau aprakstÄ«to resursu reÄlo infrastruktÅ«ru.
StÄvokļu galvenais mÄrÄ·is ir saglabÄt jau izveidoto resursu objektu kopumu, lai salÄ«dzinÄtu pievienoto resursu un objektu konfigurÄciju, lai izvairÄ«tos no atkÄrtotas izveides un platformas izmaiÅÄm.
PÄc noklusÄjuma informÄcija par stÄvokli tiek glabÄta lokÄlajÄ terraform.tfstate failÄ, bet nepiecieÅ”amÄ«bas gadÄ«jumÄ ir iespÄjams izmantot attÄlo krÄtuvi komandas darbam.
Varat arÄ« importÄt paÅ”reizÄjos platformas resursus stÄvoklÄ«, lai turpinÄtu mijiedarbÄ«bu ar citiem resursiem, kas savukÄrt tika izveidoti bez Terraform palÄ«dzÄ«bas.
2. Infrastruktūras izveide
Komponenti ir sakÄrtoti, tagad izmantojot Terraform pakÄpeniski veidosim infrastruktÅ«ru ar trim virtuÄlajÄm maŔīnÄm. Pirmais ar instalÄtu nginx starpniekserveri, otrais ar failu krÄtuvi, kura pamatÄ ir Nextcloud, un treÅ”ais ar CMS Bitrix.
MÄs rakstÄ«sim kodu un izpildÄ«sim to, izmantojot mÅ«su piemÄru
Vispirms izveidosim mÅ«su jaunajam projektam direktoriju, kurÄ tiks ievietoti infrastruktÅ«ru aprakstoÅ”ie faili.
mkdir project01
TÄlÄk mÄs aprakstam infrastruktÅ«ras komponentus. Terraform izveido attiecÄ«bas un apstrÄdÄ failus, pamatojoties uz aprakstu failos. PaÅ”us failus var nosaukt, pamatojoties uz aprakstÄ«to bloku mÄrÄ·i, piemÄram, network.tf - apraksta infrastruktÅ«ras tÄ«kla parametrus.
Lai aprakstÄ«tu mÅ«su infrastruktÅ«ras komponentus, mÄs izveidojÄm Å”Ädus failus:
Failu saraksts.
main.tf - virtuÄlÄs vides parametru apraksts - virtuÄlÄs maŔīnas, virtuÄlie konteineri;
network.tf - virtuÄlÄ tÄ«kla parametru un NAT un Firewall noteikumu apraksts;
variables.tf - izmantojamo mainīgo lielumu saraksts;
vcd.tfvars - projekta mainÄ«gÄs vÄrtÄ«bas modulim VMware vCloud Director.
Terraform konfigurÄcijas valoda ir deklaratÄ«va, un bloku secÄ«bai nav nozÄ«mes, izÅemot nodroÅ”inÄtÄja blokus, jo Å”ajÄ blokÄ aprakstÄm komandas, kas jÄizpilda, sagatavojot infrastruktÅ«ru un tÄs tiks izpildÄ«tas kÄrtÄ«bÄ.
Bloku struktūra.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
Bloku aprakstÄ«Å”anai tiek izmantota sava programmÄÅ”anas valoda HCL (HashiCorp Configuration Language), infrastruktÅ«ru iespÄjams aprakstÄ«t, izmantojot JSON. Varat uzzinÄt vairÄk par sintaksi
Vides mainÄ«gÄ konfigurÄcija, variables.tf un vcd.tfvars
Vispirms izveidosim divus failus, kas apraksta visu izmantoto mainÄ«go sarakstu un to vÄrtÄ«bas modulim VMware vCloud Director. Vispirms izveidosim failu variables.tf.
Faila variables.tf saturs.
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" {}
MainÄ«gÄs vÄrtÄ«bas, ko saÅemam no pakalpojumu sniedzÄja.
-
vcd_org_user ā lietotÄjvÄrds ar organizÄcijas administratora tiesÄ«bÄm,
-
vcd_org_password ā lietotÄja parole,
-
vcd_org ā organizÄcijas nosaukums,
-
vcd_org_vdc ā virtuÄlÄ datu centra nosaukums,
-
vcd_org_url ā API URL,
-
vcd_org_edge_name ā virtuÄlÄ marÅ”rutÄtÄja nosaukums,
-
vcd_org_catalog ā direktorija nosaukums ar virtuÄlÄs maŔīnas veidnÄm,
-
vcd_edge_external_ip ā publiskÄ IP adrese,
-
vcd_edge_external_network ā ÄrÄjÄ tÄ«kla nosaukums,
-
vcd_org_hdd_sp ā HDD krÄtuves politikas nosaukums,
-
vcd_org_ssd_sp ā SSD krÄtuves politikas nosaukums.
Un ievadiet mūsu mainīgos:
-
vcd_edge_local_ip_nginx ā virtuÄlÄs maŔīnas IP adrese ar NGINX,
-
vcd_edge_local_ip_bitrix ā virtuÄlÄs maŔīnas IP adrese ar 1C: Bitrix,
-
vcd_edge_local_ip_nextcloud ā virtuÄlÄs maŔīnas IP adrese ar Nextcloud.
Ar otro failu mÄs izveidojam un norÄdÄm mainÄ«gos VMware vCloud Director modulim failÄ vcd.tfvars: AtgÄdinÄsim, ka mÅ«su piemÄrÄ mÄs izmantojam
Faila vcd.tfvars saturs.
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"
TÄ«kla konfigurÄcija, network.tf.
Vides mainÄ«gie ir iestatÄ«ti, tagad mÄs iestatÄ«sim virtuÄlÄs maŔīnas savienojuma shÄmu - katrai virtuÄlajai maŔīnai pieŔķirsim privÄtu IP adresi un izmantosim Destination NAT, lai portus āpÄrsÅ«tÄ«tuā uz ÄrÄjo tÄ«klu. Lai ierobežotu piekļuvi pÄrvaldÄ«bas portiem, mÄs iestatÄ«sim piekļuvi tikai mÅ«su IP adresei.
Tiek veidota platformas Terraform tīkla diagramma
MÄs izveidojam virtuÄlo organizÄcijas tÄ«klu ar nosaukumu net_lan01, noklusÄjuma vÄrteju: 192.168.110.254, kÄ arÄ« ar adreÅ”u telpu: 192.168.110.0/24.
MÄs aprakstÄm virtuÄlo tÄ«klu.
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"
}
}
Izveidosim ugunsmÅ«ra noteikumus, kas ļauj virtuÄlajÄm maŔīnÄm piekļūt internetam. Å ajÄ blokÄ visiem mÄkoÅa virtuÄlajiem resursiem bÅ«s piekļuve internetam:
MÄs aprakstÄm noteikumus VM piekļuvei internetam.
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]
}
KonstatÄjot atkarÄ«bu, ka pÄc vcdnetworkrouted.net bloka apstrÄdes mÄs turpinÄm konfigurÄt bloku vcdnsxvfirewallrule, izmantojot atkarÄ«gs no. MÄs izmantojam Å”o opciju, jo dažas atkarÄ«bas var tikt atpazÄ«tas konfigurÄcijÄ.
TÄlÄk mÄs izveidosim noteikumus, kas ļauj piekļūt portiem no ÄrÄjÄ tÄ«kla un norÄdÄ«sim mÅ«su IP adresi savienojuma izveidei ar serveriem, izmantojot SSH. Jebkuram interneta lietotÄjam ir piekļuve tÄ«mekļa servera portiem 80 un 443, un lietotÄjam ar IP adresi 90.1.15.1 ir piekļuve virtuÄlo serveru SSH portiem.
Atļaujiet piekļuvi portiem no ÄrÄjÄ tÄ«kla.
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]
}
MÄs izveidojam avota NAT noteikumus, lai piekļūtu internetam no mÄkoÅa lokÄlÄ tÄ«kla:
MÄs aprakstÄm avota NAT noteikumus.
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]
}
Un, lai pabeigtu tÄ«kla bloka konfigurÄciju, mÄs pievienojam galamÄrÄ·a NAT noteikumus, lai piekļūtu pakalpojumiem no ÄrÄjÄ tÄ«kla:
GalamÄrÄ·a NAT noteikumu pievienoÅ”ana.
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]
}
Pievienojiet NAT kÄrtulu portu tulkoÅ”anai SSH serverÄ« zem 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]
}
Pievienojiet NAT noteikumu portu tulkoŔanai SSH serverim, izmantojot 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]
}
Pievienojiet NAT noteikumu porta tulkoŔanai SSH serverim, izmantojot 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 virtuÄlÄs vides konfigurÄcija
KÄ plÄnojÄm raksta sÄkumÄ, mÄs izveidosim trÄ«s virtuÄlÄs maŔīnas. Tie tiks sagatavoti, izmantojot "Viesa pielÄgoÅ”anu". MÄs iestatÄ«sim tÄ«kla parametrus atbilstoÅ”i mÅ«su norÄdÄ«tajiem iestatÄ«jumiem, un lietotÄja parole tiks Ä£enerÄta automÄtiski.
AprakstÄ«sim vApp, kurÄ atradÄ«sies virtuÄlÄs maŔīnas, un to konfigurÄciju.
VirtuÄlÄs maŔīnas konfigurÄcija
Izveidosim vApp konteineru. Lai mÄs varÄtu nekavÄjoties savienot vApp un VM ar virtuÄlo tÄ«klu, mÄs pievienojam arÄ« parametru addict_on:
Izveidojiet konteineru
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
Izveidosim virtuÄlo maŔīnu ar aprakstu
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
}
}
Galvenie parametri VM aprakstÄ:
-
nosaukums ā virtuÄlÄs maŔīnas nosaukums,
-
vappname ā tÄs vApp nosaukums, kurai jÄpievieno jauna virtuÄlÄ maŔīna,
-
kataloga nosaukums/veidnes nosaukums ā kataloga nosaukums un virtuÄlÄs maŔīnas veidnes nosaukums,
-
storageprofile ā noklusÄjuma krÄtuves politika.
TÄ«kla bloka parametri:
-
tips ā savienotÄ tÄ«kla veids,
-
nosaukums ā ar kuru virtuÄlo tÄ«klu savienot virtuÄlo maŔīnu,
-
isprimary ā primÄrais tÄ«kla adapteris,
-
ipallocation_mode ā MANUÄLAIS / DHCP / POOL adreses pieŔķirÅ”anas režīms,
-
ip ā virtuÄlÄs maŔīnas IP adrese, mÄs to norÄdÄ«sim manuÄli.
override_template_disk bloks:
-
sizeinmb ā sÄknÄÅ”anas diska lielums virtuÄlajai maŔīnai
-
storage_profile ā diska uzglabÄÅ”anas politika
Izveidosim otru virtuÄlo maŔīnu ar Nextcloud failu krÄtuves aprakstu
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 ]
}
SadaÄ¼Ä vcdvminternal_disk mÄs aprakstÄ«sim jaunu virtuÄlo disku, kas ir savienots ar virtuÄlo maŔīnu.
Paskaidrojumi par vcdvminternaldisk bloku:
-
bustype - diska kontrollera tips
-
sizeinmb ā diska izmÄrs
-
kopnes numurs / vienības numurs - savienojuma vieta adapterī
-
storage_profile ā diska uzglabÄÅ”anas politika
AprakstÄ«sim jaunÄko virtuÄlo maŔīnu vietnÄ 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
}
}
OS atjauninÄÅ”ana un papildu skriptu instalÄÅ”ana
TÄ«kls ir sagatavots, virtuÄlÄs maŔīnas ir aprakstÄ«tas. Pirms mÅ«su infrastruktÅ«ras importÄÅ”anas mÄs varam veikt sÄkotnÄjo nodroÅ”inÄÅ”anu iepriekÅ”, izmantojot nodroÅ”inÄtÄju blokus un neizmantojot Ansible.
ApskatÄ«sim, kÄ atjauninÄt OS un palaist CMS Bitrix instalÄcijas skriptu, izmantojot nodroÅ”inÄtÄja bloku.
Vispirms instalÄsim CentOS atjauninÄÅ”anas pakotnes.
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" ]
}
}
}
Komponentu apzÄ«mÄjums:
-
nodroÅ”inÄtÄjs āremote-execā - pievienojiet attÄlÄs nodroÅ”inÄÅ”anas bloku
-
Savienojuma blokÄ mÄs aprakstÄm savienojuma veidu un parametrus:
-
tips ā protokols, mÅ«su gadÄ«jumÄ SSH;
-
user ā lietotÄjvÄrds;
-
parole ā lietotÄja parole. MÅ«su gadÄ«jumÄ mÄs norÄdÄm uz parametru vcdvappvm.nginx.customization[0].admin_password, kas saglabÄ sistÄmas lietotÄja Ä£enerÄto paroli.
-
resursdators ā ÄrÄjÄ IP adrese savienojumam;
-
ports ā savienojuma ports, kas iepriekÅ” bija norÄdÄ«ts DNAT iestatÄ«jumos;
-
inline ā uzskaitiet to komandu sarakstu, kuras tiks ievadÄ«tas. Komandas tiks ievadÄ«tas tÄdÄ secÄ«bÄ, kÄ norÄdÄ«ts Å”ajÄ sadaļÄ.
PiemÄram, papildus izpildÄ«sim 1C-Bitrix instalÄcijas skriptu. Skripta izpildes rezultÄta izvade bÅ«s pieejama, kamÄr plÄns darbojas. Lai instalÄtu skriptu, vispirms mÄs aprakstam bloku:
AprakstÄ«sim 1C-Bitrix instalÄÅ”anu.
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"
]
}
Un mÄs nekavÄjoties aprakstÄ«sim Bitrix atjauninÄjumu.
1C-Bitrix nodroÅ”inÄÅ”anas piemÄrs.
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"
]
}
}
SvarÄ«gs! Skripts var nedarboties, ja iepriekÅ” neizslÄdzat SELinux! Ja jums ir nepiecieÅ”ams detalizÄts raksts par CMS 1C-Bitrix instalÄÅ”anu un konfigurÄÅ”anu, izmantojot bitrix-env.sh, varat
3. InfrastruktÅ«ras inicializÄcija
Moduļu un spraudÅu inicializÄcija
Darbam mÄs izmantojam vienkÄrÅ”u ādžentlmeÅa komplektuā: klÄpjdatoru ar operÄtÄjsistÄmu Windows 10 un izplatÄ«Å”anas komplektu no oficiÄlÄs vietnes. terraform.exe init
PÄc skaitļoÅ”anas un tÄ«kla infrastruktÅ«ras aprakstÄ«Å”anas mÄs uzsÄkam plÄnoÅ”anu, lai pÄrbaudÄ«tu mÅ«su konfigurÄciju, kur mÄs varam redzÄt, kas tiks izveidots un kÄ tas tiks savienots viens ar otru.
-
Izpildi komandu
- terraform plan -var-file=vcd.tfvars
. -
MÄs iegÅ«stam rezultÄtu
- Plan: 16 to add, 0 to change, 0 to destroy.
Tas ir, saskaÅÄ ar Å”o plÄnu tiks izveidoti 16 resursi. -
MÄs palaižam plÄnu pÄc komandas
- terraform.exe apply -var-file=vcd.tfvars
.
Tiks izveidotas virtuÄlÄs maŔīnas, un pÄc tam mÅ«su uzskaitÄ«tÄs pakotnes tiks izpildÄ«tas nodroÅ”inÄtÄju sadaÄ¼Ä - tiks atjauninÄta OS un instalÄta CMS Bitrix.
SaÅem savienojuma datus
PÄc plÄna izpildes vÄlamies saÅemt datus teksta formÄ savienojumam ar serveriem, Å”im nolÅ«kam izvades sadaļu formatÄsim Å”Ädi:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
Un Å”Äda izvade mums norÄda izveidotÄs virtuÄlÄs maŔīnas paroli:
Outputs: nginx_password = F#4u8!!N
RezultÄtÄ mÄs iegÅ«stam piekļuvi virtuÄlajÄm maŔīnÄm ar atjauninÄtu operÄtÄjsistÄmu un iepriekÅ” instalÄtÄm pakotnÄm mÅ«su turpmÄkajam darbam. Viss ir gatavs!
Bet ko darÄ«t, ja jums jau ir esoÅ”Ä infrastruktÅ«ra?
3.1. Darbojas Terraform ar esoŔo infrastruktūru
Tas ir vienkÄrÅ”i ā varat importÄt paÅ”reizÄjÄs virtuÄlÄs maŔīnas un to vApp konteinerus, izmantojot importÄÅ”anas komandu.
AprakstÄ«sim vAPP resursu un virtuÄlo maŔīnu.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
NÄkamais solis ir vApp resursu rekvizÄ«tu importÄÅ”ana formÄtÄ vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
, kur:
-
vApp ā vApp nosaukums;
-
org ā organizÄcijas nosaukums;
-
org_vdc ā virtuÄlÄ datu centra nosaukums.
VAPP resursu rekvizÄ«tu importÄÅ”ana
ImportÄsim VM resursu rekvizÄ«tus Å”ÄdÄ formÄtÄ: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, kurÄ:
-
VM ā VM nosaukums;
-
vApp ā vApp nosaukums;
-
org ā organizÄcijas nosaukums;
-
orgvdc ir virtuÄlÄ datu centra nosaukums.
ImportÄÅ”ana bija veiksmÄ«ga
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.
Tagad mÄs varam apskatÄ«t jauno importÄto resursu:
ImportÄts resurss
> 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"
}
}
Tagad noteikti esam gatavi - esam pabeiguÅ”i ar pÄdÄjo punktu (importÄÅ”ana esoÅ”ajÄ infrastruktÅ«rÄ) un esam apsvÄruÅ”i visus galvenos darba ar Terraform punktus.
RÄ«ks izrÄdÄ«jÄs ļoti Ärts un ļauj raksturot savu infrastruktÅ«ru kÄ kodu, sÄkot no viena mÄkoÅa nodroÅ”inÄtÄja virtuÄlajÄm maŔīnÄm lÄ«dz tÄ«kla komponentu resursu aprakstÄ«Å”anai.
TajÄ paÅ”Ä laikÄ neatkarÄ«ba no vides ļauj strÄdÄt ar vietÄjiem, mÄkoÅa resursiem un pat pÄrvaldÄ«t platformu. Un, ja nav atbalstÄ«tas platformas un vÄlaties pievienot jaunu, varat uzrakstÄ«t savu pakalpojumu sniedzÄju un izmantot to.
Avots: www.habr.com