Terraform yordamida bulutli infratuzilmani qanday boshqarish mumkin

Terraform yordamida bulutli infratuzilmani qanday boshqarish mumkin

Ushbu maqolada biz Terraform nimadan iboratligini ko'rib chiqamiz, shuningdek, asta-sekin o'z infratuzilmamizni ishga tushiramiz. VMware bilan bulutda β€” biz turli maqsadlar uchun uchta VM tayyorlaymiz: proksi-server, fayllarni saqlash va CMS.

Har bir narsa haqida batafsil va uch bosqichda:

1. Terraform - tavsifi, afzalliklari va tarkibiy qismlari

Terraform - kod yordamida virtual infratuzilmani qurish va boshqarish uchun IaC (Infrastructure-as-Code) vositasi.

Asbob bilan ishlashning bir qancha afzalliklarini qayd etdik:

  • Yangi ijarachilarni joylashtirish tezligi (maxsus virtual muhitlar). Odatda, yangi mijozlar qancha ko'p bo'lsa, texnik yordam xodimlari yangi resurslarni nashr qilish uchun shunchalik ko'p "klik" qilishlari kerak. Terraform yordamida foydalanuvchilar virtual mashina sozlamalarini (masalan, operatsion tizimni avtomatik ravishda o'chirish va virtual disk bo'limini oshirish) texnik yordam talab qilmasdan yoki mashinaning o'zini o'chirmasdan o'zgartirishi mumkin.

  • Faollashtirish rejasini darhol tekshirish yangi Tennant. Infratuzilma kodining tavsifidan foydalanib, biz darhol nima qo'shilishi va qanday tartibda bo'lishini, shuningdek, bu yoki boshqa virtual mashina yoki virtual mashinalarga ulangan virtual tarmoq qanday yakuniy holatda bo'lishini darhol tekshirishimiz mumkin.

  • Eng mashhur bulut platformalarini tavsiflash qobiliyati. Siz vositadan foydalanishingiz mumkin Amazon va Google Cloud dan IaaS, SaaS va PaaS yechimlari doirasida xizmatlarni taklif qiluvchi VMware vCloud Director asosidagi xususiy platformalarga.

  • Bir nechta bulutli provayderlarni boshqaring bulutli resurslarni yaratish, diagnostika qilish va boshqarish uchun yagona konfiguratsiyadan foydalanib, nosozliklarga chidamliligini yaxshilash uchun ular oβ€˜rtasida infratuzilmani taqsimlang.

  • Demo stendlarni yaratish uchun qulay foydalanish dasturiy ta'minotni sinab ko'rish va tuzatish uchun. Siz sinov bo'limi uchun stendlarni yaratishingiz va uzatishingiz, parallel ravishda turli muhitlarda dasturiy ta'minotni sinab ko'rishingiz va faqat bitta resurs yaratish rejasini yaratish orqali resurslarni bir zumda o'zgartirishingiz va o'chirishingiz mumkin.

"Terrarium" terraformasi

Biz asbobning afzalliklari haqida qisqacha gaplashdik, endi uni tarkibiy qismlarga ajratamiz

Provayderlar. 

Terraformda deyarli har qanday turdagi infratuzilma resurs sifatida taqdim etilishi mumkin. Resurslar va API platformasi o'rtasidagi aloqa provayder modullari tomonidan ta'minlanadi, bu sizga ma'lum bir platformada resurslarni yaratishga imkon beradi, masalan, Azure yoki VMware vCloud Director.

Loyiha doirasida siz turli platformalarda turli provayderlar bilan muloqot qilishingiz mumkin.

Resurslar (resurs tavsifi).

Resurslarning tavsifi virtual mashinalar yoki tarmoqlar kabi platforma komponentlarini boshqarish imkonini beradi. 

Siz VMware vCloud Director provayderi uchun resurs tavsifini o'zingiz yaratishingiz va vCloud Director-dan foydalanadigan har qanday xosting provayderi bilan resurslar yaratish uchun ushbu tavsifdan foydalanishingiz mumkin. Siz faqat autentifikatsiya parametrlarini va tarmoq ulanishi parametrlarini kerakli hosting provayderiga o'zgartirishingiz kerak

Provayderlar.

Ushbu komponent virtual mashinalarni yaratgandan so'ng operatsion tizimni dastlabki o'rnatish va texnik xizmat ko'rsatish bo'yicha operatsiyalarni bajarishga imkon beradi. Virtual mashina resursini yaratganingizdan so'ng, SSH orqali sozlash va ulanish, operatsion tizimni yangilash va skriptni yuklab olish va ishga tushirish uchun provayderlardan foydalanishingiz mumkin. 

Kirish va chiqish o'zgaruvchilari.

Kirish o'zgaruvchilari - har qanday blok turlari uchun kirish o'zgaruvchilari. 

Chiqish o'zgaruvchilari resurslarni yaratgandan so'ng qiymatlarni saqlashga imkon beradi va boshqa modullarda, masalan, Provisioners blokida kirish o'zgaruvchilari sifatida ishlatilishi mumkin.

Shtatlar.

Shtat fayllari provayder platformasi resurslari konfiguratsiyasi haqidagi ma'lumotlarni saqlaydi. Platforma birinchi marta yaratilganda, resurslar haqida hech qanday ma'lumot yo'q va har qanday operatsiyadan oldin Terraform holatni allaqachon tasvirlangan resurslarning haqiqiy infratuzilmasi bilan yangilaydi.

Shtatlarning asosiy maqsadi - platformani qayta-qayta yaratish va o'zgartirishga yo'l qo'ymaslik uchun qo'shilgan resurslar va ob'ektlar konfiguratsiyasini solishtirish uchun allaqachon yaratilgan resurslarning bir qator ob'ektlarini saqlash.

Odatiy bo'lib, davlat ma'lumotlari mahalliy terraform.tfstate faylida saqlanadi, ammo agar kerak bo'lsa, jamoaviy ish uchun masofaviy xotiradan foydalanish mumkin.

Shuningdek, siz Terraform yordamisiz yaratilgan boshqa resurslar bilan o'zaro ishlash uchun joriy platforma resurslarini davlatga import qilishingiz mumkin.  

2. Infratuzilmani yaratish

Komponentlar saralangan, endi Terraform yordamida biz asta-sekin uchta virtual mashinadan iborat infratuzilmani yaratamiz. Birinchisi nginx proksi-serveri o'rnatilgan, ikkinchisi Nextcloud asosidagi fayllarni saqlash va uchinchisi CMS Bitrix bilan.

Biz kod yozamiz va uni misolimizdan foydalanib bajaramiz VMware vCloud Director-da bulutlar. Bizning foydalanuvchilarimiz Tashkilot administratori huquqlariga ega hisob qaydnomasini olishadi. Agar siz boshqa VMware bulutida xuddi shunday huquqlarga ega hisob qaydnomasidan foydalansangiz, bizning misollarimizdan kodni takrorlashingiz mumkin. Bor!

Birinchidan, yangi loyihamiz uchun infratuzilmani tavsiflovchi fayllar joylashtiriladigan katalog yarataylik.

mkdir project01

Keyinchalik, biz infratuzilma komponentlarini tasvirlaymiz. Terraform fayllardagi tavsif asosida aloqalarni yaratadi va fayllarni qayta ishlaydi. Fayllarning o'zi tasvirlangan bloklarning maqsadiga qarab nomlanishi mumkin, masalan, network.tf - infratuzilma uchun tarmoq parametrlarini tavsiflaydi.

Infratuzilmamiz komponentlarini tavsiflash uchun biz quyidagi fayllarni yaratdik:

Fayllar ro'yxati.

main.tf - virtual muhit uchun parametrlarning tavsifi - virtual mashinalar, virtual konteynerlar;

network.tf - virtual tarmoq parametrlarining tavsifi va NAT va xavfsizlik devori qoidalari;

variables.tf - biz foydalanadigan o'zgaruvchilar ro'yxati;

vcd.tfvars - VMware vCloud Director moduli uchun loyiha o'zgaruvchan qiymatlari.

Terraform-dagi konfiguratsiya tili deklarativdir va bloklarning tartibi muhim emas, provayder bloklaridan tashqari, chunki bu blokda biz infratuzilmani tayyorlashda bajariladigan buyruqlarni tasvirlaymiz va ular tartibda bajariladi.

Blok tuzilishi.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Bloklarni tavsiflash uchun o'zining HCL (HashiCorp Configuration Language) dasturlash tilidan foydalaniladi, JSON yordamida infratuzilmani tasvirlash mumkin. Sintaksis haqida ko'proq bilib olishingiz mumkin ishlab chiquvchining veb-saytida o'qing.

Atrof-muhit o'zgaruvchilari konfiguratsiyasi, variables.tf va vcd.tfvars

Birinchidan, VMware vCloud Director moduli uchun barcha foydalanilgan o'zgaruvchilar ro'yxatini va ularning qiymatlarini tavsiflovchi ikkita fayl yarataylik. Birinchidan, variables.tf faylini yaratamiz.

variables.tf faylining mazmuni.

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

Biz provayderdan oladigan o'zgaruvchan qiymatlar.

  • vcd_org_user - tashkilot ma'muri huquqlariga ega foydalanuvchi nomi,

  • vcd_org_password β€” foydalanuvchi paroli,

  • vcd_org - tashkilot nomi,

  • vcd_org_vdc - virtual ma'lumotlar markazining nomi,

  • vcd_org_url - API URL manzili,

  • vcd_org_edge_name - virtual router nomi,

  • vcd_org_catalog - virtual mashina shablonlari bilan katalog nomi,

  • vcd_edge_external_ip - umumiy IP manzili,

  • vcd_edge_external_network - tashqi tarmoq nomi,

  • vcd_org_hdd_sp - HDD saqlash siyosatining nomi,

  • vcd_org_ssd_sp - SSD saqlash siyosatining nomi.

Va o'zgaruvchilarimizni kiriting:

  • vcd_edge_local_ip_nginx β€” NGINX bilan virtual mashinaning IP manzili,

  • vcd_edge_local_ip_bitrix - 1C bilan virtual mashinaning IP manzili: Bitrix,

  • vcd_edge_local_ip_nextcloud β€” Nextcloud bilan virtual mashinaning IP manzili.

Ikkinchi fayl bilan biz vcd.tfvars faylida VMware vCloud Director moduli uchun o'zgaruvchilarni yaratamiz va belgilaymiz: eslaylikki, bizning misolimizda biz foydalanamiz. shaxsiy bulutli mClouds, agar siz boshqa provayder bilan ishlasangiz, ular bilan qiymatlarni tekshiring. 

vcd.tfvars faylining mazmuni.

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"

Tarmoq konfiguratsiyasi, network.tf.

Atrof-muhit o'zgaruvchilari o'rnatildi, endi biz virtual mashinaga ulanish sxemasini o'rnatamiz - biz har bir virtual mashinaga shaxsiy IP-manzilni belgilaymiz va portlarni tashqi tarmoqqa "yo'naltirish" uchun Destination NAT-dan foydalanamiz. Boshqaruv portlariga kirishni cheklash uchun biz faqat IP manzilimizga kirishni o'rnatamiz.

Terraform yordamida bulutli infratuzilmani qanday boshqarish mumkinYaratilayotgan Terraform platformasi uchun tarmoq diagrammasi

Biz net_lan01 nomi bilan virtual tashkiliy tarmoq yaratamiz, standart shlyuz: 192.168.110.254, shuningdek, manzil maydoni: 192.168.110.0/24.

Biz virtual tarmoqni tasvirlaymiz.

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"

  }

}

Keling, virtual mashinalarga Internetga kirishga ruxsat beruvchi xavfsizlik devori qoidalarini yarataylik. Ushbu blokda bulutdagi barcha virtual resurslar Internetga kirish imkoniyatiga ega bo'ladi:

Biz Internetga VM kirish qoidalarini tasvirlaymiz.

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 blokini qayta ishlagandan so'ng, biz vcdnsxvfirewallrule blokini sozlashni davom ettiramiz., s pomoshchyu bog'liq. Biz ushbu parametrdan foydalanamiz, chunki ba'zi bog'liqliklar konfiguratsiyada bevosita tan olinishi mumkin.

Keyinchalik, biz tashqi tarmoqdan portlarga kirishga ruxsat beruvchi qoidalarni yaratamiz va serverlarga SSH orqali ulanish uchun IP manzilimizni ko'rsatamiz. Har qanday Internet foydalanuvchisi veb-serverdagi 80 va 443 portlariga, 90.1.15.1 IP-manzilga ega foydalanuvchi esa virtual serverlarning SSH portlariga kirish huquqiga ega.

Tashqi tarmoqdan portlarga kirishga ruxsat bering.

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]

}

Biz bulutli mahalliy tarmoqdan Internetga kirish uchun Source NAT qoidalarini yaratamiz:

Biz manba NAT qoidalarini tasvirlaymiz.

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]

}

Tarmoq blokining konfiguratsiyasini yakunlash uchun biz tashqi tarmoqdan xizmatlarga kirish uchun Destination NAT qoidalarini qo'shamiz:

Destination NAT qoidalarini qo'shish.

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 ostida SSH serveriga port tarjimasi uchun NAT qoidasini qo'shing.

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 bilan SSH serveriga port tarjimasi uchun NAT qoidasini qo'shing.

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 yordamida SSH serveriga port tarjimasi uchun NAT qoidasini qo'shing.

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 virtual muhit konfiguratsiyasi

Maqolaning boshida rejalashtirganimizdek, biz uchta virtual mashinani yaratamiz. Ular "Mehmonlarni moslashtirish" yordamida tayyorlanadi. Biz tarmoq parametrlarini biz ko'rsatgan sozlamalarga muvofiq o'rnatamiz va foydalanuvchi paroli avtomatik ravishda yaratiladi.

Keling, virtual mashinalar joylashgan vAppni va ularning konfiguratsiyasini tasvirlab beraylik.

Terraform yordamida bulutli infratuzilmani qanday boshqarish mumkinVirtual mashina konfiguratsiyasi

Keling, vApp konteynerini yarataylik. VApp va VM ni virtual tarmoqqa zudlik bilan ulashimiz uchun, shuningdek, depends_on parametrini qo'shamiz:

Konteyner yarating

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

}

Keling, tavsifi bilan virtual mashina yarataylik

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 tavsifidagi asosiy parametrlar:

  • nomi - virtual mashinaning nomi,

  • vappname - yangi VM qo'shiladigan vApp nomi,

  • katalog nomi / shablon nomi - katalog nomi va virtual mashina shablon nomi,

  • saqlash profili - standart saqlash siyosati.

Tarmoq bloki parametrlari:

  • turi - ulangan tarmoq turi,

  • nomi - VMni qaysi virtual tarmoqqa ulash kerak;

  • isprimary - asosiy tarmoq adapteri,

  • ipallocation_mode - MANUAL / DHCP / POOL manzillarini taqsimlash rejimi,

  • ip β€” virtual mashina uchun IP-manzil, biz uni qo'lda belgilaymiz.

override_template_disk bloki:

  • sizeinmb - virtual mashina uchun yuklash diskining hajmi

  • storage_profile β€” diskni saqlash siyosati

Nextcloud fayl xotirasi tavsifi bilan ikkinchi VM yarataylik

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 bo'limida biz virtual mashinaga ulangan yangi virtual diskni tasvirlaymiz.

Vcdvminternaldisk bloki uchun tushuntirishlar:

  • bustype - disk boshqaruvchisi turi

  • sizeinmb - disk hajmi

  • avtobus raqami / birlik raqami - adapterdagi ulanish joyi

  • storage_profile β€” diskni saqlash siyosati

Keling, Bitrix-dagi so'nggi VMni tasvirlab beraylik

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

}

}

OSni yangilash va qo'shimcha skriptlarni o'rnatish

Tarmoq tayyorlandi, virtual mashinalar tasvirlangan. Infratuzilmamizni import qilishdan oldin biz provayder bloklari yordamida va Ansible-dan foydalanmasdan dastlabki ta'minotni oldindan amalga oshirishimiz mumkin.

Keling, OSni qanday yangilashni va provayder bloki yordamida CMS Bitrix o'rnatish skriptini ishga tushirishni ko'rib chiqaylik.

Birinchidan, CentOS yangilash paketlarini o'rnatamiz.

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

}

}

}

Komponentlarni belgilash:

  • provayder "remote-exec" - masofaviy ta'minot blokini ulang

  • Ulanish blokida biz ulanish turi va parametrlarini tavsiflaymiz:

  • turi β€” protokol, bizning holatlarimizda SSH;

  • foydalanuvchi β€” foydalanuvchi nomi;

  • parol β€” foydalanuvchi paroli. Bizning holatda, tizim foydalanuvchisi uchun yaratilgan parolni saqlaydigan vcdvappvm.nginx.customization[0].admin_password parametriga ishora qilamiz.

  • xost β€” ulanish uchun tashqi IP-manzil;

  • port β€” avval DNAT sozlamalarida ko'rsatilgan ulanish porti;

  • inline - kiritiladigan buyruqlar ro'yxatini kiriting. Buyruqlar ushbu bo'limda ko'rsatilgan tartibda kiritiladi.

Misol tariqasida, 1C-Bitrix o'rnatish skriptini qo'shimcha ravishda bajaramiz. Skriptni bajarish natijasining chiqishi reja ishlayotgan vaqtda mavjud bo'ladi. Skriptni o'rnatish uchun avval biz blokni tasvirlaymiz:

Keling, 1C-Bitrix-ni o'rnatishni tasvirlab beraylik.

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"

]

}

Va biz darhol Bitrix yangilanishini tasvirlab beramiz.

1C-Bitrix provayderiga misol.

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"

]

}

}

Muhim! SELinux-ni oldindan o'chirmasangiz, skript ishlamasligi mumkin! Agar sizga bitrix-env.sh yordamida CMS 1C-Bitrix-ni o'rnatish va sozlash bo'yicha batafsil maqola kerak bo'lsa, oo mumkin. veb-saytimizdagi blog maqolamizdan foydalaning.

3. Infratuzilmani ishga tushirish

Terraform yordamida bulutli infratuzilmani qanday boshqarish mumkinModullar va plaginlarni ishga tushirish

Ish uchun biz oddiy "janoblar to'plami" dan foydalanamiz: Windows 10 operatsion tizimiga ega noutbuk va rasmiy veb-saytdagi tarqatish to'plami terraform.io. Buyruq yordamida paketni ochamiz va ishga tushiramiz: terraform.exe init

Hisoblash va tarmoq infratuzilmasini tavsiflab bo'lgach, biz konfiguratsiyamizni sinab ko'rish uchun rejalashtirishni boshlaymiz, u erda nima yaratilishini va bir-biriga qanday ulanishini ko'rishimiz mumkin.

  1. Buyruqni bajaring - terraform plan -var-file=vcd.tfvars.

  2. Biz natijaga erishamiz - Plan: 16 to add, 0 to change, 0 to destroy. Ya'ni, ushbu rejaga ko'ra, 16 ta manba yaratiladi.

  3. Biz rejani buyruq bo'yicha ishga tushiramiz - terraform.exe apply -var-file=vcd.tfvars.

Virtual mashinalar yaratiladi va keyin biz sanab o'tgan paketlar provayder bo'limida bajariladi - OT yangilanadi va CMS Bitrix o'rnatiladi.

Ulanish ma'lumotlarini qabul qilish

Rejani bajarganimizdan so'ng, biz serverlarga ulanish uchun matn shaklida ma'lumotlarni olishni xohlaymiz, buning uchun biz chiqish qismini quyidagicha formatlaymiz:

output "nginxpassword" {

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

}

Va quyidagi chiqish bizga yaratilgan virtual mashina uchun parolni aytadi:

Outputs: nginx_password = F#4u8!!N

Natijada, biz keyingi ishimiz uchun yangilangan operatsion tizim va oldindan o'rnatilgan paketlarga ega virtual mashinalarga kirish imkoniyatiga ega bo'lamiz. Hammasi tayyor!

Agar sizda allaqachon mavjud infratuzilma mavjud bo'lsa-chi?

3.1. Mavjud infratuzilma bilan ishlaydigan Terraform

Hammasi oddiy, import buyrug'i yordamida joriy virtual mashinalar va ularning vApp konteynerlarini import qilishingiz mumkin.

Keling, vAPP resursini va virtual mashinani tasvirlaylik.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Keyingi qadam formatdagi vApp resurslarining xususiyatlarini import qilishdir vcdvapp.<vApp> <org>.<orgvdc>.<vApp>qaerda:

  • vApp - vApp nomi;

  • org β€” tashkilot nomi;

  • org_vdc - virtual ma'lumotlar markazining nomi.

Terraform yordamida bulutli infratuzilmani qanday boshqarish mumkinvAPP resurs xususiyatlari import qilinmoqda

VM resurslarining xususiyatlarini quyidagi formatda import qilaylik: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, unda:

  • VM - VM nomi;

  • vApp - vApp nomi;

  • org β€” tashkilot nomi;

  • orgvdc - virtual ma'lumotlar markazining nomi.

Import muvaffaqiyatli bo'ldi

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.

Endi biz yangi import qilingan manbani ko'rib chiqishimiz mumkin:

Import qilingan resurs

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

}

}

Endi biz aniq tayyormiz - oxirgi nuqtani (mavjud infratuzilmaga import qilish) tugatdik va Terraform bilan ishlashning barcha asosiy nuqtalarini ko'rib chiqdik. 

Asbob juda qulay bo'lib chiqdi va sizning infratuzilmangizni bitta bulutli provayderning virtual mashinalaridan tortib tarmoq komponentlari resurslarini tavsiflashgacha kod sifatida tasvirlash imkonini beradi.

Shu bilan birga, atrof-muhitdan mustaqillik mahalliy, bulutli resurslar bilan ishlash va hatto platformani boshqarish imkonini beradi. Va agar qo'llab-quvvatlanadigan platforma bo'lmasa va siz yangisini qo'shmoqchi bo'lsangiz, o'zingizning provayderingizni yozib, undan foydalanishingiz mumkin.

Manba: www.habr.com

a Izoh qo'shish