Terraform ашиглан үүлэн дэд бүтцийг хэрхэн удирдах вэ

Terraform ашиглан үүлэн дэд бүтцийг хэрхэн удирдах вэ

Энэ нийтлэлд бид Terraform юунаас бүрдэхийг авч үзэхээс гадна өөрийн дэд бүтцийг аажмаар эхлүүлэх болно. VMware ашиглан үүлэн дотор - бид өөр өөр зорилгоор гурван VM бэлтгэх болно: прокси, файл хадгалах болон CMS.

Бүх зүйлийн талаар дэлгэрэнгүй, гурван үе шаттайгаар:

1. Терраформ - тодорхойлолт, давуу тал, бүрэлдэхүүн хэсгүүд

Terraform бол код ашиглан виртуал дэд бүтцийг бий болгох, удирдахад зориулагдсан IaC (Infrastructure-as-Code) хэрэгсэл юм.

Энэ хэрэгсэлтэй ажиллах хэд хэдэн давуу талыг бид тэмдэглэв.

  • Шинэ түрээслэгчдийн байршуулах хурд (захиалгат виртуал орчин). Дүрмээр бол, олон шинэ үйлчлүүлэгчид байх тусам техникийн дэмжлэг үзүүлэх ажилтнууд шинэ эх сурвалжийг нийтлэхийн тулд "товшилт" хийх шаардлагатай болдог. Terraform-ийн тусламжтайгаар хэрэглэгчид виртуал машины тохиргоог өөрчлөх (жишээ нь, үйлдлийн системийг автоматаар унтрааж, виртуал дискний хуваалтыг нэмэгдүүлэх) техникийн дэмжлэг шаардахгүйгээр эсвэл машиныг өөрөө унтраахгүйгээр өөрчлөх боломжтой.

  • Идэвхжүүлэх төлөвлөгөөг шуурхай шалгах шинэ Теннант. Дэд бүтцийн кодын тайлбарыг ашиглан бид юу нэмж, ямар дарааллаар оруулах, мөн энэ эсвэл тэр виртуал машин эсвэл виртуал машинтай холбогдсон виртуал сүлжээ ямар эцсийн төлөвт байхыг нэн даруй шалгаж болно.

  • Хамгийн алдартай үүл платформуудыг дүрслэх чадвар. Та хэрэгслийг ашиглаж болно Amazon болон Google Cloud-аас эхлээд VMware vCloud Director дээр суурилсан хувийн платформууд хүртэл IaaS, SaaS болон PaaS шийдлүүдийн хүрээнд үйлчилгээ үзүүлдэг.

  • Олон үүл үйлчилгээ үзүүлэгчийг удирдах үүлэн нөөцийг үүсгэх, оношлох, удирдахад нэг тохиргоог ашиглан алдааг тэсвэрлэх чадварыг сайжруулахын тулд тэдгээрийн хооронд дэд бүтцийг хуваарилах.

  • Демо стенд үүсгэхэд тохиромжтой програм хангамжийн туршилт, дибаг хийхэд зориулагдсан. Та туршилтын хэлтэст зориулж стенд үүсгэж, шилжүүлэх, програм хангамжийг өөр өөр орчинд зэрэгцүүлэн турших, зөвхөн нэг нөөц бүрдүүлэх төлөвлөгөөг бий болгосноор нөөцийг шууд өөрчлөх, устгах боломжтой.

"Террариум" терраформ

Бид уг хэрэгслийн давуу талуудын талаар товчхон ярьсан бөгөөд одоо үүнийг бүрэлдэхүүн хэсгүүдэд нь задлан үзье

Үйлчилгээ үзүүлэгчид. 

Terraform-д бараг бүх төрлийн дэд бүтцийг нөөц болгон төлөөлөх боломжтой. Нөөц ба API платформын хоорондох холболтыг үйлчилгээ үзүүлэгчийн модулиудаар хангадаг бөгөөд энэ нь тодорхой платформ, жишээлбэл, Azure эсвэл VMware vCloud Director зэрэг нөөцийг үүсгэх боломжийг олгодог.

Төслийн хүрээнд та өөр өөр платформ дээр өөр үйлчилгээ үзүүлэгчидтэй харилцах боломжтой.

Нөөц (нөөцийн тодорхойлолт).

Нөөцийн тайлбар нь виртуал машин эсвэл сүлжээ гэх мэт платформын бүрэлдэхүүн хэсгүүдийг удирдах боломжийг олгодог. 

Та VMware vCloud Director үйлчилгээ үзүүлэгчийн нөөцийн тайлбарыг өөрөө үүсгэж болох бөгөөд энэ тайлбарыг ашиглан vCloud Director ашигладаг дурын хостинг үйлчилгээ үзүүлэгчийн нөөцийг үүсгэж болно. Та зөвхөн баталгаажуулалтын параметрүүд болон сүлжээний холболтын параметрүүдийг шаардлагатай хостинг үйлчилгээ үзүүлэгч рүү өөрчлөх хэрэгтэй

Зохицуулагчид.

Энэ бүрэлдэхүүн хэсэг нь виртуал машин үүсгэсний дараа үйлдлийн системийг анхан шатны суурилуулалт, засвар үйлчилгээ хийх ажиллагааг гүйцэтгэх боломжийг олгодог. Виртуал машины нөөцийг үүсгэсний дараа та SSH-ээр тохируулж, холбогдох, үйлдлийн системийг шинэчлэх, скрипт татаж авах, ажиллуулах зэрэгт провайдеруудыг ашиглаж болно. 

Оролт ба гаралтын хувьсагчид.

Оролтын хувьсагч - ямар ч төрлийн блокийн оролтын хувьсагч. 

Гаралтын хувьсагч нь нөөц үүсгэсний дараа утгыг хадгалах боломжийг олгодог бөгөөд бусад модулиудад, жишээлбэл, Provisioners блок дахь оролтын хувьсагч болгон ашиглаж болно.

муж улсууд.

Төрийн файлууд нь үйлчилгээ үзүүлэгчийн платформын нөөцийн тохиргооны талаарх мэдээллийг хадгалдаг. Платформыг анх үүсгэх үед нөөцийн талаар ямар ч мэдээлэл байхгүй бөгөөд ямар нэгэн үйл ажиллагаа явуулахаас өмнө Terraform нь аль хэдийн тайлбарласан нөөцийн бодит дэд бүтцээр төлөвийг шинэчилдэг.

Мужийн гол зорилго нь платформыг дахин үүсгэх, өөрчлөхөөс зайлсхийхийн тулд нэмсэн нөөц ба объектуудын тохиргоог харьцуулахын тулд аль хэдийн үүсгэсэн нөөцийн олон объектыг хадгалах явдал юм.

Анхдагч байдлаар, төлөвийн мэдээллийг локал terraform.tfstate файлд хадгалдаг боловч шаардлагатай бол алсын санах ойг багийн ажилд ашиглах боломжтой.

Та мөн Terraform-ийн тусламжгүйгээр бий болсон бусад нөөцүүдтэй цаашид харилцахын тулд одоогийн платформын нөөцүүдийг муж руу импортлох боломжтой.  

2. Дэд бүтцийг бий болгох

Бүрэлдэхүүн хэсгүүдийг ангилсан, одоо Terraform ашиглан бид аажмаар гурван виртуал машин бүхий дэд бүтцийг бий болгоно. Эхнийх нь nginx прокси сервер суулгасан, хоёр дахь нь Nextcloud дээр суурилсан файл хадгалах, гурав дахь нь CMS Bitrix.

Бид өөрийн жишээн дээр код бичиж, түүнийгээ гүйцэтгэх болно VMware vCloud Director дээрх үүлс. Манай хэрэглэгчид Байгууллагын администраторын эрхтэй бүртгэл хүлээн авдаг. Хэрэв та өөр VMware үүлэн дээр ижил эрхтэй бүртгэл ашигладаг бол манай жишээн дээрх кодыг хуулбарлаж болно. Яв!

Эхлээд шинэ төсөлдөө дэд бүтцийг дүрсэлсэн файлуудыг байрлуулах лавлах үүсгэцгээе.

mkdir project01

Дараа нь бид дэд бүтцийн бүрэлдэхүүн хэсгүүдийг тайлбарлах болно. Terraform нь файлуудын тайлбар дээр үндэслэн харилцаа холбоо үүсгэж, файлуудыг боловсруулдаг. Файлуудыг өөрөө тайлбарлаж буй блокуудын зорилгод үндэслэн нэрлэж болно, жишээлбэл, network.tf - дэд бүтцийн сүлжээний параметрүүдийг тодорхойлдог.

Дэд бүтцийнхээ бүрэлдэхүүн хэсгүүдийг тайлбарлахын тулд бид дараах файлуудыг үүсгэсэн.

Файлуудын жагсаалт.

main.tf - виртуал орчны параметрүүдийн тодорхойлолт - виртуал машин, виртуал контейнер;

network.tf - виртуал сүлжээний параметрүүд болон NAT болон галт ханын дүрмийн тодорхойлолт;

variables.tf - бидний ашигладаг хувьсагчийн жагсаалт;

vcd.tfvars - VMware vCloud Director модулийн төслийн хувьсагчийн утгууд.

Terraform дахь тохиргооны хэл нь тунхаглалтай бөгөөд блокуудын дараалал нь провайдерийн блокуудаас бусад нь хамаагүй, учир нь Энэ блок дээр бид дэд бүтцийг бэлтгэх үед гүйцэтгэх командуудыг тайлбарласан бөгөөд тэдгээрийг дарааллаар нь гүйцэтгэх болно.

Блокны бүтэц.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Блокуудыг дүрслэхийн тулд өөрийн програмчлалын хэл HCL (HashiCorp Configuration Language) ашигладаг бөгөөд JSON ашиглан дэд бүтцийг дүрслэх боломжтой. Та синтаксийн талаар илүү ихийг мэдэж болно хөгжүүлэгчийн вэбсайтаас уншина уу.

Орчны хувьсагчийн тохиргоо, variables.tf болон vcd.tfvars

Эхлээд VMware vCloud Director модулийн ашигласан бүх хувьсагчийн жагсаалт болон тэдгээрийн утгыг тодорхойлсон хоёр файл үүсгэцгээе. Эхлээд variables.tf файлыг үүсгэцгээе.

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

Бид үйлчилгээ үзүүлэгчээс хүлээн авдаг хувьсах утгууд.

  • vcd_org_user — Байгууллагын администраторын эрхтэй хэрэглэгчийн нэр,

  • vcd_org_password — хэрэглэгчийн нууц үг,

  • vcd_org — байгууллагын нэр,

  • vcd_org_vdc — виртуал мэдээллийн төвийн нэр,

  • vcd_org_url - API URL,

  • vcd_org_edge_name — виртуал чиглүүлэгчийн нэр,

  • vcd_org_catalog — виртуал машины загвар бүхий лавлахын нэр,

  • vcd_edge_external_ip — нийтийн IP хаяг,

  • vcd_edge_external_network — гадаад сүлжээний нэр,

  • vcd_org_hdd_sp — HDD хадгалах бодлогын нэр,

  • vcd_org_ssd_sp — SSD хадгалах бодлогын нэр.

Мөн бидний хувьсагчдыг оруулна уу:

  • vcd_edge_local_ip_nginx — NGINX-тэй виртуал машины IP хаяг,

  • vcd_edge_local_ip_bitrix - 1С-тэй виртуал машины IP хаяг: Bitrix,

  • vcd_edge_local_ip_nextcloud — Nextcloud-тай виртуал машины IP хаяг.

Хоёрдахь файлын тусламжтайгаар бид vcd.tfvars файл дахь VMware vCloud Director модулийн хувьсагчдыг үүсгэж, зааж өгдөг: Бид жишээндээ ашигладаг гэдгийг эргэн санацгаая. өөрийн үүл mClouds, хэрэв та өөр үйлчилгээ үзүүлэгчтэй ажилладаг бол тэдэнтэй утгыг шалгана уу. 

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"

Сүлжээний тохиргоо, network.tf.

Орчны хувьсагчдыг тохируулсан, одоо бид виртуал машины холболтын схемийг тохируулах болно - бид виртуал машин бүрт хувийн IP хаяг өгч, портуудыг гадаад сүлжээнд "дамжуулах" NAT-ыг ашиглана. Удирдлагын портуудад хандах хандалтыг хязгаарлахын тулд бид зөвхөн өөрийн IP хаягийн хандалтыг тохируулах болно.

Terraform ашиглан үүлэн дэд бүтцийг хэрхэн удирдах вэTerraform платформын сүлжээний диаграмыг үүсгэж байна

Бид net_lan01 нэртэй виртуал байгууллагын сүлжээг үүсгэдэг, үндсэн гарц: 192.168.110.254, мөн хаягийн зай: 192.168.110.0/24.

Бид виртуал сүлжээг дүрсэлдэг.

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"

  }

}

Виртуал машинууд интернетэд нэвтрэх боломжийг олгодог галт ханын дүрмийг бий болгоцгооё. Энэ блок дотор үүлэн доторх бүх виртуал нөөцүүд интернетэд холбогдох боломжтой болно.

Бид интернетэд 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]

}

Vcdnetworkrouted.net блокыг боловсруулсны дараа бид vcdnsxvfirewallrule блокыг тохируулж байна гэсэн хамаарлыг тогтоосны дараа, ашиглах замаар хамааралтай. Зарим хамаарлыг тохиргоонд шууд хүлээн зөвшөөрч болох тул бид энэ сонголтыг ашиглаж байна.

Дараа нь бид гадаад сүлжээнээс порт руу нэвтрэх дүрмийг бий болгож, SSH-ээр серверүүдтэй холбогдохын тулд бидний IP хаягийг зааж өгнө. Ямар ч интернет хэрэглэгч вэб серверийн 80, 443 портууд руу хандах боломжтой бөгөөд 90.1.15.1 IP хаягтай хэрэглэгч виртуал серверүүдийн SSH портуудад хандах эрхтэй.

Гадаад сүлжээнээс порт руу нэвтрэхийг зөвшөөрөх.

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]

}

Бид үүлэн локал сүлжээнээс интернетэд нэвтрэх эх сурвалжийн NAT дүрмийг бий болгодог.

Бид Source 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]

}

Мөн сүлжээний блокийн тохиргоог дуусгахын тулд бид гадаад сүлжээнээс үйлчилгээнд нэвтрэх Destination NAT дүрмийг нэмж оруулав.

Destination NAT дүрмийг нэмж байна.

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

  description = "NGINX HTTPs"

original_address = var.vcd_edge_external_ip
original_port = 443

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

depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "NGINX HTTP"

original_address = var.vcd_edge_external_ip
original_port = 80

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

depends_on = [vcd_network_routed.net]

}

Nginx доорх SSH сервер рүү порт орчуулга хийх NAT дүрмийг нэмнэ үү.

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]

}

1C-Bitrix-тай SSH сервер рүү порт орчуулга хийх NAT дүрмийг нэмнэ үү.

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]

}

Nextcloud ашиглан SSH серверт порт орчуулга хийх NAT дүрмийг нэмнэ үү.

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 виртуал орчны тохиргоо

Өгүүллийн эхэнд төлөвлөсөн ёсоор бид гурван виртуал машин үүсгэх болно. Тэдгээрийг "Зочин тохируулах" ашиглан бэлтгэх болно. Бид заасан тохиргооны дагуу сүлжээний параметрүүдийг тохируулах бөгөөд хэрэглэгчийн нууц үг автоматаар үүсгэгдэх болно.

Виртуал машинууд байрлах vApp болон тэдгээрийн тохиргоог тайлбарлая.

Terraform ашиглан үүлэн дэд бүтцийг хэрхэн удирдах вэВиртуал машины тохиргоо

vApp контейнер үүсгэцгээе. Бид vApp болон VM-ийг виртуал сүлжээнд нэн даруй холбох боломжтой болохын тулд бид хамааралтай_on параметрийг нэмнэ:

Контейнер үүсгэх

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

}

Тодорхойлолт бүхий виртуал машин бүтээцгээе

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

}

}

VM тайлбар дахь үндсэн параметрүүд:

  • нэр - виртуал машины нэр,

  • vappname - шинэ VM нэмэх vApp-ийн нэр,

  • каталогийн нэр / загвар нэр - каталогийн нэр ба виртуал машины загварын нэр,

  • storageprofile - анхдагч хадгалах бодлого.

Сүлжээний блокийн параметрүүд:

  • төрөл - холбогдсон сүлжээний төрөл,

  • нэр - VM-г ямар виртуал сүлжээнд холбох,

  • isprimary - үндсэн сүлжээний адаптер,

  • ipallocation_mode — MANUAL / DHCP / POOL хаяг хуваарилах горим,

  • ip — виртуал машины IP хаяг, бид үүнийг гараар зааж өгөх болно.

Загвар_дискний блокыг дарах:

  • sizeinmb — виртуал машины ачаалах дискний хэмжээ

  • storage_profile — дискний хадгалах бодлого

Nextcloud файлын хадгалах сангийн тайлбар бүхий хоёр дахь VM-ийг үүсгэцгээе

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 ]

}

Vcdvminternal_disk хэсэгт бид виртуал машинтай холбогдсон шинэ виртуал дискийг тайлбарлах болно.

Vcdvminternaldisk блокийн тайлбар:

  • bustype - диск хянагчийн төрөл

  • sizeinmb - дискний хэмжээ

  • автобусны дугаар / нэгжийн дугаар - адаптер дахь холболтын байршил

  • storage_profile — дискний хадгалах бодлого

Bitrix дээрх хамгийн сүүлийн үеийн VM-ийг тайлбарлая

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

}

}

Үйлдлийн системийг шинэчилж, нэмэлт скрипт суулгаж байна

Сүлжээг бэлтгэж, виртуал машинуудыг тайлбарлав. Дэд бүтцээ импортлохын өмнө бид Ansible-г ашиглахгүйгээр провайдер блокуудыг ашиглан анхан шатны бэлтгэлийг хийх боломжтой.

Провайдер блок ашиглан үйлдлийн системээ хэрхэн шинэчлэх, CMS Bitrix суулгах скриптийг ажиллуулах талаар харцгаая.

Эхлээд 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" ]

}

}

}

Бүрэлдэхүүн хэсгүүдийн тэмдэглэгээ:

  • provisioner "remote-exec" - алсын нөөцийн блокыг холбоно

  • Холболтын блок дээр бид холболтын төрөл, параметрүүдийг тодорхойлно.

  • төрөл - протокол, манай тохиолдолд SSH;

  • хэрэглэгч - хэрэглэгчийн нэр;

  • нууц үг - хэрэглэгчийн нууц үг. Манай тохиолдолд системийн хэрэглэгчийн үүсгэсэн нууц үгийг хадгалдаг vcdvappvm.nginx.customization[0].admin_password параметрийг заадаг.

  • хост — холболтын гадаад IP хаяг;

  • порт — DNAT тохиргоонд өмнө нь заасан холболтын порт;

  • inline - оруулах тушаалуудын жагсаалтыг жагсаана. Энэ хэсэгт заасны дагуу тушаалуудыг дарааллаар оруулна.

Жишээлбэл, 1C-Bitrix суулгах скриптийг нэмж ажиллуулцгаая. Төлөвлөгөө ажиллаж байх үед скриптийн гүйцэтгэлийн үр дүнгийн гаралт бэлэн байх болно. Скриптийг суулгахын тулд эхлээд блокыг тайлбарлана:

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"

]

}

Мөн бид Bitrix шинэчлэлтийг нэн даруй тайлбарлах болно.

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"

]

}

}

Чухал! Хэрэв та SELinux-ийг урьдчилан идэвхгүй болгохгүй бол скрипт ажиллахгүй байж магадгүй! Хэрэв танд bitrix-env.sh ашиглан CMS 1C-Bitrix-ийг суулгах, тохируулах талаар дэлгэрэнгүй нийтлэл хэрэгтэй бол oo. вэбсайт дээрх манай блогийн нийтлэлийг ашиглана уу.

3. Дэд бүтцийг эхлүүлэх

Terraform ашиглан үүлэн дэд бүтцийг хэрхэн удирдах вэМодуль болон залгаасуудыг эхлүүлж байна

Ажлын хувьд бид энгийн "ноёнтны иж бүрдэл" ашигладаг: Windows 10 үйлдлийн системтэй зөөврийн компьютер, албан ёсны вэбсайтаас түгээлтийн иж бүрдэл. terraform.io. Командыг ашиглан задалж, эхлүүлцгээе: terraform.exe init

Тооцоолол болон сүлжээний дэд бүтцийг тайлбарласны дараа бид тохиргоогоо туршихаар төлөвлөж, юу бүтээгдэх, хоорондоо хэрхэн холбогдохыг харж болно.

  1. Командыг гүйцэтгэнэ - terraform plan -var-file=vcd.tfvars.

  2. Бид үр дүнг авдаг - Plan: 16 to add, 0 to change, 0 to destroy. Өөрөөр хэлбэл, энэ төлөвлөгөөний дагуу 16 нөөц бий болно.

  3. Бид төлөвлөгөөг тушаалаар эхлүүлнэ - terraform.exe apply -var-file=vcd.tfvars.

Виртуал машинууд үүсгэгдэх бөгөөд дараа нь бидний жагсаасан багцууд провайдер хэсэгт хийгдэх болно - үйлдлийн систем шинэчлэгдэж, CMS Bitrix суулгана.

Холболтын мэдээллийг хүлээн авч байна

Төлөвлөгөөгөө хэрэгжүүлсний дараа бид серверүүдтэй холбогдохын тулд өгөгдлийг текст хэлбэрээр хүлээн авахыг хүсч байгаа бөгөөд үүний тулд бид гаралтын хэсгийг дараах байдлаар форматлана.

output "nginxpassword" {

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

}

Дараах гаралт нь үүсгэсэн виртуал машины нууц үгийг хэлж өгнө.

Outputs: nginx_password = F#4u8!!N

Үүний үр дүнд бид шинэчлэгдсэн үйлдлийн системтэй виртуал машинууд болон цаашдын ажилд зориулж урьдчилан суулгасан багцуудыг ашиглах боломжтой болно. Бүгд бэлэн!

Гэхдээ одоо байгаа дэд бүтэцтэй бол яах вэ?

3.1. Одоо байгаа дэд бүтэцтэй ажиллах Terraform

Энэ нь энгийн бөгөөд та импортын командыг ашиглан одоогийн виртуал машинууд болон тэдгээрийн vApp контейнеруудыг импортлох боломжтой.

vAPP нөөц болон виртуал машиныг тайлбарлая.

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>, хаана:

  • vApp - vApp нэр;

  • org — байгууллагын нэр;

  • org_vdc — виртуал мэдээллийн төвийн нэр.

Terraform ашиглан үүлэн дэд бүтцийг хэрхэн удирдах вэvAPP нөөцийн шинж чанарыг импортлож байна

VM нөөцийн шинж чанарыг дараах форматаар импортолъё. vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, Үүнд:

  • VM - VM нэр;

  • vApp - vApp нэр;

  • org — байгууллагын нэр;

  • orgvdc нь виртуал мэдээллийн төвийн нэр юм.

Импорт амжилттай боллоо

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.

Одоо бид шинэ импортын нөөцийг харж болно:

Импортын нөөц

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

}

}

Одоо бид мэдээж бэлэн байна - бид сүүлчийн цэгийг (одоо байгаа дэд бүтцэд импортлох) хийж дуусаад Terraform-тай ажиллах бүх гол санааг авч үзсэн. 

Энэхүү хэрэгсэл нь маш тохиромжтой болсон бөгөөд нэг үүлэн үйлчилгээ үзүүлэгчийн виртуал машинаас эхлээд сүлжээний бүрэлдэхүүн хэсгүүдийн нөөцийг тайлбарлах хүртэл дэд бүтцийг код болгон дүрслэх боломжийг олгодог.

Үүний зэрэгцээ хүрээлэн буй орчноос хараат бус байх нь орон нутгийн, үүлэн нөөцтэй ажиллах, тэр ч байтугай платформыг удирдах боломжтой болгодог. Хэрэв дэмжигдсэн платформ байхгүй бөгөөд та шинийг нэмэхийг хүсвэл өөрийн үйлчилгээ үзүүлэгчээ бичиж, ашиглаж болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх