Како управљати инфраструктуром у облаку помоћу Терраформа

Како управљати инфраструктуром у облаку помоћу Терраформа

У овом чланку ћемо погледати од чега се састоји Терраформ, а такође ћемо постепено покренути сопствену инфраструктуру у облаку са ВМваре-ом — припремићемо три ВМ-а за различите намене: прокси, складиште датотека и ЦМС.

О свему детаљно иу три фазе:

1. Терраформ - опис, предности и компоненте

Терраформ је ИаЦ (Инфраструцтуре-ас-Цоде) алат за изградњу и управљање виртуелном инфраструктуром помоћу кода.

Приметили смо неколико предности у раду са алатом:

  • Брзина распоређивања нових закупаца (прилагођена виртуелна окружења). Типично, што је више нових клијената, то више „кликова“ особље техничке подршке треба да направи да би објавило нове ресурсе. Уз Терраформ, корисници могу да мењају подешавања виртуелне машине (на пример, аутоматско гашење оперативног система и повећање партиције виртуелног диска) без потребе за техничком подршком или гашењем саме машине.

  • Тренутна верификација плана активације нови Теннант. Користећи опис инфраструктурног кода, можемо одмах да проверимо шта ће бити додато и којим редоследом, као и у каквом ће коначном стању бити ова или она виртуелна машина или виртуелна мрежа са конекцијама на виртуелне машине.

  • Способност описивања најпопуларнијих платформи у облаку. Можете користити алат од Амазона и Гоогле Цлоуд-а, до приватних платформи заснованих на ВМваре вЦлоуд Дирецтор-у, нудећи услуге у оквиру ИааС, СааС и ПааС решења.

  • Управљајте више добављача облака и дистрибуирају инфраструктуру између њих како би се побољшала толеранција грешака, користећи једну конфигурацију за креирање, дијагностику и управљање ресурсима у облаку.

  • Погодна употреба за креирање демо штандова за тестирање софтвера и отклањање грешака. Можете креирати и преносити штандове за одељење за тестирање, паралелно тестирати софтвер у различитим окружењима и тренутно мењати и брисати ресурсе креирањем само једног плана изградње ресурса

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

Укратко смо разговарали о предностима алата, а сада га поделимо на његове компоненте

Провајдери. 

У Терраформу, скоро сваки тип инфраструктуре може бити представљен као ресурс. Везу између ресурса и АПИ платформе обезбеђују модули добављача, који вам омогућавају да креирате ресурсе у оквиру одређене платформе, на пример, Азуре или ВМваре вЦлоуд Дирецтор.

Као део пројекта, можете комуницирати са различитим провајдерима на различитим платформама.

Ресурси (опис ресурса).

Опис ресурса вам омогућава да управљате компонентама платформе, као што су виртуелне машине или мреже. 

Можете сами да креирате опис ресурса за добављача ВМваре вЦлоуд Дирецтор и користите овај опис за креирање ресурса код било ког хостинг провајдера који користи вЦлоуд Дирецтор. Потребно је само да промените параметре аутентификације и параметре мрежне везе на потребног хостинг провајдера

Провисионерс.

Ова компонента омогућава извођење операција за почетну инсталацију и одржавање оперативног система након креирања виртуелних машина. Када креирате ресурс виртуелне машине, можете да користите провајдере за конфигурисање и повезивање преко ССХ-а, ажурирање оперативног система и преузимање и покретање скрипте. 

Улазне и Излазне варијабле.

Улазне варијабле - улазне променљиве за било који тип блока. 

Излазне променљиве вам омогућавају да сачувате вредности након креирања ресурса и могу се користити као улазне променљиве у другим модулима, на пример у блоку Провисионерс.

државе.

Датотеке стања чувају информације о конфигурацији ресурса платформе добављача. Када се платформа први пут креира, нема информација о ресурсима и пре било какве операције, Терраформ ажурира стање са стварном инфраструктуром ресурса који су већ описани.

Главна сврха стања је да сачува гомилу објеката већ креираних ресурса ради упоређивања конфигурације додатих ресурса и објеката како би се избегло поновљено креирање и промене на платформи.

Подразумевано, информације о стању се чувају у локалној датотеци терраформ.тфстате, али ако је потребно, могуће је користити удаљено складиште за тимски рад.

Такође можете да увезете тренутне ресурсе платформе у стање ради даље интеракције са другим ресурсима који су заузврат креирани без помоћи Терраформ-а.  

2. Стварање инфраструктуре

Компоненте су сређене, сада ћемо користећи Терраформ постепено креирати инфраструктуру са три виртуелне машине. Први са инсталираним нгинк проки сервером, други са складиштем датотека заснованим на Нектцлоуд-у и трећи са ЦМС Битрик-ом.

Написаћемо код и извршити га користећи наш пример облака на ВМваре вЦлоуд Дирецтор. Наши корисници добијају налог са правима администратора организације. Ако користите налог са истим правима у другом ВМваре облаку, можете да репродукујете код из наших примера. Иди!

Прво, направимо директоријум за наш нови пројекат у који ће бити смештени фајлови који описују инфраструктуру.

mkdir project01

Затим описујемо компоненте инфраструктуре. Терраформ креира односе и обрађује датотеке на основу описа у датотекама. Саме датотеке се могу именовати на основу сврхе блокова који се описују, на пример нетворк.тф - описује мрежне параметре за инфраструктуру.

Да бисмо описали компоненте наше инфраструктуре, направили смо следеће датотеке:

Листа датотека.

маин.тф - опис параметара за виртуелно окружење - виртуелне машине, виртуелни контејнери;

нетворк.тф - опис параметара виртуелне мреже и правила НАТ-а и заштитног зида;

варијабли.тф - листа променљивих које користимо;

вцд.тфварс - вредности променљивих пројекта за модул ВМваре вЦлоуд Дирецтор.

Језик конфигурације у Терраформу је декларативни и редослед блокова није битан, осим блокова за провизију, јер у овом блоку описујемо команде које треба извршити приликом припреме инфраструктуре и оне ће се извршавати по реду.

Блок структура.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

За описивање блокова користи се сопствени програмски језик ХЦЛ (ХасхиЦорп Цонфигуратион Лангуаге), а инфраструктуру је могуће описати користећи ЈСОН. Можете сазнати више о синтакси прочитајте на веб локацији програмера.

Конфигурација променљиве окружења, променљиве.тф и вцд.тфварс

Прво, направимо две датотеке које описују листу свих коришћених променљивих и њихове вредности за ВМваре вЦлоуд Дирецтор модул. Прво, направимо датотеку варијабли.тф.

Садржај датотеке варијабли.тф.

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

Променљиве вредности које добијамо од провајдера.

  • вцд_орг_усер — корисничко име са правима администратора организације,

  • вцд_орг_пассворд — корисничка лозинка,

  • вцд_орг — назив организације,

  • вцд_орг_вдц — назив виртуелног дата центра,

  • вцд_орг_урл - АПИ УРЛ,

  • вцд_орг_едге_наме — име виртуелног рутера,

  • вцд_орг_цаталог — име директоријума са шаблонима виртуелне машине,

  • вцд_едге_ектернал_ип — јавна ИП адреса,

  • вцд_едге_ектернал_нетворк — назив спољне мреже,

  • вцд_орг_хдд_сп — назив политике складиштења чврстог диска,

  • вцд_орг_ссд_сп — назив ССД политике складиштења.

И унесите наше променљиве:

  • вцд_едге_лоцал_ип_нгинк — ИП адреса виртуелне машине са НГИНКС-ом,

  • вцд_едге_лоцал_ип_битрик - ИП адреса виртуелне машине са 1Ц: Битрикс,

  • вцд_едге_лоцал_ип_нектцлоуд — ИП адреса виртуелне машине са Нектцлоуд-ом.

Са другом датотеком креирамо и наводимо променљиве за ВМваре вЦлоуд Дирецтор модул у датотеци вцд.тфварс: Подсетимо се да у нашем примеру користимо сопствени облак мЦлоудс, ако радите са другим провајдером, проверите вредности код њих. 

Садржај датотеке вцд.тфварс.

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"

Мрежна конфигурација, нетворк.тф.

Променљиве окружења су постављене, сада ћемо поставити шему повезивања виртуелне машине - доделићемо приватну ИП адресу свакој виртуелној машини и користити одредишни НАТ да „проследимо“ портове на спољну мрежу. Да бисмо ограничили приступ портовима за управљање, поставићемо приступ само за нашу ИП адресу.

Како управљати инфраструктуром у облаку помоћу ТерраформаМрежни дијаграм за платформу Терраформ која се креира

Креирамо виртуелну организациону мрежу са именом нет_лан01, подразумеваним мрежним пролазом: 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"

  }

}

Хајде да направимо правила заштитног зида која омогућавају виртуелним машинама приступ Интернету. У оквиру овог блока, сви виртуелни ресурси у облаку ће имати приступ Интернету:

Описујемо правила за ВМ приступ Интернету.

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]

}

Након што смо успоставили зависност да након обраде блока вцднетворкроутед.нет настављамо са конфигурисањем блока вцднсквфиреваллруле, с помосьу зависи од. Користимо ову опцију јер неке зависности могу бити препознате имплицитно у конфигурацији.

Затим ћемо креирати правила која дозвољавају приступ портовима са спољне мреже и назначити нашу ИП адресу за повезивање преко ССХ-а на сервере. Сваки корисник Интернета има приступ портовима 80 и 443 на веб серверу, а корисник са ИП адресом 90.1.15.1 има приступ ССХ портовима виртуелних сервера.

Дозволите приступ портовима са спољне мреже.

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]

}

Креирамо изворна НАТ правила за приступ Интернету са локалне мреже у облаку:

Описујемо изворна НАТ правила.

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]

}

И да бисмо завршили конфигурацију мрежног блока, додајемо одредишна НАТ правила за приступ услугама са спољне мреже:

Додавање одредишних НАТ правила.

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]

}

Додајте НАТ правило за превод порта на ССХ сервер под Нгинк-ом.

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]

}

Додајте НАТ правило за превођење портова на ССХ сервер са 1Ц-Битрикс-ом.

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]

}

Додајте НАТ правило за превод порта на ССХ сервер помоћу Нектцлоуд-а.

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]

}

Маин.тф конфигурација виртуелног окружења

Као што смо планирали на почетку чланка, направићемо три виртуелне машине. Они ће бити припремљени помоћу „Прилагођавања гостију“. Подесићемо мрежне параметре према подешавањима која смо навели, а корисничка лозинка ће бити генерисана аутоматски.

Хајде да опишемо вАпп у којем ће се налазити виртуелне машине и њихову конфигурацију.

Како управљати инфраструктуром у облаку помоћу ТерраформаКонфигурација виртуелне машине

Хајде да направимо вАпп контејнер. Да бисмо одмах могли да повежемо вАпп и ВМ са виртуелном мрежом, додајемо и параметар депенд_он:

Направите контејнер

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

}

}

Главни параметри у опису ВМ:

  • име — назив виртуелне машине,

  • ваппнаме - назив вАпп-а у који треба додати нови ВМ,

  • цаталогнаме / темплатенаме - име каталога и назив шаблона виртуелне машине,

  • сторагепрофиле - подразумевана политика складиштења.

Параметри мрежног блока:

  • тип — тип повезане мреже,

  • име — на коју виртуелну мрежу повезати ВМ,

  • испримари - примарни мрежни адаптер,

  • ипаллоцатион_моде — РУЧНИ / ДХЦП / ПООЛ режим доделе адресе,

  • ип — ИП адреса виртуелне машине, одредићемо је ручно.

оверриде_темплате_диск блок:

  • сизеинмб — величина диска за покретање виртуелне машине

  • стораге_профиле — политика складиштења за диск

Хајде да направимо други ВМ са описом складишта датотека Нектцлоуд

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 ]

}

У одељку вцдвминтернал_диск ћемо описати нови виртуелни диск који је повезан са виртуелном машином.

Објашњења за блок вцдвминтерналдиск:

  • бустипе - тип контролера диска

  • сизеинмб — величина диска

  • буснумбер / унитнумбер - локација везе у адаптеру

  • стораге_профиле — политика складиштења за диск

Хајде да опишемо најновији ВМ на Битриксу

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

}

}

Ажурирање ОС-а и инсталирање додатних скрипти

Мрежа је припремљена, виртуелне машине су описане. Пре него што увеземо нашу инфраструктуру, можемо унапред да извршимо почетно обезбеђивање користећи блокове за провизију и без коришћења Ансибле-а.

Хајде да погледамо како да ажурирате ОС и покренете ЦМС Битрик инсталациони скрипт користећи блок за провизију.

Прво, хајде да инсталирамо ЦентОС пакете ажурирања.

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

}

}

}

Ознака компоненти:

  • провидер “ремоте-екец” - повежите блок за даљинско обезбеђивање

  • У блоку везе описујемо тип и параметре за везу:

  • тип — протокол, у нашем случају ССХ;

  • корисник — корисничко име;

  • лозинка — корисничка лозинка. У нашем случају указујемо на параметар вцдваппвм.нгинк.цустомизатион[0].админ_пассворд, који чува генерисану лозинку за корисника система.

  • хост — спољна ИП адреса за повезивање;

  • порт — порт за конекцију, који је претходно био наведен у подешавањима ДНАТ-а;

  • инлине - листа списак команди које ће бити унете. Команде ће бити унете по редоследу како је наведено у овом одељку.

Као пример, додатно извршимо скрипту за инсталацију 1Ц-Битрикс. Излаз резултата извршења скрипте биће доступан док је план покренут. Да бисте инсталирали скрипту, прво описујемо блок:

Хајде да опишемо инсталацију 1Ц-Битрикса.

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"

]

}

И одмах ћемо описати ажурирање Битрикса.

Пример обезбеђивања 1Ц-Битрикса.

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"

]

}

}

Важно! Скрипта можда неће радити ако не онемогућите СЕЛинук унапред! Ако вам је потребан детаљан чланак о инсталирању и конфигурисању ЦМС 1Ц-Битрик користећи битрик-енв.сх, оо можете користите наш блог чланак на веб локацији.

3. Иницијализација инфраструктуре

Како управљати инфраструктуром у облаку помоћу ТерраформаИницијализација модула и додатака

За посао користимо једноставан „џентлменски комплет“: лаптоп са оперативним системом Виндовс 10 и дистрибутивни комплет са званичног сајта терраформ.ио. Хајде да распакујемо и иницијализујемо помоћу команде: 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.

Виртуелне машине ће бити креиране, а затим ће пакети које смо навели бити извршени у оквиру одељка за провајдере – ОС ће бити ажуриран и ЦМС Битрик ће бити инсталиран.

Пријем података о вези

Након извршења плана, желимо да добијемо податке у текстуалном облику за повезивање са серверима, за то ћемо форматирати излазну секцију на следећи начин:

output "nginxpassword" {

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

}

И следећи излаз нам говори лозинку за креирану виртуелну машину:

Outputs: nginx_password = F#4u8!!N

Као резултат, добијамо приступ виртуелним машинама са ажурираним оперативним системом и унапред инсталираним пакетима за наш даљи рад. Све је спремно!

Али шта ако већ имате постојећу инфраструктуру?

3.1. Радна Терраформа са постојећом инфраструктуром

Једноставно је, можете да увезете тренутне виртуелне машине и њихове вАпп контејнере користећи команду импорт.

Хајде да опишемо вАПП ресурс и виртуелну машину.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Следећи корак је увоз својстава вАпп ресурса у формату vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, где:

  • вАпп - назив вАпп;

  • орг — назив организације;

  • орг_вдц — назив виртуелног центра података.

Како управљати инфраструктуром у облаку помоћу ТерраформаУвоз вАПП својстава ресурса

Хајде да увеземо својства ВМ ресурса у формату: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, у којима:

  • ВМ - име ВМ;

  • вАпп - назив вАпп;

  • орг — назив организације;

  • оргвдц је назив виртуелног центра података.

Увоз је био успешан

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"

}

}

Сада смо дефинитивно спремни – завршили смо са последњом тачком (увозом у постојећу инфраструктуру) и размотрили смо све главне тачке рада са Терраформом. 

Алат се показао веома погодним и омогућава вам да своју инфраструктуру опишете као код, почевши од виртуелних машина једног провајдера у облаку до описивања ресурса мрежних компоненти.

Истовремено, независност од окружења омогућава рад са локалним ресурсима, ресурсима у облаку, па чак и управљање платформом. А ако не постоји подржана платформа и желите да додате нову, можете написати свог провајдера и користити га.

Извор: ввв.хабр.цом

Додај коментар