Бул макалада биз Terraform эмнеден турарын карап чыгабыз, ошондой эле акырындык менен өзүбүздүн инфраструктурабызды ишке киргизебиз.
Баары жөнүндө деталдуу жана үч этапта:
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 менен.
Биз кодду жазып, аны биздин мисал аркылуу аткарабыз
Биринчиден, жаңы долбоорбуз үчүн инфраструктураны сүрөттөгөн файлдар жайгаштырыла турган каталог түзөлү.
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 модулу үчүн өзгөрмөлөрдү түзөбүз жана аныктайбыз: Биздин мисалда биз колдонгонубузду эстейли.
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 платформасынын тармак диаграммасы түзүлүүдө
Биз виртуалдык уюштуруу тармагын түзөбүз, аталышы 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 программасын жана алардын конфигурациясын сүрөттөп көрөлү.
Виртуалдык машина конфигурациясы
Келиңиз, 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. Инфраструктураны инициализациялоо
Модулдарды жана плагиндерди баштоо
Жумуш үчүн биз жөнөкөй "мырзалардын комплектин" колдонобуз: Windows 10 OS менен ноутбук жана расмий веб-сайттан бөлүштүрүү комплекти terraform.exe init
Эсептөө жана тармактык инфраструктураны сүрөттөгөндөн кийин, биз конфигурациябызды сынап көрүү үчүн пландаштырууну баштайбыз, анда эмне түзүлөөрүн жана анын бири-бирине кантип туташа турганын көрө алабыз.
-
Буйрукту аткарыңыз
- terraform plan -var-file=vcd.tfvars
. -
Биз жыйынтык алабыз
- Plan: 16 to add, 0 to change, 0 to destroy.
Башкача айтканда, бул план боюнча 16 ресурс түзүлөт. -
Биз планды буйрук боюнча ишке киргизебиз
- 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 — виртуалдык маалымат борборунун аталышы.
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