Terraform менен булут инфраструктурасын кантип башкаруу керек

Terraform менен булут инфраструктурасын кантип башкаруу керек

Бул макалада биз Terraform эмнеден турарын карап чыгабыз, ошондой эле акырындык менен өзүбүздүн инфраструктурабызды ишке киргизебиз. булутта VMware менен — биз ар кандай максаттар үчүн үч VM даярдайбыз: прокси, файлдарды сактоо жана CMS.

Баары жөнүндө деталдуу жана үч этапта:

1. Terraform - сүрөттөлүшү, артыкчылыктары жана компоненттери

Terraform - бул кодду колдонуу менен виртуалдык инфраструктураны куруу жана башкаруу үчүн IaC (Инфраструктура-Код) куралы.

Биз курал менен иштөөдө бир нече артыкчылыктарды белгиледи:

  • Жаңы ижарачыларды жайылтуу ылдамдыгы (өзгөчө виртуалдык чөйрөлөр). Адатта, жаңы кардарлар канчалык көп болсо, техникалык колдоо кызматкерлери жаңы ресурстарды жарыялоо үчүн ошончолук көп "чыкылдатуу" керек. Terraform менен колдонуучулар виртуалдык машинанын жөндөөлөрүн өзгөртө алышат (мисалы, ОСти автоматтык түрдө өчүрүп, виртуалдык дисктин бөлүгүн көбөйтүү), техникалык колдоону талап кылбастан же машинанын өзүн өчүрө алышат.

  • Активдештирүү планын заматта текшерүү жаңы Теннант. Инфраструктуралык коддун сыпаттамасын колдонуу менен биз дароо эле эмне кошуларын жана кандай тартипте, ошондой эле тигил же бул виртуалдык машина же виртуалдык машиналарга туташуулары бар виртуалдык тармак кандай акыркы абалда болоорун текшере алабыз.

  • Эң популярдуу булут платформаларын сүрөттөө мүмкүнчүлүгү. Сиз куралды колдоно аласыз Amazon жана Google Булуттан IaaS, SaaS жана PaaS чечимдеринин алкагында кызматтарды сунуштаган VMware vCloud Директорунун негизиндеги жеке платформаларга чейин.

  • Бир нече булут провайдерлерин башкарыңыз жана булут ресурстарын түзүү, диагностикалоо жана башкаруу үчүн бирдиктүү конфигурацияны колдонуп, каталарга чыдамдуулукту жакшыртуу үчүн инфраструктураны алардын ортосунда бөлүштүрүңүз.

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

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

Биз куралдын артыкчылыктары жөнүндө кыскача сүйлөштүк, эми аны анын компоненттерине бөлүп көрөлү

Провайдерлер. 

Терраформда инфраструктуранын дээрлик бардык түрү ресурс катары көрсөтүлүшү мүмкүн. Ресурстар менен API платформасынын ортосундагы байланыш провайдердин модулдары тарабынан камсыз кылынат, алар белгилүү бир платформанын ичинде ресурстарды түзүүгө мүмкүндүк берет, мисалы, Azure же VMware vCloud Director.

Долбоордун алкагында сиз ар кандай платформаларда ар кандай провайдерлер менен баарлаша аласыз.

Ресурстар (ресурстун сүрөттөлүшү).

Ресурстардын сүрөттөлүшү виртуалдык машиналар же тармактар ​​сыяктуу платформа компоненттерин башкарууга мүмкүндүк берет. 

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

Провайдерлер.

Бул компонент виртуалдык машиналарды түзгөндөн кийин операциялык системаны баштапкы орнотуу жана тейлөө боюнча операцияларды аткарууга мүмкүндүк берет. Виртуалдык машина ресурсун түзгөндөн кийин, SSH аркылуу конфигурациялоо жана туташуу, операциялык системаны жаңыртуу жана скрипт жүктөп алуу жана иштетүү үчүн провайдерлерди колдоно аласыз. 

Киргизүү жана чыгаруу өзгөрмөлөрү.

Киргизүүчү өзгөрмөлөр - блоктордун ар кандай түрлөрү үчүн киргизүү өзгөрмөлөрү. 

Чыгуу өзгөрмөлөрү ресурстарды түзгөндөн кийин баалуулуктарды сактоого мүмкүндүк берет жана башка модулдарда, мисалы, Provisioners блогунда киргизүү өзгөрмөлөрү катары колдонулушу мүмкүн.

мамлекеттер.

Штат файлдары провайдер платформасынын ресурстарынын конфигурациясы жөнүндө маалыматты сактайт. Платформа биринчи жолу түзүлгөндө, ресурстар жөнүндө эч кандай маалымат жок жана кандайдыр бир операциядан мурун, Terraform абалды буга чейин сүрөттөлгөн ресурстардын реалдуу инфраструктурасы менен жаңылайт.

Мамлекеттердин негизги максаты - платформаны кайра-кайра түзүүгө жана өзгөртүүгө жол бербөө үчүн кошулган ресурстардын жана объекттердин конфигурациясын салыштыруу үчүн буга чейин түзүлгөн ресурстардын бир тобун сактап калуу.

Демейки боюнча, мамлекеттик маалымат жергиликтүү terraform.tfstate файлында сакталат, бирок керек болсо, командалык иш үчүн алыскы сактагычты колдонууга болот.

Сиз ошондой эле Terraformдун жардамысыз түзүлгөн башка ресурстар менен өз ара аракеттенүү үчүн учурдагы платформа ресурстарын мамлекетке импорттой аласыз.  

2. Инфраструктураны түзүү

Компоненттер ирээтке келтирилди, азыр Terraform аркылуу биз акырындык менен үч виртуалдык машина менен инфраструктураны түзөбүз. Биринчиси nginx прокси сервери менен орнотулган, экинчиси Nextcloud негизиндеги файл сактагычы жана үчүнчүсү CMS Bitrix менен.

Биз кодду жазып, аны биздин мисал аркылуу аткарабыз VMware vCloud директорундагы булуттар. Биздин колдонуучулар Уюмдун администраторунун укуктары менен каттоо эсебин алышат. Эгер сиз башка VMware булутунда ушундай укуктарга ээ каттоо эсебин колдонсоңуз, кодду биздин мисалдарыбыздан кайра чыгара аласыз. Go!

Биринчиден, жаңы долбоорбуз үчүн инфраструктураны сүрөттөгөн файлдар жайгаштырыла турган каталог түзөлү.

mkdir project01

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

Биздин инфраструктуранын компоненттерин сүрөттөө үчүн биз төмөнкү файлдарды түздүк:

Файлдардын тизмеси.

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

network.tf - виртуалдык тармак параметрлеринин жана NAT жана Firewall эрежелеринин сүрөттөлүшү;

variables.tf - биз колдонгон өзгөрмөлөрдүн тизмеси;

vcd.tfvars - VMware vCloud Director модулу үчүн долбоордун өзгөрмө маанилери.

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

Блок түзүмү.

<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 - 1C менен виртуалдык машинанын 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 дарегин дайындайбыз жана портторду тышкы тармакка "алга" үчүн Destination 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 портторуна, ал эми IP дареги 90.1.15.1 болгон колдонуучу виртуалдык серверлердин 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]

}

Биз булуттун локалдык тармагынан Интернетке кирүү үчүн Source 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ти виртуалдык тармакка дароо туташтыруу үчүн, биз ошондой эле depends_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 аты,

  • каталог аты / шаблон аты - каталогдун аты жана виртуалдык машинанын шаблон аты,

  • сактагыч профили - демейки сактагыч саясаты.

Тармак блогунун параметрлери:

  • түрү — туташкан тармактын түрү,

  • аты — VM туташтырылган виртуалдык тармак,

  • isprimary - негизги тармак адаптери,

  • ipallocation_mode — MANUAL / DHCP / POOL дарегин бөлүштүрүү режими,

  • ip — виртуалдык машинанын IP дареги, биз аны кол менен көрсөтөбүз.

override_template_disk блогу:

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

}

}

}

Компоненттерди белгилөө:

  • провайдер "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 орнотуу жана конфигурациялоо боюнча кеңири макала керек болсо, анда сиз сайтында биздин блог макаланы колдонуу.

3. Инфраструктураны инициализациялоо

Terraform менен булут инфраструктурасын кантип башкаруу керекМодулдарды жана плагиндерди баштоо

Жумуш үчүн биз жөнөкөй "мырзалардын комплектин" колдонобуз: Windows 10 OS менен ноутбук жана расмий веб-сайттан бөлүштүрүү комплекти 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 менен иштөөнүн бардык негизги пункттарын карап чыктык. 

Курал абдан ыңгайлуу болуп чыкты жана инфраструктураңызды код катары сүрөттөөгө мүмкүндүк берет, бир булут провайдеринин виртуалдык машиналарынан тартып тармак компоненттеринин ресурстарын сыпаттоого чейин.

Ошол эле учурда, айлана-чөйрөгө көз карандысыздык жергиликтүү, булут ресурстары менен иштөөгө, ал тургай, платформаны башкарууга мүмкүндүк берет. Ал эми колдоого алынган платформа жок болсо жана жаңысын кошкуңуз келсе, өзүңүздүн провайдериңизди жазып, аны колдоно аласыз.

Source: www.habr.com

Комментарий кошуу