كيفية إدارة البنية التحتية السحابية باستخدام Terraform

كيفية إدارة البنية التحتية السحابية باستخدام Terraform

في هذه المقالة ، سنلقي نظرة على مكونات Terraform ، وسنطلق أيضًا البنية التحتية الخاصة بنا على مراحل في السحابة باستخدام برنامج VMware - تحضير ثلاثة أجهزة افتراضية لأغراض مختلفة: الوكيل وتخزين الملفات ونظام إدارة المحتوى.

كل شيء بالتفصيل وعلى ثلاث مراحل:

1. Terraform - الوصف والفوائد والمكونات

Terraform هي أداة IaC (البنية التحتية كرمز) لبناء وإدارة البنية التحتية الافتراضية باستخدام التعليمات البرمجية.

عند العمل مع الأداة ، لاحظنا عدة مزايا:

  • سرعة انتشار المستأجرين الجدد (بيئات افتراضية مخصصة). عادةً ، كلما زاد عدد العملاء الجدد ، زاد عدد "النقرات" التي يحتاجها فريق الدعم الفني لنشر موارد جديدة. باستخدام Terraform ، يمكن للمستخدمين تغيير معلمات الأجهزة الافتراضية (على سبيل المثال ، إغلاق نظام التشغيل تلقائيًا وزيادة قسم القرص الظاهري) دون مشاركة الدعم الفني وإغلاق الجهاز نفسه.

  • التحقق الفوري من خطة التفعيل جديد تينانت. باستخدام وصف رمز البنية التحتية ، يمكننا على الفور التحقق مما سيتم إضافته وبأي ترتيب ، وكذلك في الحالة النهائية التي ستكون عليها هذه الآلة الافتراضية أو تلك الشبكة الافتراضية مع اتصالات بالأجهزة الافتراضية.

  • القدرة على وصف الأنظمة الأساسية السحابية الأكثر شيوعًا. يمكنك استخدام الأداة من Amazon و Google Cloud إلى الأنظمة الأساسية الخاصة القائمة على VMware vCloud Director التي تقدم حلول IaaS و SaaS و PaaS.

  • إدارة العديد من موفري السحابة وتوزيع البنية التحتية بينهما لتحسين التسامح مع الأخطاء ، باستخدام تكوين واحد لإنشاء موارد السحابة وتشخيصها وإدارتها.

  • استخدام مناسب لإنشاء منصات عرض لاختبار البرامج وتصحيح الأخطاء. يمكنك إنشاء مقاعد ونقلها لقسم الاختبار ، واختبار البرامج بالتوازي في بيئات مختلفة ، وتغيير الموارد وحذفها فورًا عن طريق إنشاء خطة بناء موارد واحدة فقط

"تراريوم" Terraform

تحدثنا بإيجاز عن مزايا الأداة ، والآن سنقوم بتحليلها إلى مكوناتها

الموفرون (الموفرون). 

في Terraform ، يمكن تمثيل أي نوع من البنية التحتية تقريبًا كمورد. يتم توفير الاتصال بين الموارد والنظام الأساسي لواجهة برمجة التطبيقات من خلال وحدات الموفر ، والتي تتيح لك إنشاء موارد داخل نظام أساسي معين ، مثل Azure أو VMware vCloud Director.

داخل المشروع ، يمكنك التفاعل مع موفرين مختلفين على منصات مختلفة.

الموارد (وصف الموارد).

يسمح لك وصف الموارد بإدارة مكونات النظام الأساسي ، مثل الأجهزة أو الشبكات الافتراضية. 

يمكنك إنشاء وصف مورد لموفر VMware vCloud Director بنفسك واستخدام هذا الوصف لإنشاء موارد لأي موفر استضافة يستخدم vCloud Director. ما عليك سوى تغيير معلمات المصادقة ومعلمات اتصال الشبكة لموفر الاستضافة المطلوب

الممولين.

يتيح هذا المكون إمكانية إجراء عمليات التثبيت الأولي لنظام التشغيل وصيانته بعد إنشاء الأجهزة الافتراضية. بمجرد إنشاء مورد جهاز ظاهري ، يمكنك استخدام الموفرين للتهيئة والاتصال عبر SSH ، وترقية نظام التشغيل ، وتنزيل برنامج نصي وتنفيذه. 

إدخال وإخراج المتغيرات.

متغيرات الإدخال - متغيرات الإدخال لأي نوع من أنواع الكتل. 

تسمح متغيرات الإخراج بحفظ القيم بعد إنشاء المورد ويمكن استخدامها كمتغيرات إدخال في الوحدات النمطية الأخرى ، مثل مجموعة Provisioners.

تنص على.

تخزن ملفات الدول معلومات حول تكوين موارد النظام الأساسي للموفر. عند إنشاء النظام الأساسي لأول مرة ، لا توجد معلومات حول الموارد ، وقبل أي عملية ، يقوم Terraform بتحديث الحالة بالبنية التحتية الحقيقية للموارد التي تم وصفها بالفعل.

الغرض الرئيسي من الدول هو حفظ مجموعة من الكائنات من الموارد التي تم إنشاؤها بالفعل لمقارنة تكوين الموارد والكائنات المضافة لتجنب إعادة الإنشاء والتغييرات على النظام الأساسي.

يتم تخزين معلومات الحالة محليًا في ملف terraform.tfstate افتراضيًا ، ولكن يمكنك استخدام التخزين البعيد للعمل الجماعي إذا لزم الأمر.

يمكنك أيضًا استيراد موارد النظام الأساسي الحالية إلى الحالة من أجل زيادة التفاعل مع الموارد الأخرى ، والتي تم إنشاؤها بدورها دون مساعدة Terraform.  

2. إنشاء البنية التحتية

تم تفكيك المكونات ، والآن بمساعدة Terraform ، سننشئ تدريجياً بنية تحتية بثلاثة أجهزة افتراضية. الأول مع خادم وكيل nginx مثبت ، والثاني مع تخزين الملفات على أساس Nextcloud والثالث مع Bitrix CMS.

سنكتب التعليمات البرمجية وننفذها باستخدام مثالنا السحب على برنامج VMware vCloud Director. معنا ، يحصل المستخدمون على حساب بحقوق مسؤول المؤسسة ، إذا كنت تستخدم حسابًا له نفس الحقوق في سحابة VMware أخرى ، فيمكنك إعادة إنتاج الكود من الأمثلة الخاصة بنا. يذهب!

أولاً ، لنقم بإنشاء دليل لمشروعنا الجديد ، والذي سيحتوي على ملفات تصف البنية التحتية.

mkdir project01

ثم نصف مكونات البنية التحتية. ينشئ Terraform روابط ويعالج الملفات بناءً على الوصف الموجود في الملفات. يمكن تسمية الملفات نفسها بناءً على الغرض من الكتل الموصوفة ، على سبيل المثال ، network.tf - تصف معلمات الشبكة للبنية التحتية.

لوصف مكونات بنيتنا التحتية ، قمنا بإنشاء الملفات التالية:

قائمة الملفات.

main.tf - وصف معلمات البيئة الافتراضية - الأجهزة الافتراضية والحاويات الافتراضية ؛

network.tf - وصف معلمات الشبكة الافتراضية و NAT وقواعد جدار الحماية ؛

المتغيرات. tf - قائمة المتغيرات التي نستخدمها ؛

vcd.tfvars - مشروع القيم المتغيرة لوحدة VMware vCloud Director.

لغة التكوين في Terraform تعريفية ولا يهم ترتيب الكتل ، باستثناء كتل المزود ، لأن في هذه الكتلة ، نصف الأوامر التي سيتم تنفيذها عند إعداد البنية التحتية وسيتم تنفيذها بالترتيب.

هيكل الكتلة.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

يتم وصف الكتل باستخدام لغة البرمجة الخاصة بها HCL (لغة تكوين HashiCorp) ، ومن الممكن وصف البنية التحتية باستخدام JSON. لمزيد من المعلومات حول بناء الجملة ، انظر اقرأ على موقع المطور.

تكوين متغير البيئة ، المتغيرات. 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 - عنوان URL لواجهة برمجة التطبيقات ،

  • vcd_org_edge_name - اسم جهاز التوجيه الظاهري ،

  • vcd_org_catalog - اسم الدليل مع قوالب الآلة الافتراضية ،

  • vcd_edge_external_ip - عنوان IP العام ،

  • vcd_edge_external_network - اسم الشبكة الخارجية ،

  • vcd_org_hdd_sp - اسم سياسة تخزين محرك الأقراص الثابتة ،

  • 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 Director في ملف 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 خاص لكل جهاز افتراضي واستخدم Destination 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 المصدر للوصول إلى الإنترنت من شبكة المنطقة السحابية المحلية:

وصف قواعد مصدر 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 للوصول إلى الخدمات من شبكة خارجية:

إضافة قواعد 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]

}

نضيف قاعدة NAT لترجمة المنفذ إلى خادم SSH مع 1C-Bitrix.

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 على الفور بالشبكة الافتراضية ، نضيف أيضًا المعلمة تعتمد على:

قم بإنشاء حاوية

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 لإضافة جهاز افتراضي جديد إليه ،

  • catalogname / Templatename - اسم الكتالوج واسم قالب الجهاز الظاهري ،

  • storageprofile - سياسة التخزين الافتراضية.

معلمات كتلة الشبكة:

  • النوع - نوع الشبكة المتصلة ،

  • الاسم - أي شبكة افتراضية لتوصيل VM بها ،

  • أساسي - محول الشبكة الأساسي ،

  • ipallocation_mode - وضع تخصيص العنوان اليدوي / DHCP / POOL ،

  • ip - عنوان IP للجهاز الظاهري ، سنحدده يدويًا.

كتلة override_template_disk:

  • sizeinmb - حجم قرص التمهيد للجهاز الظاهري

  • storage_profile - سياسة التخزين للقرص

لنقم بإنشاء جهاز افتراضي آخر مع وصف لتخزين ملفات Nextcloud

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 - حجم القرص

  • busnumber / unitnumber - نقطة الاتصال في المحول

  • storage_profile - سياسة التخزين للقرص

دعنا نصف آخر VM على Bitrix

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.

دعنا نفكر في كيفية تحديث نظام التشغيل وتشغيل برنامج تثبيت Bitrix CMS باستخدام كتلة الموفر.

لنقم بتثبيت حزم خدمة 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 ؛

  • مضمنة - قائمة قائمة الأوامر التي سيتم إدخالها. سيتم إدخال الأوامر بالترتيب ، كما هو محدد في هذا القسم.

كمثال ، دعنا ننفذ أيضًا نص التثبيت 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 مسبقًا! إذا كنت بحاجة إلى مقالة مفصلة حول تثبيت وتكوين CMS 1C-Bitrix باستخدام bitrix-env.sh ، فيمكنك استخدم مقالنا في المدونة على الموقع.

3. تهيئة البنية التحتية

كيفية إدارة البنية التحتية السحابية باستخدام Terraformتهيئة الوحدات والإضافات

بالنسبة للعمل ، نستخدم "مجموعة جنتلمان" بسيطة: كمبيوتر محمول يعمل بنظام التشغيل Windows 10 ومجموعة توزيع من الموقع الرسمي على الويب 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.

سيتم إنشاء أجهزة افتراضية ، ومن ثم سيتم تنفيذ الحزم المدرجة من قبلنا داخل قسم الموفر - سيتم تحديث نظام التشغيل وسيتم تثبيت 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

إضافة تعليق