Terraform سان ڪلائوڊ انفراسٽرڪچر کي ڪيئن منظم ڪجي

Terraform سان ڪلائوڊ انفراسٽرڪچر کي ڪيئن منظم ڪجي

هن آرٽيڪل ۾ اسين ڏسنداسين ته Terraform ڇا تي مشتمل آهي، ۽ پڻ آهستي آهستي اسان جي پنهنجي انفراسٽرڪچر کي شروع ڪريون ٿا. بادل ۾ VMware سان - اسان مختلف مقصدن لاءِ ٽي VM تيار ڪنداسين: پراکسي، فائل اسٽوريج ۽ CMS.

تفصيل سان ۽ ٽن مرحلن ۾ هر شيء بابت:

1. Terraform - وضاحت، فائدا ۽ اجزاء

Terraform هڪ IaC (Infrastructure-as-Code) اوزار آهي ڪوڊ استعمال ڪندي ورچوئل انفراسٽرڪچر جي تعمير ۽ انتظام ڪرڻ لاءِ.

اسان اوزار سان ڪم ڪرڻ ۾ ڪيترن ئي فائدن کي نوٽ ڪيو:

  • نون نوڪرن جي مقرري جي رفتار (ڪسٽم ورچوئل ماحول). عام طور تي، وڌيڪ نوان گراهڪ موجود آهن، وڌيڪ "ڪلڪ" ٽيڪنيڪل سپورٽ اسٽاف کي نوان وسيلن کي شايع ڪرڻ جي ضرورت آهي. Terraform سان، صارف ورچوئل مشين سيٽنگون تبديل ڪري سگھن ٿا (مثال طور، خودڪار طريقي سان او ايس کي بند ڪرڻ ۽ ورچوئل ڊسڪ ورهاڱي کي وڌائڻ) بغير ٽيڪنيڪل سپورٽ جي ضرورت يا مشين کي پاڻ کي بند ڪرڻ جي.

  • فعال ٿيڻ واري منصوبي جي فوري تصديق نئون ٽيننٽ. انفراسٹرڪچر ڪوڊ جي وضاحت کي استعمال ڪندي، اسان فوري طور تي چيڪ ڪري سگھون ٿا ته ڇا شامل ڪيو ويندو ۽ ڪهڙي ترتيب ۾، انهي سان گڏ ڪهڙي حتمي حالت ۾ هي يا اهو مجازي مشين يا مجازي نيٽ ورڪ سان ڪنيڪشن سان گڏ ورچوئل مشينون هونديون.

  • سڀ کان وڌيڪ مشهور ڪلائوڊ پليٽ فارمن کي بيان ڪرڻ جي صلاحيت. توهان اوزار استعمال ڪري سگهو ٿا Amazon ۽ Google Cloud کان، VMware vCloud ڊائريڪٽر جي بنياد تي نجي پليٽ فارمن تي، IaaS، SaaS ۽ PaaS حلن ۾ خدمتون پيش ڪري ٿو.

  • گھڻن بادل مهيا ڪندڙن کي منظم ڪريو ۽ انهن جي وچ ۾ انفراسٽرڪچر کي ورهايو وڌاءِ لچڪ لاءِ، هڪ ترتيب استعمال ڪندي ڪلائوڊ وسيلن کي ٺاهڻ، تشخيص ۽ انتظام ڪرڻ.

  • ڊيمو اسٽينڊ ٺاهڻ لاءِ آسان استعمال سافٽ ويئر ٽيسٽ ۽ ڊيبگنگ لاءِ. توهان ٽيسٽنگ ڊپارٽمينٽ لاءِ اسٽينڊ ٺاهي ۽ منتقل ڪري سگهو ٿا، متوازي طور تي مختلف ماحول ۾ سافٽ ويئر ٽيسٽ ڪريو، ۽ صرف هڪ وسيلا بلڊ پلان ٺاهي وسيلن کي فوري طور تي تبديل ۽ حذف ڪري سگهو ٿا.

"Terrarium" Terraform

اسان مختصر طور تي اوزار جي فائدن جي باري ۾ ڳالهايو، هاڻي اچو ته ان کي ان جي حصن ۾ ورهايو

مهيا ڪندڙ. 

Terraform ۾، تقريبن ڪنهن به قسم جي انفراسٽرڪچر کي وسيلن جي طور تي نمائندگي ڪري سگهجي ٿو. وسيلن ۽ API پليٽ فارم جي وچ ۾ ڪنيڪشن مهيا ڪندڙ ماڊلز پاران مهيا ڪيل آهي، جيڪي توهان کي هڪ مخصوص پليٽ فارم اندر وسيلن ٺاهڻ جي اجازت ڏين ٿا، مثال طور، Azure يا VMware vCloud ڊائريڪٽر.

منصوبي جي حصي جي طور تي، توهان مختلف پليٽ فارمن تي مختلف مهيا ڪندڙن سان لهه وچڙ ڪري سگهو ٿا.

وسيلا (وسيلا بيان).

وسيلن جي وضاحت توهان کي پليٽ فارم جي اجزاء کي منظم ڪرڻ جي اجازت ڏئي ٿي، جهڙوڪ ورچوئل مشينون يا نيٽ ورڪ. 

توھان ٺاھي سگھوٿا ھڪڙي وسيلن جي وضاحت لاءِ VMware vCloud ڊائريڪٽر فراهم ڪندڙ پاڻ ۽ ھن وضاحت کي استعمال ڪرڻ لاءِ وسيلا ٺاھيو ڪنھن ھوسٽنگ فراهم ڪندڙ سان جيڪو استعمال ڪري ٿو vCloud ڊائريڪٽر. توهان کي صرف تصديق جي پيٽرولن ۽ نيٽ ورڪ ڪنيڪشن پيٽرولن کي گهربل هوسٽنگ فراهم ڪندڙ کي تبديل ڪرڻ جي ضرورت آهي

روزي ڏيندڙ.

هي جزو مجازي مشين ٺاهڻ کان پوء آپريٽنگ سسٽم جي شروعاتي تنصيب ۽ سار سنڀال لاء آپريشن ڪرڻ ممڪن بڻائي ٿو. هڪ دفعو توهان هڪ ورچوئل مشين وسيلو ٺاهي ڇڏيو، توهان SSH ذريعي ترتيب ڏيڻ ۽ ڳنڍڻ، آپريٽنگ سسٽم کي اپڊيٽ ڪرڻ، ۽ اسڪرپٽ ڊائون لوڊ ۽ هلائڻ لاءِ روزي ڏيندڙ استعمال ڪري سگهو ٿا. 

ان پٽ ۽ آئوٽ پٽ متغير.

ان پٽ متغير - ڪنهن به بلاڪ جي قسمن لاءِ ان پٽ متغير. 

آئوٽ پٽ متغير توهان کي وسيلن ٺاهڻ کان پوءِ قدرن کي بچائڻ جي اجازت ڏين ٿا ۽ ٻين ماڊلز ۾ ان پٽ متغير طور استعمال ڪري سگھجن ٿا، مثال طور Provisioners بلاڪ ۾.

رياستون.

رياستون فائلون مهيا ڪندڙ پليٽ فارم وسيلن جي ترتيب جي باري ۾ معلومات ذخيرو ڪن ٿيون. جڏهن پليٽ فارم پهريون ڀيرو ٺاهي وئي آهي، وسيلن جي باري ۾ ڪا به ڄاڻ ناهي ۽ ڪنهن به آپريشن کان اڳ Terraform رياست کي اڳ ۾ ئي بيان ڪيل وسيلن جي حقيقي زيربناء سان تازه ڪاري ڪري ٿو.

رياستن جو بنيادي مقصد اڳ ۾ ئي پيدا ڪيل وسيلن جي شين جو هڪ گروپ محفوظ ڪرڻ آهي شامل ڪيل وسيلن ۽ شين جي ترتيب کي موازنہ ڪرڻ لاءِ ته جيئن پليٽ فارم ۾ بار بار تخليق ۽ تبديلين کان بچڻ لاءِ.

ڊفالٽ طور، رياست جي معلومات مقامي terraform.tfstate فائل ۾ ذخيرو ٿيل آهي، پر جيڪڏهن ضروري هجي ته، ٽيم جي ڪم لاء ريموٽ اسٽوريج استعمال ڪرڻ ممڪن آهي.

توھان پڻ درآمد ڪري سگھو ٿا موجوده پليٽ فارم وسيلن کي رياست ۾ وڌيڪ لاڳاپو ڪرڻ لاءِ ٻين وسيلن سان جيڪي بدلي ۾ ٺاھيا ويا آھن Terraform جي مدد کان سواءِ.  

2. انفراسٽرڪچر جي تخليق

حصن کي ترتيب ڏنو ويو آهي، هاڻي Terraform استعمال ڪندي اسان تدريجي طور تي ٽن ورچوئل مشينن سان هڪ انفراسٽرڪچر ٺاهينداسين. پهريون nginx پراکسي سرور سان انسٽال ٿيل، ٻيو فائل اسٽوريج سان گڏ Nextcloud تي ٻڌل ۽ ٽيون CMS Bitrix سان.

اسان ڪوڊ لکنداسين ۽ اسان جي مثال کي استعمال ڪندي ان تي عمل ڪنداسين بادل تي VMware vCloud ڊائريڪٽر. اسان جي صارفين کي آرگنائيزيشن ايڊمنسٽريٽر جي حقن سان گڏ هڪ کاتو ملي ٿو. جيڪڏهن توهان ساڳئي حقن سان هڪ کاتو استعمال ڪريو ٿا ٻئي VMware ڪلائوڊ ۾، توهان اسان جي مثالن مان ڪوڊ ٻيهر ٺاهي سگهو ٿا. وڃ!

پهرين، اچو ته اسان جي نئين پروجيڪٽ لاءِ هڪ ڊاريڪٽري ٺاهي جنهن ۾ بنيادي ڍانچي کي بيان ڪندڙ فائلون رکيل هونديون.

mkdir project01

اڳيون، اسان انفراسٹرڪچر جي اجزاء کي بيان ڪريون ٿا. Terraform رشتا ٺاهي ٿو ۽ فائلن ۾ بيان جي بنياد تي فائلن کي پروسيس ڪري ٿو. فائلن کي پاڻ کي بلاڪ جي مقصد جي بنياد تي نالو ڏئي سگهجي ٿو، مثال طور، نيٽ ورڪ.tf - بيان ڪري ٿو نيٽ ورڪ جي بنيادي جوڙجڪ لاء.

اسان جي انفراسٽرڪچر جي اجزاء کي بيان ڪرڻ لاء، اسان ھيٺيون فائلون ٺاھيون:

فائلن جي فهرست.

main.tf - ورچوئل ماحول لاءِ پيرا ميٽرن جي وضاحت - ورچوئل مشينون، ورچوئل ڪنٽينر؛

network.tf - ورچوئل نيٽ ورڪ جي ماپن جي وضاحت ۽ NAT ۽ فائر وال قاعدن؛

variables.tf - متغيرن جي فهرست جيڪا اسان استعمال ڪريون ٿا؛

vcd.tfvars - پروجيڪٽ متغير قدر VMware vCloud ڊائريڪٽر ماڊل لاءِ.

Terraform ۾ ٺاھ جوڙ واري ٻولي بيان ڪندڙ آھي ۽ بلاڪ جي ترتيب سان ڪو فرق نٿو پوي، سواءِ روزي ڏيندڙ بلاڪ جي، ڇاڪاڻ ته هن بلاڪ ۾ اسان بيان ڪريون ٿا ته انهن حڪمن تي عمل ڪيو وڃي جڏهن انفراسٽرڪچر تيار ڪيو وڃي ۽ انهن تي عمل ڪيو ويندو.

بلاڪ جي جوڙجڪ.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

بلاڪ کي بيان ڪرڻ لاء، ان جي پنهنجي پروگرامنگ ٻولي HCL (HashiCorp Configuration Language) استعمال ڪئي وئي آهي؛ اهو ممڪن آهي ته JSON استعمال ڪندي انفراسٽرڪچر کي بيان ڪرڻ. توھان نحو بابت وڌيڪ ڄاڻو ٿا ڊولپر جي ويب سائيٽ تي پڙهو.

ماحولياتي متغير ترتيب، variables.tf ۽ vcd.tfvars

پهرين، اچو ته ٻه فائلون ٺاهيون جيڪي بيان ڪن ٿيون سڀني استعمال ٿيل متغيرن جي فهرست ۽ انهن جي قيمتن لاءِ VMware vCloud ڊائريڪٽر ماڊل. پهرين، اچو ته 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 — ورچوئل مشين جو IP پتو NGINX سان،

  • vcd_edge_local_ip_bitrix - ورچوئل مشين جو IP پتو 1C سان: Bitrix،

  • vcd_edge_local_ip_nextcloud - ورچوئل مشين جو IP پتو Nextcloud سان.

ٻئي فائل سان اسان ٺاهي ۽ وضاحت ڪريون ٿا متغير لاءِ VMware vCloud ڊائريڪٽر ماڊل vcd.tfvars فائل ۾: اچو ته ياد ڪريون ته اسان جي مثال ۾ اسان استعمال ڪندا آهيون. پنهنجو ڪلائوڊ mClouds، جيڪڏهن توهان ڪنهن ٻئي فراهم ڪندڙ سان ڪم ڪريو ٿا، انهن سان قدر چيڪ ڪريو. 

vcd.tfvars فائل جو مواد.

vcd_org_url = "https://vcloud.mclouds.ru/api"

vcd_org_user = "orgadmin"

vcd_org_password = "*"

vcd = "org"

vcd_org_vdc = "orgvdc"

vcd_org_maxretry_timeout = 60

vcd_org_allow_unverified_ssl = true

vcd_org_catalog = "Templates"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Gold Storage Policy"

vcd_org_hdd_sp = "Bronze Storage Policy"

vcd_org_edge_name = "MCLOUDS-EDGE"

vcd_edge_external_ip = "185.17.66.1"

vcd_edge_local_subnet = "192.168.110.0/24"

vcd_edge_local_ip_nginx = "192.168.110.1"

vcd_edge_local_ip_bitrix = "192.168.110.10"

vcd_edge_local_ip_nextcloud = "192.168.110.11"

vcd_edge_external_network = "NET-185-17-66-0"

نيٽ ورڪ ترتيب، network.tf.

ماحوليات متغير مقرر ٿيل آهن، هاڻي اسان ورچوئل مشين ڪنيڪشن اسڪيم قائم ڪنداسين - اسان هر ورچوئل مشين کي هڪ خانگي IP پتو تفويض ڪنداسين ۽ بندرگاهن کي ٻاهرين نيٽ ورڪ ڏانهن ”اڳتي“ ڪرڻ لاءِ منزل NAT استعمال ڪنداسين. انتظامي بندرگاهن تائين رسائي کي محدود ڪرڻ لاءِ، اسان صرف اسان جي IP پتي لاءِ رسائي مقرر ڪنداسين.

Terraform سان ڪلائوڊ انفراسٽرڪچر کي ڪيئن منظم ڪجيTerraform پليٽ فارم لاء نيٽ ورڪ ڊراگرام ٺاهي رهيو آهي

اسان net_lan01 نالي سان هڪ ورچوئل تنظيمي نيٽ ورڪ ٺاهيون ٿا، ڊفالٽ گيٽ وي: 192.168.110.254، ۽ ايڊريس اسپيس: 192.168.110.0/24 سان.

اسان هڪ مجازي نيٽ ورڪ بيان ڪريون ٿا.

resource "vcd_network_routed" "net" {

  name = "net_lan01"

  edge_gateway = var.vcd_org_edge_name

  gateway = "192.168.110.254"

  dns1 = "1.1.1.1"

  dns2 = "8.8.8.8"

 static_ip_pool {

start_address = "192.168.110.1"

end_address = "192.168.110.253"

  }

}

اچو ته فائر وال قاعدن کي ٺاهيون جيڪي مجازي مشينن کي انٽرنيٽ تائين رسائي جي اجازت ڏين ٿيون. هن بلاڪ جي اندر، ڪلائوڊ ۾ سڀني مجازي وسيلن کي انٽرنيٽ تائين رسائي هوندي:

اسان انٽرنيٽ تائين VM رسائي لاءِ ضابطا بيان ڪريون ٿا.

resource "vcd_nsxv_firewall_rule" "fw_internet_access" {

  edge_gateway   = var.vcdorgedgename

  name = "Internet Access"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

انحصار قائم ڪرڻ کان پوءِ vcdnetworkrouted.net بلاڪ کي پروسيس ڪرڻ کان پوءِ، اسان اڳتي وڌون ٿا vcdnsxvfirewallrule بلاڪ کي ترتيب ڏيڻ لاءِ، استعمال ڪندي تي دارومدار رکي ٿو. اسان هي اختيار استعمال ڪريون ٿا ڇاڪاڻ ته ڪجهه انحصار کي تسليم ڪري سگهجي ٿو ترتيب ۾ واضح طور تي.

اڳيون، اسان ضابطا ٺاهينداسين جيڪي بندرگاهن تائين رسائي جي اجازت ڏين ٿا ٻاهرين نيٽ ورڪ کان ۽ اسان جي IP پتي کي SSH ذريعي سرور سان ڳنڍڻ لاء. ڪنهن به انٽرنيٽ استعمال ڪندڙ کي ويب سرور تي بندرگاهن 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]

}

اسان ڪلائوڊ مقامي نيٽ ورڪ کان انٽرنيٽ تائين رسائي لاءِ ماخذ 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]

}

۽ نيٽ ورڪ بلاڪ جي ٺاھ جوڙ کي مڪمل ڪرڻ لاء، اسان شامل ڪريون ٿا منزل NAT ضابطن کي خارجي نيٽ ورڪ کان خدمتن تائين رسائي لاءِ:

شامل ڪرڻ منزل 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]

}

شامل ڪريو NAT قاعدو پورٽ ترجمي لاءِ SSH سرور تي Nginx تحت.

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]

}

شامل ڪريو NAT قاعدو پورٽ ترجمي لاءِ SSH سرور ڏانهن Nextcloud سان.

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Nextcloud"

original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

Main.tf مجازي ماحول جي جوڙجڪ

جيئن اسان آرٽيڪل جي شروعات ۾ رٿابندي ڪئي، اسان ٽي مجازي مشينون ٺاهي سگهنداسين. اهي "مهمان ڪسٽمائيزيشن" استعمال ڪندي تيار ڪيا ويندا. اسان نيٽ ورڪ پيٽرولر سيٽنگون سيٽنگون مطابق سيٽ ڪنداسين جيڪي اسان بيان ڪيون ويون آهن، ۽ صارف پاسورڊ خودڪار طريقي سان ٺاهي ويندي.

اچو ته بيان ڪريون vApp جنهن ۾ مجازي مشينون واقع ٿينديون ۽ انهن جي ترتيب.

Terraform سان ڪلائوڊ انفراسٽرڪچر کي ڪيئن منظم ڪجيمجازي مشين جي جوڙجڪ

اچو ته هڪ vApp ڪنٽينر ٺاهيون. انهي ڪري ته اسان فوري طور تي vApp ۽ VM کي ورچوئل نيٽ ورڪ سان ڳنڍي سگهون ٿا، اسان پڻ شامل ڪريون ٿا depends_on پيٽرول:

هڪ ڪنٽينر ٺاهيو

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

}

اچو ته وضاحت سان هڪ مجازي مشين ٺاهي

resource "vcd_vapp_vm" "nginx" {

vapp_name = vcd_vapp.vapp.name

name = "nginx"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nginx

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

VM وضاحت ۾ مکيه پيراگراف:

  • نالو - ورچوئل مشين جو نالو،

  • vappname - vApp جو نالو جنهن ۾ نئون VM شامل ڪرڻ لاءِ،

  • catalogname / templatename - فهرست جو نالو ۽ ورچوئل مشين ٽيمپليٽ جو نالو،

  • اسٽوريج پروفائل - ڊفالٽ اسٽوريج پاليسي.

نيٽ ورڪ بلاڪ پيٽرولر:

  • قسم - ڳنڍيل نيٽ ورڪ جو قسم،

  • نالو - جيڪو مجازي نيٽ ورڪ کي VM سان ڳنڍڻ لاء،

  • isprimary - پرائمري نيٽ ورڪ اڊاپٽر،

  • ipallocation_mode - MANUAL / DHCP / POOL ايڊريس مختص ڪرڻ جو طريقو،

  • ip - ورچوئل مشين لاءِ IP پتو، اسان ان کي دستي طور بيان ڪنداسين.

override_template_disk بلاڪ:

  • sizeinmb - ورچوئل مشين لاءِ بوٽ ڊسڪ سائيز

  • store_profile - ڊسڪ لاء اسٽوريج پاليسي

اچو ته هڪ ٻيو 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 - ڊسڪ سائيز

  • بس نمبر / يونٽ نمبر - اڊاپٽر ۾ ڪنيڪشن جي جڳھ

  • store_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

}

}

او ايس کي اپڊيٽ ڪرڻ ۽ اضافي اسڪرپٽ انسٽال ڪرڻ

نيٽ ورڪ تيار ڪيو ويو آهي، مجازي مشينون بيان ڪيون ويون آهن. اسان جي انفراسٽرڪچر کي درآمد ڪرڻ کان اڳ، اسان اڳواٽ پرووجنر بلاڪ استعمال ڪندي ۽ جوابي استعمال ڪرڻ کان سواءِ ابتدائي روزي کي انجام ڏئي سگھون ٿا.

اچو ته ڏسو ته او ايس کي ڪيئن تازه ڪاري ڪجي ۽ سي ايم ايس بيٽريڪس انسٽاليشن اسڪرپٽ کي استعمال ڪندي روزي ڏيندڙ بلاڪ کي استعمال ڪندي.

پهرين، اچو ته انسٽال ڪريو 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” - remote provisioning block کي ڳنڍيو

  • ڪنيڪشن بلاڪ ۾ اسان ڪنيڪشن لاءِ قسم ۽ پيرا ميٽر بيان ڪريون ٿا:

  • قسم - پروٽوڪول، اسان جي صورت ۾ SSH؛

  • استعمال ڪندڙ - استعمال ڪندڙ جو نالو؛

  • پاسورڊ- استعمال ڪندڙ پاسورڊ. اسان جي حالت ۾، اسان پيراميٽر ڏانهن اشارو ڪندا آهيون vcdvappvm.nginx.customization[0].admin_password، جيڪو سسٽم استعمال ڪندڙ لاءِ ٺاهيل پاسورڊ محفوظ ڪري ٿو.

  • ميزبان - ڪنيڪشن لاءِ ٻاهرين IP پتو؛

  • بندرگاهه - ڪنيڪشن لاءِ پورٽ، جيڪو اڳ ۾ DNAT سيٽنگن ۾ بيان ڪيو ويو هو؛

  • ان لائن - حڪمن جي فهرست لسٽ ڪريو جيڪي داخل ڪيا ويندا. حڪمن کي ترتيب ۾ داخل ڪيو ويندو جيئن هن سيڪشن ۾ اشارو ڪيو ويو آهي.

مثال طور، اچو ته اضافي طور تي 1C-Bitrix تنصيب اسڪرپٽ تي عمل ڪريو. اسڪرپٽ جي عمل جي نتيجن جو نتيجو دستياب ٿيندو جڏهن منصوبو هلندڙ آهي. اسڪرپٽ کي نصب ڪرڻ لاء، پهرين اسان بلاڪ کي بيان ڪريون ٿا:

اچو ته 1C-Bitrix جي تنصيب کي بيان ڪريو.

provisioner "file" {

source = "prepare.sh"

destination = "/tmp/prepare.sh"

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

}

provisioner "remote-exec" {

inline = [

"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"

]

}

۽ اسان فوري طور تي بيان ڪنداسين Bitrix تازه ڪاري.

1C-Bitrix روزي جو هڪ مثال.

resource "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.bitrix.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58302"

timeout = "60s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip",

"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",

"chmod +x /tmp/bitrix-env.sh",

"/tmp/bitrix-env.sh"

]

}

}

اهم! اسڪرپٽ ڪم نه ڪري سگھي ٿي جيڪڏھن توھان اڳ ۾ SELinux کي غير فعال نه ڪيو! جيڪڏهن توهان کي bitrix-env.sh استعمال ڪندي CMS 1C-Bitrix کي انسٽال ڪرڻ ۽ ترتيب ڏيڻ تي تفصيلي مضمون جي ضرورت آهي، توهان ڪري سگهو ٿا ويب سائيٽ تي اسان جو بلاگ آرٽيڪل استعمال ڪريو.

3. انفراسٽرڪچر جي شروعات

Terraform سان ڪلائوڊ انفراسٽرڪچر کي ڪيئن منظم ڪجيشروعاتي ماڊلز ۽ پلگ ان

ڪم لاءِ، اسان استعمال ڪريون ٿا هڪ سادي ”جنٽل مين ڪٽ“: هڪ ليپ ٽاپ سان Windows 10 OS ۽ هڪ تقسيم کٽ سرڪاري ويب سائيٽ تان terraform.io. اچو ته انپيڪ ڪريون ۽ ڪمانڊ استعمال ڪندي شروعات ڪريون: terraform.exe init

ڪمپيوٽنگ ۽ نيٽ ورڪ انفراسٽرڪچر کي بيان ڪرڻ کان پوءِ، اسان پلاننگ شروع ڪريون ٿا اسان جي ترتيب جي جانچ ڪرڻ لاءِ، جتي اسان ڏسي سگھون ٿا ته ڇا ٺھيو ويندو ۽ اھو ڪيئن ھڪ ٻئي سان ڳنڍبو.

  1. حڪم جاري ڪريو - terraform plan -var-file=vcd.tfvars.

  2. اسان نتيجو حاصل ڪريون ٿا - Plan: 16 to add, 0 to change, 0 to destroy. يعني هن منصوبي موجب 16 وسيلا ٺاهيا ويندا.

  3. اسان حڪم تي منصوبو شروع ڪيو - terraform.exe apply -var-file=vcd.tfvars.

ورچوئل مشينون ٺاهيون وينديون، ۽ پوءِ اسان جيڪي پيڪيجز درج ڪيا آھن سي پرووائيزر سيڪشن ۾ جاري ڪيا ويندا - OS کي اپڊيٽ ڪيو ويندو ۽ CMS Bitrix انسٽال ڪيو ويندو.

ڪنيڪشن ڊيٽا حاصل ڪرڻ

منصوبي تي عمل ڪرڻ کان پوء، اسان سرورز سان ڳنڍڻ لاء ٽيڪسٽ فارم ۾ ڊيٽا حاصل ڪرڻ چاهيون ٿا؛ ان لاء، اسين ھيٺئين طور تي آئوٽ سيڪشن کي فارميٽ ڪنداسين:

output "nginxpassword" {

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

}

۽ ھيٺ ڏنل ٻاھر اسان کي ٺاھيل ورچوئل مشين لاءِ پاسورڊ ٻڌائي ٿو:

Outputs: nginx_password = F#4u8!!N

نتيجي طور، اسان ورچوئل مشينن تائين رسائي حاصل ڪندا آھيون تازه ڪاري آپريٽنگ سسٽم سان ۽ اسان جي وڌيڪ ڪم لاءِ اڳ ۾ نصب ٿيل پيڪيجز. سڀ تيار آهي!

پر ڇا جيڪڏهن توهان وٽ اڳ ۾ ئي موجود زيربنا آهي؟

3.1. موجوده زيربناء سان ڪم ڪندڙ Terraform

اهو سادو آهي، توهان درآمد ڪري سگهو ٿا موجوده ورچوئل مشينون ۽ انهن جي vApp ڪنٽينرز درآمد حڪم استعمال ڪندي.

اچو ته بيان ڪريون VAPP وسيلن ۽ ورچوئل مشين.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

ايندڙ قدم فارميٽ ۾ vApp وسيلن جي ملڪيت کي درآمد ڪرڻ آهي vcdvapp.<vApp> <org>.<orgvdc>.<vApp>، جتي:

  • vApp - vApp نالو؛

  • org - تنظيم جو نالو؛

  • org_vdc — ورچوئل ڊيٽا سينٽر جو نالو.

Terraform سان ڪلائوڊ انفراسٽرڪچر کي ڪيئن منظم ڪجيVAPP وسيلن جي ملڪيت کي درآمد ڪرڻ

اچو ته فارميٽ ۾ VM وسيلن جي ملڪيت درآمد ڪريو: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, ڪھڙي:

  • VM - VM نالو؛

  • vApp - vApp نالو؛

  • org - تنظيم جو نالو؛

  • orgvdc ورچوئل ڊيٽا سينٽر جو نالو آهي.

درآمد ڪامياب ٿي ويو

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import prepared!

Prepared vcd_vapp_vm for import

vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

هاڻي اسان نئين درآمد ٿيل وسيلن کي ڏسي سگهون ٿا:

درآمد ٿيل وسيلا

> terraform show

...

# vcd_vapp.Monitoring:

resource "vcd_vapp" "Monitoring" {

guest_properties = {}

href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"

id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"

ip = "allocated"

metadata = {}

name = "Monitoring"

org = "mClouds"

status = 4

status_text = "POWERED_ON"

vdc = "mClouds"

}

# vcd_vapp_vm.Zabbix:

resource "vcd_vapp_vm" "Zabbix" {

computer_name = "Zabbix"

cpu_cores = 1

cpus = 2

expose_hardware_virtualization = false

guest_properties = {}

hardware_version = "vmx-14"

href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

internal_disk = [

{

bus_number = 0

bus_type = "paravirtual"

disk_id = "2000"

iops = 0

size_in_mb = 122880

storage_profile = "Gold Storage Policy"

thin_provisioned = true

unit_number = 0

},

]

memory = 8192

metadata = {}

name = "Zabbix"

org = "mClouds"

os_type = "centos8_64Guest"

storage_profile = "Gold Storage Policy"

vapp_name = "Monitoring"

vdc = "mClouds"

customization {

allow_local_admin_password = true

auto_generate_password = true

change_sid = false

enabled = false

force = false

join_domain = false

join_org_domain = false

must_change_password_on_first_login = false

number_of_auto_logons = 0

}

network {

adapter_type = "VMXNET3"

ip_allocation_mode = "DHCP"

is_primary = true

mac = "00:50:56:07:01:b1"

name = "MCLOUDS-LAN01"

type = "org"

}

}

هاڻي اسان يقيني طور تي تيار آهيون - اسان آخري نقطي سان ڪيو آهي (موجوده انفراسٽرڪچر ۾ درآمد) ۽ Terraform سان ڪم ڪرڻ جي سڀني مکيه نقطن تي غور ڪيو آهي. 

اوزار تمام آسان ٿي ويو ۽ توھان کي توھان جي بنيادي ڍانچي کي ڪوڊ جي طور تي بيان ڪرڻ جي اجازت ڏئي ٿو، ھڪڙي بادل فراهم ڪندڙ جي ورچوئل مشينن کان نيٽ ورڪ حصن جي وسيلن کي بيان ڪرڻ لاء.

ساڳئي وقت، ماحول کان آزادي ان کي ممڪن بڻائي ٿو ڪم ڪرڻ مقامي، ڪلائوڊ وسيلن، ۽ پليٽ فارم کي پڻ منظم ڪرڻ. ۽ جيڪڏهن ڪو به سپورٽ ٿيل پليٽ فارم نه آهي ۽ توهان هڪ نئون شامل ڪرڻ چاهيو ٿا، ته توهان پنهنجو مهيا ڪندڙ لکي سگهو ٿا ۽ ان کي استعمال ڪريو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو