የክላውድ መሠረተ ልማትን በ Terraform እንዴት ማስተዳደር እንደሚቻል

የክላውድ መሠረተ ልማትን በ Terraform እንዴት ማስተዳደር እንደሚቻል

በዚህ ጽሑፍ ውስጥ ቴራፎርምን ምን እንደሚያካትት እንመለከታለን, እና የራሳችንን መሠረተ ልማት በደረጃ እንጀምራለን ከ VMware ጋር በደመና ውስጥ - ለተለያዩ ዓላማዎች ሶስት ቪኤምዎችን ያዘጋጁ-ፕሮክሲ ፣ የፋይል ማከማቻ እና ሲኤምኤስ።

ሁሉም ነገር በዝርዝር እና በሦስት ደረጃዎች:

1. ቴራፎርም - መግለጫ, ጥቅሞች እና አካላት

ቴራፎርም ኮድን በመጠቀም ምናባዊ መሠረተ ልማትን ለመገንባት እና ለማስተዳደር የ IaC (መሠረተ ልማት-እንደ-ኮድ) መሣሪያ ነው።

ከመሳሪያው ጋር ስንሰራ ብዙ ጥቅሞችን አስተውለናል-

  • አዲስ ተከራዮች የማሰማራት ፍጥነት (ብጁ ምናባዊ አካባቢዎች). ብዙ ጊዜ፣ አዳዲስ ደንበኞች በበዙ ቁጥር፣ የቴክኒክ ድጋፍ ሰጪ ሰራተኞች አዳዲስ መርጃዎችን ለማተም ብዙ "ጠቅታ" ማድረግ አለባቸው። በ Terraform ተጠቃሚዎች የቨርቹዋል ማሽኖችን መለኪያዎች መለወጥ ይችላሉ (ለምሳሌ ኦኤስን በራስ ሰር መዝጋት እና ቨርቹዋል ዲስክ ክፋይን ይጨምሩ) ያለ የቴክኒክ ድጋፍ ተሳትፎ እና ማሽኑን መዝጋት።

  • የማግበር ዕቅዱ ፈጣን ማረጋገጫ አዲስ ተከራይ. የመሠረተ ልማት ኮድ ገለፃን በመጠቀም ፣ ምን እንደሚጨምር እና በምን ቅደም ተከተል ፣ እንዲሁም ይህ ወይም ያ ቨርቹዋል ማሽን ወይም ምናባዊ አውታረ መረብ ከቨርቹዋል ማሽኖች ጋር ግንኙነት ያለው በምን የመጨረሻ ሁኔታ ላይ እንደሚሆን ወዲያውኑ ማረጋገጥ እንችላለን።

  • በጣም ታዋቂ የደመና መድረኮችን የመግለፅ ችሎታ። መሣሪያውን መጠቀም ይችላሉ ከአማዞን እና ጎግል ክላውድ፣ በቪኤምዌር vCloud ዳይሬክተር ላይ የተመሰረቱ የግል መድረኮች፣ በIaaS፣ SaaS እና PaaS መፍትሄዎች ውስጥ አገልግሎቶችን ይሰጣሉ።

  • በርካታ የደመና አቅራቢዎችን ያስተዳድሩ እና የደመና ሀብቶችን ለመፍጠር, ለመመርመር እና ለማስተዳደር አንድ ውቅር በመጠቀም ስህተትን መቻቻል ለማሻሻል በመካከላቸው መሠረተ ልማትን ያሰራጫሉ.

  • ማሳያ ማቆሚያዎችን ለመፍጠር ምቹ አጠቃቀም ለሶፍትዌር ሙከራ እና ማረም. ለሙከራ ክፍል አግዳሚ ወንበሮችን መፍጠር እና ማስተላለፍ፣ ሶፍትዌሮችን በትይዩ በተለያዩ አካባቢዎች መሞከር እና አንድ የሃብት ግንባታ እቅድ ብቻ በመፍጠር ሃብቶችን በፍጥነት መለወጥ እና መሰረዝ ይችላሉ።

"ቴራሪየም" ቴራፎርም

ስለ መሳሪያው ጥቅሞች በአጭሩ ተነጋግረናል, አሁን ወደ ክፍሎቹ እንመረምራለን

አቅራቢዎች (አቅራቢዎች)። 

በቴራፎርም ማንኛውም አይነት መሠረተ ልማት ማለት ይቻላል እንደ ግብዓት ሊወከል ይችላል። በንብረቶች እና በኤፒአይ መድረክ መካከል ያለው ግንኙነት በአቅራቢ ሞጁሎች የቀረበ ነው፣ ይህም በተወሰነ የመሳሪያ ስርዓት ውስጥ እንደ Azure ወይም VMware vCloud ዳይሬክተር ያሉ ሀብቶችን እንዲፈጥሩ ያስችልዎታል።

በአንድ ፕሮጀክት ውስጥ፣ በተለያዩ መድረኮች ላይ ከተለያዩ አቅራቢዎች ጋር መገናኘት ይችላሉ።

ሀብቶች (የሀብት መግለጫ)።

የሃብት መግለጫ እንደ ቨርቹዋል ማሽኖች ወይም አውታረ መረቦች ያሉ የመድረክ ክፍሎችን እንዲያስተዳድሩ ይፈቅድልዎታል. 

ለቪኤምዌር ቪክላውድ ዳይሬክተር አቅራቢ እራስዎ የግብአት መግለጫ መፍጠር እና vCloud ዳይሬክተርን ለሚጠቀም ለማንኛውም ማስተናገጃ አቅራቢ ይህንን መግለጫ ይጠቀሙ። የማረጋገጫ መለኪያዎችን እና የአውታረ መረብ ግንኙነት መለኪያዎችን ወደ አስፈላጊው አስተናጋጅ አቅራቢ ብቻ መለወጥ ያስፈልግዎታል

አቅራቢዎች።

ይህ አካል ቨርቹዋል ማሽኖች ከተፈጠሩ በኋላ ለስርዓተ ክወናው የመጀመሪያ ጭነት እና ጥገና ስራዎችን ለማከናወን ያስችላል። አንዴ የቨርቹዋል ማሽን ግብዓት ከፈጠሩ በኋላ በኤስኤስኤች በኩል ለማዋቀር እና ለማገናኘት፣ ስርዓተ ክወናውን ለማሻሻል እና ስክሪፕት ለማውረድ እና ለማስፈጸም አቅራቢዎችን መጠቀም ይችላሉ። 

ተለዋዋጮች ግቤት እና ውፅዓት።

የግቤት ተለዋዋጮች - ለማንኛውም የማገጃ ዓይነቶች የግቤት ተለዋዋጮች። 

የውጤት ተለዋዋጮች እሴቶችን ከሀብት ፈጠራ በኋላ እንዲቀመጡ ያስችላቸዋል እና እንደ አቅራቢዎች እገዳ ባሉ ሌሎች ሞጁሎች ውስጥ እንደ ግብዓት ተለዋዋጮች ሊያገለግሉ ይችላሉ።

ግዛቶች.

የስቴት ፋይሎች ስለ አቅራቢው የመሣሪያ ስርዓት ምንጭ ውቅር መረጃ ያከማቻሉ። የመሳሪያ ስርዓቱ መጀመሪያ ሲፈጠር, ስለ ሀብቱ ምንም መረጃ የለም, እና ከማንኛውም ቀዶ ጥገና በፊት, Terraform ቀደም ሲል በተገለጹት ሀብቶች እውነተኛ መሠረተ ልማቶችን ያዘምናል.

የስቴቶች ዋና ዓላማ ተደጋጋሚ መፈጠርን እና የመድረክ ለውጦችን ለማስቀረት የተጨመሩ ሀብቶችን እና ዕቃዎችን ውቅር ለማነፃፀር ቀድሞውኑ የተፈጠሩ ሀብቶችን ስብስብ መቆጠብ ነው።

የስቴት መረጃ በነባሪ በ terraform.tfstate ፋይል ውስጥ ተከማችቷል፣ ነገር ግን አስፈላጊ ከሆነ ለቡድን ስራ የርቀት ማከማቻን መጠቀም ይችላሉ።

እንዲሁም ከሌሎች ሀብቶች ጋር የበለጠ መስተጋብር ለመፍጠር አሁን ያለውን የመድረክ ሀብቶችን ወደ ግዛቱ ማስመጣት ይችላሉ, ይህም በተራው ደግሞ ያለ Terraform እርዳታ የተፈጠሩ ናቸው.  

2. የመሠረተ ልማት ግንባታ

ክፍሎቹ ተበላሽተዋል, አሁን በ Terraform እርዳታ በሶስት ቨርቹዋል ማሽኖች ቀስ በቀስ መሠረተ ልማት እንፈጥራለን. የመጀመሪያው የ nginx ፕሮክሲ አገልጋይ የተጫነ፣ ሁለተኛው በ Nextcloud ላይ የተመሰረተ የፋይል ማከማቻ እና ሶስተኛው ከBitrix CMS ጋር።

የኛን ምሳሌ በመጠቀም ኮድ እንጽፋለን እና እንፈጽማለን። ደመናዎች በ VMware vCloud ዳይሬክተር ላይ. ከእኛ ጋር፣ ተጠቃሚዎች በድርጅት አስተዳዳሪ መብቶች መለያ ያገኛሉ፣ ተመሳሳይ መብቶች ያለው መለያ በሌላ VMware ደመና ውስጥ ከተጠቀሙ፣ ከምሳሌዎቻችን ኮዱን እንደገና ማባዛት ይችላሉ። ሂድ!

በመጀመሪያ፣ ለአዲሱ ፕሮጄክታችን ማውጫ እንፍጠር፣ እሱም መሠረተ ልማትን የሚገልጹ ፋይሎችን ይይዛል።

mkdir project01

ከዚያም የመሠረተ ልማት ክፍሎችን እንገልፃለን. ቴራፎርም አገናኞችን ይፈጥራል እና በፋይሎቹ ውስጥ ባለው መግለጫ ላይ በመመስረት ፋይሎችን ያስኬዳል። ፋይሎቹ እራሳቸው በተገለጹት ብሎኮች ዓላማ ላይ በመመስረት ሊሰየሙ ይችላሉ ፣ ለምሳሌ network.tf - ለመሠረተ ልማት አውታር መለኪያዎችን ይገልጻል።

የመሠረተ ልማት ክፍላችንን ለመግለጽ የሚከተሉትን ፋይሎች ፈጥረናል፡-

የፋይሎች ዝርዝር.

main.tf - ለምናባዊው አካባቢ መለኪያዎች መግለጫ - ምናባዊ ማሽኖች, ምናባዊ መያዣዎች;

network.tf - የቨርቹዋል ኔትወርክ ግቤቶች መግለጫ እና NAT, የፋየርዎል ደንቦች;

variables.tf - የምንጠቀምባቸው ተለዋዋጮች ዝርዝር;

vcd.tfvars - ለ VMware vCloud ዳይሬክተር ሞጁል የፕሮጀክት ተለዋዋጭ እሴቶች።

በቴራፎርም ውስጥ ያለው የውቅረት ቋንቋ ገላጭ ነው እና የብሎኮች ቅደም ተከተል ምንም አይደለም ፣ከአቅራቢ ብሎኮች በስተቀር ፣ ምክንያቱም በዚህ ብሎክ ውስጥ የመሠረተ ልማት አውታሮችን በሚዘጋጅበት ጊዜ የሚፈጸሙትን ትዕዛዞች እንገልፃለን እና በቅደም ተከተል ይከናወናሉ.

አግድ መዋቅር.

<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 - ይፋዊ አይፒ አድራሻ፣

  • vcd_edge_external_network - የውጪው አውታረ መረብ ስም፣

  • vcd_org_hdd_sp - የኤችዲዲ ማከማቻ ፖሊሲ ስም፣

  • vcd_org_ssd_sp የኤስኤስዲ ማከማቻ ፖሊሲ ስም ነው።

እና የእኛን ተለዋዋጮች ያስገቡ፡-

  • vcd_edge_local_ip_nginx - የቨርቹዋል ማሽኑ አይፒ አድራሻ ከNGINX ጋር፣

  • vcd_edge_local_ip_bitrix - የቨርቹዋል ማሽኑ አይፒ አድራሻ ከ1ሲ፡ ቢትሪክስ፣

  • vcd_edge_local_ip_nextcloud - የቨርቹዋል ማሽን አይፒ አድራሻ ከ Nextcloud።

በሁለተኛው ፋይል ውስጥ፣ በvcd.tfvars ፋይል ውስጥ ለVMware vCloud ዳይሬክተር ሞጁል ተለዋዋጮችን እንፈጥራለን እና እንገልፃለን፡ በእኛ ምሳሌ ውስጥ እንደምንጠቀም አስታውስ። የራሱ ደመና 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.

የአካባቢ ተለዋዋጮች ተዘጋጅተዋል ፣ አሁን የቨርቹዋል ማሽን የግንኙነት መርሃግብሩን እናዋቅር - ለእያንዳንዱ ቨርቹዋል ማሽን የግል አይፒ አድራሻ እንመድቡ እና መድረሻ NATን ወደ ውጫዊ አውታረመረብ ወደ “ማስተላለፍ” ይጠቀሙ። የአስተዳደር ወደቦች መዳረሻን ለመገደብ፣ ለአይ ፒ አድራሻችን ብቻ መዳረሻን እናዘጋጃለን።

የክላውድ መሠረተ ልማትን በ 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 ብሎክ ውቅር እንቀጥላለን ጥገኝነት, በመጠቀም እንደ ሁኔታው. ይህንን አማራጭ እንጠቀማለን ምክንያቱም አንዳንድ ጥገኞች በቅንጅቱ ውስጥ በተዘዋዋሪ ሊታወቁ ይችላሉ።

በመቀጠል፣ ከውጪው አውታረመረብ ወደቦች እንዲደርሱ የሚፈቅዱ ህጎችን እንፈጥራለን እና በኤስኤስኤች በኩል ከአገልጋዮቹ ጋር ለመገናኘት የአይ ፒ አድራሻችንን እንገልፃለን። ማንኛውም የኢንተርኔት ተጠቃሚ በድር ሰርቨር ላይ ወደቦች 80 እና 443 መዳረሻ አለው እና IP አድራሻ ያለው ተጠቃሚ 90.1.15.1 የቨርቹዋል ሰርቨሮች ኤስኤስኤች ወደቦች መዳረሻ አለው።

ከውጭ አውታረመረብ ወደቦች መዳረሻን እንፈቅዳለን።

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]

}

እና የአውታረ መረብ እገዳን ውቅር ለማጠናቀቅ ከውጪው አውታረ መረብ አገልግሎቶችን ለማግኘት መድረሻ 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]

}

በNginx ስር ወደቦችን ወደ SSH አገልጋይ ለመተርጎም የNAT ህግን ያክሉ።

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH NGINX"

original_address = var.vcd_edge_external_ip
original_port = 58301

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

ለወደብ ትርጉም የNAT ህግን ወደ ኤስኤስኤች አገልጋይ ከ1ሲ-ቢትሪክስ እንጨምረዋለን።

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 ወደቦችን ወደ ኤስኤስኤች አገልጋይ ለመተርጎም የNAT ህግን ያክሉ።

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

description = "SSH Nextcloud"

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

depends_on = [vcd_network_routed.net]

}

ምናባዊ አካባቢ ውቅር main.tf

በአንቀጹ መጀመሪያ ላይ እንዳቀድን, ሶስት ምናባዊ ማሽኖችን እንፈጥራለን. በ"እንግዳ ማበጀት" ይዘጋጃሉ። በገለጽናቸው ቅንብሮች መሰረት የአውታረ መረብ መለኪያዎችን እንጽፋለን, እና የተጠቃሚው የይለፍ ቃል በራስ-ሰር ይፈጠራል.

ምናባዊ ማሽኖች እና አወቃቀራቸው የሚገኙበትን vApp እንግለጽ።

የክላውድ መሠረተ ልማትን በ 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

}

}

በቪኤም መግለጫ ውስጥ ዋና መለኪያዎች-

  • ስም የቨርቹዋል ማሽን ስም ነው

  • vappname - አዲስ ቪኤም የሚጨምርበት የvApp ስም፣

  • ካታሎግ ስም / የአብነት ስም - የካታሎግ ስም እና ምናባዊ ማሽን አብነት ስም ፣

  • የማከማቻ መገለጫ - ነባሪ የማከማቻ መመሪያ።

የአውታረ መረብ እገዳ መለኪያዎች፡-

  • ዓይነት - የተገናኘ አውታረ መረብ ዓይነት;

  • ስም - VMን ለማገናኘት የትኛው ምናባዊ አውታረ መረብ ፣

  • isprimary - የመጀመሪያ ደረጃ የአውታረ መረብ አስማሚ,

  • ipallocation_mode - ማንዋል / DHCP / POOL አድራሻ ድልድል ሁነታ,

  • ip - ለቨርቹዋል ማሽኑ የአይ ፒ አድራሻ, በእጅ እንገልፃለን.

መሻር_template_ዲስክ እገዳ፡-

  • 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 / unit number - በ አስማሚ ውስጥ የግንኙነት ነጥብ

  • storage_profile — ለዲስክ የማከማቻ መመሪያ

የመጨረሻውን ቪኤም በቢትሪክስ ላይ እንግለጽ

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 ን ሳንጠቀም ማድረግ እንችላለን።

ኦኤስን እንዴት ማዘመን እንደምንችል እና የቢትሪክ ሲኤምኤስ መጫኛ ስክሪፕት አቅራቢውን ብሎክን በመጠቀም እንደምናሄድ እናስብ።

መጀመሪያ የ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 parameter እንጠቁማለን።

  • አስተናጋጅ - ለግንኙነት ውጫዊ አይፒ አድራሻ;

  • ወደብ - ለግንኙነት ወደብ, ቀደም ሲል በዲኤንኤቲ ቅንጅቶች ውስጥ ተገልጿል;

  • inline - የሚገቡትን የትእዛዞች ዝርዝር ይዘርዝሩ። በዚህ ክፍል ውስጥ እንደተገለጸው ትእዛዞቹ በቅደም ተከተል እንዲገቡ ይደረጋሉ።

እንደ ምሳሌ፣ የ1C-Bitrix መጫኛ ስክሪፕት በተጨማሪ እንስራ። የስክሪፕቱ አፈፃፀም ውጤት በእቅዱ አፈፃፀም ወቅት ይገኛል ። ስክሪፕቱን ለመጫን በመጀመሪያ እገዳውን እንገልፃለን-

የ 1C-Bitrix መጫኑን እንግለጽ.

provisioner "file" {

source = "prepare.sh"

destination = "/tmp/prepare.sh"

connection {

type = "ssh"

user = "root"

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

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

}

provisioner "remote-exec" {

inline = [

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

]

}

እና ወዲያውኑ የ Bitrix ዝመናን እንገልፃለን.

የ1C-Bitrix አቅርቦት ምሳሌ።

resource "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

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

host = var.vcd_edge_external_ip

port = "58302"

timeout = "60s"

}

inline = [

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

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

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

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

"/tmp/bitrix-env.sh"

]

}

}

አስፈላጊ! SELinux አስቀድሞ ካልተሰናከለ በስተቀር ስክሪፕቱ ላይሰራ ይችላል! bitrix-env.sh ን በመጠቀም CMS 1C-Bitrix ን ስለመጫን እና ስለማዋቀር ዝርዝር ጽሑፍ ከፈለጉ ማድረግ ይችላሉ። በድረ-ገጹ ላይ የእኛን የብሎግ መጣጥፍ ይጠቀሙ.

3. የመሠረተ ልማት አጀማመር

የክላውድ መሠረተ ልማትን በ Terraform እንዴት ማስተዳደር እንደሚቻልሞጁሎችን እና ተሰኪዎችን መጀመር

ለስራ፣ ቀላል “የጨዋ ስብስብ” እንጠቀማለን፡ ላፕቶፕ ከዊንዶውስ 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. ቴራፎርም ከነባር መሠረተ ልማት ጋር አብሮ መሥራት

ቀላል ነው፣ የማስመጣት ትዕዛዙን በመጠቀም የአሁን ቨርቹዋል ማሽኖችን እና የ 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>, የትኛው ውስጥ:

  • ቪኤም - የቪኤም ስም;

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

}

}

አሁን በእርግጠኝነት ዝግጁ ነን - በመጨረሻው ጊዜ (ወደ ነባር መሠረተ ልማት ማስመጣት) ጨርሰናል እና ከቴራፎርም ጋር ለመስራት ሁሉንም ዋና ዋና ነጥቦችን ተመልክተናል። 

መሣሪያው በጣም ምቹ ሆኖ ተገኝቷል እና የእርስዎን መሠረተ ልማት እንደ ኮድ እንዲገልጹ ያስችልዎታል፣ ይህም ከአንድ የደመና አቅራቢ ምናባዊ ማሽኖች እስከ የአውታረ መረብ ክፍሎችን ሀብቶችን ይገልጻል።

በተመሳሳይ ጊዜ፣ ከአካባቢው መራቅ ከአካባቢ፣ ከደመና ሃብቶች ጋር አብሮ ለመስራት እና በመድረክ አስተዳደር መጨረስ ያስችላል። እና ምንም የሚደገፍ መድረክ ከሌለ እና አዲስ ማከል ከፈለጉ የራስዎን አቅራቢ መጻፍ እና መጠቀም ይችላሉ።

ምንጭ: hab.com

አስተያየት ያክሉ