Terraform ilə bulud infrastrukturunu necə idarə etmək olar

Terraform ilə bulud infrastrukturunu necə idarə etmək olar

Bu yazıda biz Terraformun nədən ibarət olduğuna baxacağıq, həmçinin tədricən öz infrastrukturumuzu işə salacağıq. VMware ilə buludda — müxtəlif məqsədlər üçün üç VM hazırlayacağıq: proxy, fayl saxlama və CMS.

Hər şey haqqında ətraflı və üç mərhələdə:

1. Terraform - təsviri, üstünlükləri və komponentləri

Terraform koddan istifadə edərək virtual infrastrukturun qurulması və idarə edilməsi üçün IaC (Infrastructure-as-Code) alətidir.

Alətlə işləməkdə bir sıra üstünlükləri qeyd etdik:

  • Yeni kirayəçilərin yerləşdirmə sürəti (xüsusi virtual mühitlər). Tipik olaraq, nə qədər çox yeni müştərilər varsa, texniki dəstək işçiləri yeni resursları dərc etmək üçün bir o qədər çox “kliklər” etməlidirlər. Terraform ilə istifadəçilər texniki dəstək tələb etmədən və ya maşının özünü söndürmədən virtual maşının parametrlərini dəyişə bilərlər (məsələn, OS-ni avtomatik bağlamaq və virtual disk bölməsini artırmaq).

  • Aktivləşdirmə planının dərhal yoxlanılması yeni Tennant. İnfrastruktur kodunun təsvirindən istifadə edərək, biz dərhal nəyin əlavə olunacağını və hansı ardıcıllıqla, eləcə də bu və ya digər virtual maşının və ya virtual maşınlara qoşulan virtual şəbəkənin hansı son vəziyyətdə olacağını yoxlaya bilərik.

  • Ən populyar bulud platformalarını təsvir etmək bacarığı. Alətdən istifadə edə bilərsiniz Amazon və Google Cloud-dan IaaS, SaaS və PaaS həlləri daxilində xidmətlər təklif edən VMware vCloud Director əsasında özəl platformalara qədər.

  • Çoxlu bulud provayderlərini idarə edin bulud resurslarını yaratmaq, diaqnostika etmək və idarə etmək üçün vahid konfiqurasiyadan istifadə edərək xətaya dözümlülüyünü yaxşılaşdırmaq üçün infrastrukturu onlar arasında paylayın.

  • Demo stendlər yaratmaq üçün rahat istifadə proqram təminatının yoxlanılması və sazlanması üçün. Siz sınaq şöbəsi üçün stendlər yarada və köçürə, paralel olaraq müxtəlif mühitlərdə proqram təminatını sınaqdan keçirə və yalnız bir resurs qurma planı yaratmaqla resursları dərhal dəyişdirə və silə bilərsiniz.

"Terrarium" Terraform

Alətin üstünlükləri haqqında qısaca danışdıq, indi onu komponentlərinə ayıraq

Provayderlər. 

Terraformda, demək olar ki, hər cür infrastruktur resurs kimi təqdim edilə bilər. Resurslar və API platforması arasında əlaqə xüsusi platforma, məsələn, Azure və ya VMware vCloud Director daxilində resurslar yaratmağa imkan verən provayder modulları tərəfindən təmin edilir.

Layihənin bir hissəsi olaraq, müxtəlif platformalarda müxtəlif provayderlərlə qarşılıqlı əlaqə qura bilərsiniz.

Resurslar (resurs təsviri).

Resursların təsviri virtual maşınlar və ya şəbəkələr kimi platforma komponentlərini idarə etməyə imkan verir. 

Siz VMware vCloud Director provayderi üçün resurs təsvirini özünüz yarada və vCloud Director-dan istifadə edən hər hansı hosting provayderi ilə resurslar yaratmaq üçün bu təsvirdən istifadə edə bilərsiniz. Siz yalnız autentifikasiya parametrlərini və şəbəkə bağlantısı parametrlərini tələb olunan hosting provayderinə dəyişdirməlisiniz

Təminatçılar.

Bu komponent virtual maşınlar yaratdıqdan sonra əməliyyat sisteminin ilkin quraşdırılması və saxlanması üçün əməliyyatları yerinə yetirməyə imkan verir. Virtual maşın resursu yaratdıqdan sonra SSH vasitəsilə konfiqurasiya etmək və qoşulmaq, əməliyyat sistemini yeniləmək və skripti yükləmək və işə salmaq üçün təminatçılardan istifadə edə bilərsiniz. 

Giriş və Çıxış dəyişənləri.

Giriş dəyişənləri - istənilən növ bloklar üçün giriş dəyişənləri. 

Çıxış dəyişənləri resurs yaratdıqdan sonra dəyərləri saxlamağa imkan verir və digər modullarda, məsələn, Təminatçılar blokunda giriş dəyişənləri kimi istifadə edilə bilər.

dövlətlər.

Dövlət faylları provayder platforması resurslarının konfiqurasiyası haqqında məlumat saxlayır. Platforma ilk dəfə yaradıldıqda, resurslar haqqında heç bir məlumat yoxdur və hər hansı bir əməliyyatdan əvvəl Terraform vəziyyəti artıq təsvir edilmiş resursların real infrastrukturu ilə yeniləyir.

Dövlətlərin əsas məqsədi platformada təkrar yaratma və dəyişikliklərin qarşısını almaq üçün əlavə resursların və obyektlərin konfiqurasiyasını müqayisə etmək üçün artıq yaradılmış resursların bir dəstə obyektini saxlamaqdır.

Varsayılan olaraq, dövlət məlumatları yerli terraform.tfstate faylında saxlanılır, lakin zəruri hallarda komanda işi üçün uzaq yaddaşdan istifadə etmək mümkündür.

Siz həmçinin Terraformun köməyi olmadan yaradılmış digər resurslarla daha da qarşılıqlı əlaqə yaratmaq üçün cari platforma resurslarını dövlətə idxal edə bilərsiniz.  

2. İnfrastrukturun yaradılması

Komponentlər sıralanıb, indi Terraform-dan istifadə edərək tədricən üç virtual maşından ibarət infrastruktur yaradacağıq. Birincisi quraşdırılmış nginx proksi serveri, ikincisi Nextcloud əsasında fayl yaddaşı, üçüncüsü isə CMS Bitrix ilə.

Kod yazıb nümunəmizdən istifadə edərək onu icra edəcəyik VMware vCloud Director-də buludlar. İstifadəçilərimiz Təşkilat Administratoru hüquqları ilə hesab alırlar. Əgər başqa VMware buludunda eyni hüquqlara malik hesabdan istifadə etsəniz, kodu nümunələrimizdən təkrar edə bilərsiniz. Get!

Əvvəlcə yeni layihəmiz üçün infrastrukturu təsvir edən faylların yerləşdiriləcəyi kataloq yaradaq.

mkdir project01

Sonra, infrastruktur komponentlərini təsvir edirik. Terraform fayllardakı təsvirə əsasən əlaqələr yaradır və faylları emal edir. Faylların özləri təsvir olunan blokların məqsədinə əsasən adlandırıla bilər, məsələn, network.tf - infrastruktur üçün şəbəkə parametrlərini təsvir edir.

İnfrastrukturumuzun komponentlərini təsvir etmək üçün biz aşağıdakı faylları yaratdıq:

Faylların siyahısı.

main.tf - virtual mühit üçün parametrlərin təsviri - virtual maşınlar, virtual konteynerlər;

network.tf - virtual şəbəkə parametrlərinin və NAT və Firewall qaydalarının təsviri;

variables.tf - istifadə etdiyimiz dəyişənlərin siyahısı;

vcd.tfvars - VMware vCloud Director modulu üçün layihə dəyişən dəyərləri.

Terraform-da konfiqurasiya dili deklarativdir və provayder blokları istisna olmaqla, blokların sırasının əhəmiyyəti yoxdur, çünki bu blokda biz infrastrukturu hazırlayarkən yerinə yetiriləcək əmrləri təsvir edirik və onlar ardıcıllıqla yerinə yetiriləcək.

Blok quruluşu.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Blokları təsvir etmək üçün onun öz proqramlaşdırma dili HCL (HashiCorp Konfiqurasiya Dili) istifadə olunur, JSON istifadə edərək infrastrukturu təsvir etmək mümkündür. Sintaksis haqqında daha çox məlumat əldə edə bilərsiniz geliştiricinin saytında oxuyun.

Ətraf mühitin dəyişənlərinin konfiqurasiyası, dəyişənlər.tf və vcd.tfvarları

Əvvəlcə VMware vCloud Director modulu üçün istifadə olunan bütün dəyişənlərin siyahısını və onların dəyərlərini təsvir edən iki fayl yaradaq. Əvvəlcə variables.tf faylını yaradaq.

variables.tf faylının məzmunu.

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

Provayderdən aldığımız dəyişən dəyərlər.

  • vcd_org_user — Təşkilat Administrator hüquqları ilə istifadəçi adı,

  • vcd_org_password — istifadəçi parolu,

  • vcd_org — təşkilatın adı,

  • vcd_org_vdc — virtual məlumat mərkəzinin adı,

  • vcd_org_url - API URL,

  • vcd_org_edge_name — virtual marşrutlaşdırıcının adı,

  • vcd_org_catalog — virtual maşın şablonları olan qovluğun adı,

  • vcd_edge_external_ip — ictimai IP ünvanı,

  • vcd_edge_external_network — xarici şəbəkənin adı,

  • vcd_org_hdd_sp — HDD saxlama siyasətinin adı,

  • vcd_org_ssd_sp — SSD yaddaş siyasətinin adı.

Və dəyişənlərimizi daxil edin:

  • vcd_edge_local_ip_nginx — NGINX ilə virtual maşının IP ünvanı,

  • vcd_edge_local_ip_bitrix - 1C ilə virtual maşının IP ünvanı: Bitrix,

  • vcd_edge_local_ip_nextcloud — Nextcloud ilə virtual maşının IP ünvanı.

İkinci fayl ilə biz vcd.tfvars faylında VMware vCloud Director modulu üçün dəyişənlər yaradırıq və müəyyən edirik: Xatırlayaq ki, nümunəmizdə istifadə edirik. öz bulud mClouds, başqa bir provayderlə işləyirsinizsə, dəyərləri onlarla yoxlayın. 

vcd.tfvars faylının məzmunu.

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"

Şəbəkə konfiqurasiyası, network.tf.

Ətraf mühit dəyişənləri təyin olundu, indi virtual maşın əlaqə sxemini quracağıq - biz hər bir virtual maşına şəxsi IP ünvanı təyin edəcəyik və portları xarici şəbəkəyə "yönləndirmək" üçün Destination NAT-dan istifadə edəcəyik. İdarəetmə portlarına girişi məhdudlaşdırmaq üçün girişi yalnız IP ünvanımız üçün təyin edəcəyik.

Terraform ilə bulud infrastrukturunu necə idarə etmək olarTerraform platforması üçün şəbəkə diaqramı yaradılır

Biz net_lan01 adı ilə virtual təşkilati şəbəkə yaradırıq, standart şlüz: 192.168.110.254, həmçinin ünvan sahəsi: 192.168.110.0/24.

Virtual şəbəkəni təsvir edirik.

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"

  }

}

Virtual maşınların İnternetə daxil olmasına imkan verən firewall qaydaları yaradaq. Bu blok daxilində buluddakı bütün virtual resurslar İnternetə çıxış əldə edəcək:

VM-nin İnternetə çıxış qaydalarını təsvir edirik.

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]

}

Asılılığı müəyyən etdikdən sonra vcdnetworkrouted.net blokunu emal etdikdən sonra vcdnsxvfirewallrule blokunu konfiqurasiya etməyə davam edirik., istifadə edərək asılıdır. Biz bu seçimdən istifadə edirik, çünki bəzi asılılıqlar konfiqurasiyada gizli şəkildə tanınır.

Sonra, xarici şəbəkədən portlara daxil olmağa imkan verən qaydalar yaradacağıq və SSH vasitəsilə serverlərə qoşulmaq üçün IP ünvanımızı göstərəcəyik. İstənilən internet istifadəçisi veb-serverdə 80 və 443 nömrəli portlara, 90.1.15.1 IP ünvanına malik istifadəçi isə virtual serverlərin SSH portlarına çıxış əldə edə bilər.

Xarici şəbəkədən portlara girişə icazə verin.

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]

}

Bulud yerli şəbəkəsindən İnternetə daxil olmaq üçün mənbə NAT qaydalarını yaradırıq:

Mənbə NAT qaydalarını təsvir edirik.

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]

}

Şəbəkə blokunun konfiqurasiyasını tamamlamaq üçün xarici şəbəkədən xidmətlərə daxil olmaq üçün Destination NAT qaydalarını əlavə edirik:

Təyinat NAT qaydalarının əlavə edilməsi.

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 altında SSH serverinə port tərcüməsi üçün NAT qaydası əlavə edin.

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 ilə SSH serverinə port tərcüməsi üçün NAT qaydası əlavə edin.

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 ilə SSH serverinə port tərcüməsi üçün NAT qaydası əlavə edin.

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 mühit konfiqurasiyası

Məqalənin əvvəlində planlaşdırdığımız kimi, üç virtual maşın yaradacağıq. Onlar "Qonaqların fərdiləşdirilməsi" ilə hazırlanacaq. Biz göstərdiyimiz parametrlərə uyğun olaraq şəbəkə parametrlərini təyin edəcəyik və istifadəçi parolu avtomatik olaraq yaradılacaq.

Virtual maşınların yerləşəcəyi vApp-ı və onların konfiqurasiyasını təsvir edək.

Terraform ilə bulud infrastrukturunu necə idarə etmək olarVirtual maşın konfiqurasiyası

Gəlin vApp konteyneri yaradaq. Biz dərhal vApp və VM-ni virtual şəbəkəyə qoşa bilməmiz üçün, asılı_on parametrini də əlavə edirik:

Bir konteyner yaradın

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

}

Təsviri olan virtual maşın yaradaq

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 təsvirindəki əsas parametrlər:

  • ad — virtual maşının adı,

  • vappname - yeni VM əlavə ediləcək vApp-ın adı,

  • kataloq adı / şablon adı - kataloq adı və virtual maşın şablon adı,

  • saxlama profili - standart saxlama siyasəti.

Şəbəkə blokunun parametrləri:

  • növü — qoşulmuş şəbəkənin növü,

  • ad — VM-nin hansı virtual şəbəkəyə qoşulacağı,

  • isprimary - əsas şəbəkə adapteri,

  • ipallocation_mode — MANUAL / DHCP / POOL ünvan ayırma rejimi,

  • ip — virtual maşın üçün IP ünvanı, biz onu əl ilə təyin edəcəyik.

override_template_disk bloku:

  • sizeinmb — virtual maşın üçün yükləmə diskinin ölçüsü

  • storage_profile — disk üçün saxlama siyasəti

Nextcloud fayl yaddaşının təsviri ilə ikinci VM yaradaq

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 bölməsində virtual maşına qoşulmuş yeni virtual diski təsvir edəcəyik.

vcdvminternaldisk bloku üçün izahatlar:

  • bustype - disk nəzarətçi növü

  • sizeinmb — disk ölçüsü

  • avtobus nömrəsi / vahid nömrəsi - adapterdəki əlaqə yeri

  • storage_profile — disk üçün saxlama siyasəti

Bitrix-də ən son VM-ni təsvir edək

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

}

}

ƏS-nin yenilənməsi və əlavə skriptlərin quraşdırılması

Şəbəkə hazırlanır, virtual maşınlar təsvir olunur. İnfrastrukturumuzu idxal etməzdən əvvəl, provayder bloklarından istifadə edərək və Ansible-dan istifadə etmədən əvvəlcədən ilkin təminat həyata keçirə bilərik.

Gəlin OS-ni necə yeniləməyə və provayder blokundan istifadə edərək CMS Bitrix quraşdırma skriptini işə salmağa baxaq.

Əvvəlcə CentOS yeniləmə paketlərini quraşdıraq.

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

}

}

}

Komponentlərin təyinatı:

  • provayder “remote-exec” - uzaqdan təminat blokunu birləşdirin

  • Bağlantı blokunda əlaqə növü və parametrlərini təsvir edirik:

  • növü — protokol, bizim vəziyyətimizdə SSH;

  • istifadəçi — istifadəçi adı;

  • parol — istifadəçi parolu. Bizim vəziyyətimizdə sistem istifadəçisi üçün yaradılan parolu saxlayan vcdvappvm.nginx.customization[0].admin_password parametrinə işarə edirik.

  • host — qoşulma üçün xarici IP ünvanı;

  • port — əvvəllər DNAT parametrlərində müəyyən edilmiş əlaqə portu;

  • inline - daxil ediləcək əmrlərin siyahısını sadalayın. Əmrlər bu bölmədə göstərildiyi kimi ardıcıllıqla daxil ediləcək.

Nümunə olaraq, əlavə olaraq 1C-Bitrix quraşdırma skriptini icra edək. Skriptin icra nəticəsinin çıxışı plan işləyərkən əlçatan olacaq. Skripti quraşdırmaq üçün əvvəlcə bloku təsvir edirik:

1C-Bitrix-in quraşdırılmasını təsvir edək.

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"

]

}

Və dərhal Bitrix yeniləməsini təsvir edəcəyik.

1C-Bitrix təminat nümunəsi.

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"

]

}

}

Vacibdir! SELinux-u əvvəlcədən söndürməsəniz, skript işləməyə bilər! Bitrix-env.sh istifadə edərək CMS 1C-Bitrix-in quraşdırılması və konfiqurasiyası haqqında ətraflı məqaləyə ehtiyacınız varsa, oo edə bilərsiniz. veb saytındakı blog məqaləmizdən istifadə edin.

3. İnfrastrukturun işə salınması

Terraform ilə bulud infrastrukturunu necə idarə etmək olarModulların və plaginlərin işə salınması

İş üçün sadə bir "centlmen dəsti"ndən istifadə edirik: Windows 10 OS ilə noutbuk və rəsmi veb saytından paylama dəsti terraform.io. Komandanı istifadə edərək paketdən çıxaraq və işə salaq: terraform.exe init

Hesablama və şəbəkə infrastrukturunu təsvir etdikdən sonra konfiqurasiyamızı sınaqdan keçirmək üçün planlaşdırmağa başlayırıq, burada nəyin yaradılacağını və onun bir-birinə necə bağlanacağını görə bilərik.

  1. Əmri yerinə yetirin - terraform plan -var-file=vcd.tfvars.

  2. Nəticəni alırıq - Plan: 16 to add, 0 to change, 0 to destroy. Yəni bu plana əsasən 16 resurs yaradılacaq.

  3. Planı əmrlə işə salırıq - terraform.exe apply -var-file=vcd.tfvars.

Virtual maşınlar yaradılacaq və sonra sadaladığımız paketlər provayder bölməsində icra ediləcək - ƏS yenilənəcək və CMS Bitrix quraşdırılacaq.

Bağlantı məlumatlarının qəbulu

Planı yerinə yetirdikdən sonra serverlərə qoşulmaq üçün mətn şəklində məlumatları almaq istəyirik, bunun üçün çıxış bölməsini aşağıdakı kimi formatlayacağıq:

output "nginxpassword" {

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

}

Və aşağıdakı çıxış bizə yaradılmış virtual maşının parolunu bildirir:

Outputs: nginx_password = F#4u8!!N

Nəticədə, biz gələcək işimiz üçün yenilənmiş əməliyyat sistemi və əvvəlcədən quraşdırılmış paketləri olan virtual maşınlara giriş əldə edirik. Hamısı hazırdır!

Bəs artıq mövcud infrastrukturunuz varsa nə etməli?

3.1. Mövcud infrastrukturla işləyən Terraform

Çox sadədir, siz idxal əmrindən istifadə edərək cari virtual maşınları və onların vApp konteynerlərini idxal edə bilərsiniz.

Gəlin vAPP resursunu və virtual maşını təsvir edək.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

Növbəti addım vApp resurslarının xassələrini formatda idxal etməkdir vcdvapp.<vApp> <org>.<orgvdc>.<vApp>harada:

  • vApp - vApp adı;

  • org — təşkilatın adı;

  • org_vdc — virtual məlumat mərkəzinin adı.

Terraform ilə bulud infrastrukturunu necə idarə etmək olarvAPP resurs xassələrinin idxalı

VM resurslarının xassələrini formatda idxal edək: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, hansında:

  • VM - VM adı;

  • vApp - vApp adı;

  • org — təşkilatın adı;

  • orgvdc virtual məlumat mərkəzinin adıdır.

İdxal uğurlu oldu

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.

İndi yeni idxal edilmiş resursa baxa bilərik:

İdxal edilmiş 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"

}

}

İndi biz mütləq işimizi tamamladıq - son nöqtəni (mövcud infrastruktura idxal) tamamladıq və Terraform ilə işləməyin bütün əsas məqamlarını əhatə etdik. 

Alət çox rahat oldu və bir bulud provayderinin virtual maşınlarından tutmuş şəbəkə komponentlərinin resurslarını təsvir etməyə qədər infrastrukturunuzu kod kimi təsvir etməyə imkan verir.

Eyni zamanda, ətraf mühitdən müstəqillik yerli, bulud resursları ilə işləməyə və hətta platformanı idarə etməyə imkan verir. Dəstəklənən platforma yoxdursa və yenisini əlavə etmək istəyirsinizsə, öz provayderinizi yazıb ondan istifadə edə bilərsiniz.

Mənbə: www.habr.com

Добавить комментарий