Com gestionar la infraestructura del núvol amb Terraform

Com gestionar la infraestructura del núvol amb Terraform

En aquest article veurem en què consisteix Terraform, i també posarem en marxa la nostra pròpia infraestructura al núvol amb VMware — prepararem tres VM per a diferents finalitats: proxy, emmagatzematge de fitxers i CMS.

Sobre tot en detall i en tres etapes:

1. Terraform - descripció, avantatges i components

Terraform és una eina IaC (Infrastructure-as-Code) per construir i gestionar infraestructures virtuals mitjançant codi.

Hem observat diversos avantatges en treballar amb l'eina:

  • Velocitat de desplegament de nous llogaters (entorns virtuals personalitzats). Normalment, com més clients nous hi hagi, més "clics" ha de fer el personal d'assistència tècnica per publicar nous recursos. Amb Terraform, els usuaris poden canviar la configuració de la màquina virtual (per exemple, tancar automàticament el sistema operatiu i augmentar la partició del disc virtual) sense necessitat d'assistència tècnica ni apagar la pròpia màquina.

  • Verificació instantània del pla d'activació nou Tennant. Mitjançant la descripció del codi d'infraestructura, podem comprovar immediatament què s'afegirà i en quin ordre, així com en quin estat final estarà aquesta o aquella màquina virtual o xarxa virtual amb connexions a màquines virtuals.

  • Capacitat per descriure les plataformes al núvol més populars. Podeu utilitzar l'eina des d'Amazon i Google Cloud, fins a plataformes privades basades en VMware vCloud Director, oferint serveis dins de solucions IaaS, SaaS i PaaS.

  • Gestioneu diversos proveïdors de núvol i distribuir la infraestructura entre ells per millorar la tolerància a fallades, utilitzant una única configuració per crear, diagnosticar i gestionar els recursos del núvol.

  • Ús convenient per crear estands de demostració per a proves i depuració de programari. Podeu crear i transferir estands per al departament de proves, provar programari en diferents entorns en paral·lel i canviar i suprimir recursos a l'instant creant un sol pla de creació de recursos.

Terraform "Terrari".

Hem parlat breument dels avantatges de l'eina, ara anem a desglossar-la en els seus components

Proveïdors. 

A Terraform, gairebé qualsevol tipus d'infraestructura es pot representar com a recurs. La connexió entre els recursos i la plataforma API la proporcionen mòduls de proveïdors, que us permeten crear recursos dins d'una plataforma específica, per exemple, Azure o VMware vCloud Director.

Com a part del projecte, podeu interactuar amb diferents proveïdors en diferents plataformes.

Recursos (descripció del recurs).

La descripció de recursos us permet gestionar components de la plataforma, com ara màquines virtuals o xarxes. 

Podeu crear vosaltres mateixos una descripció de recursos per al proveïdor de VMware vCloud Director i utilitzar aquesta descripció per crear recursos amb qualsevol proveïdor d'allotjament que utilitzi vCloud Director. Només cal que canvieu els paràmetres d'autenticació i els paràmetres de connexió de xarxa al proveïdor d'allotjament necessari

Proveïdors.

Aquest component permet realitzar operacions per a la instal·lació inicial i manteniment del sistema operatiu després de crear màquines virtuals. Un cop hàgiu creat un recurs de màquina virtual, podeu utilitzar proveïdors per configurar i connectar-vos mitjançant SSH, actualitzar el sistema operatiu i descarregar i executar un script. 

Variables d'entrada i de sortida.

Variables d'entrada: variables d'entrada per a qualsevol tipus de bloc. 

Les variables de sortida permeten desar valors després de crear recursos i es poden utilitzar com a variables d'entrada en altres mòduls, per exemple al bloc Provisioners.

Estats.

Els fitxers d'estats emmagatzemen informació sobre la configuració dels recursos de la plataforma del proveïdor. Quan es crea la plataforma per primera vegada, no hi ha informació sobre els recursos i abans de qualsevol operació, Terraform actualitza l'estat amb la infraestructura real dels recursos ja descrits.

L'objectiu principal dels estats és desar un munt d'objectes de recursos ja creats per comparar la configuració dels recursos i objectes afegits per evitar la creació i canvis repetits a la plataforma.

Per defecte, la informació de l'estat s'emmagatzema al fitxer terraform.tfstate local, però si cal, és possible utilitzar l'emmagatzematge remot per treballar en equip.

També podeu importar els recursos actuals de la plataforma a l'estat per interactuar encara més amb altres recursos que al seu torn es van crear sense l'ajuda de Terraform.  

2. Creació d'infraestructures

Els components s'han resolt, ara amb Terraform anirem creant una infraestructura amb tres màquines virtuals. El primer amb el servidor intermediari nginx instal·lat, el segon amb emmagatzematge de fitxers basat en Nextcloud i el tercer amb CMS Bitrix.

Escriurem codi i l'executarem amb el nostre exemple núvols a VMware vCloud Director. Els nostres usuaris reben un compte amb drets d'administrador de l'organització. Si utilitzeu un compte amb els mateixos drets en un altre núvol de VMware, podeu reproduir el codi dels nostres exemples. Va!

Primer, creem un directori per al nostre nou projecte en el qual es col·locaran els fitxers que descriuen la infraestructura.

mkdir project01

A continuació, descriurem els components de la infraestructura. Terraform crea relacions i processa fitxers en funció de la descripció dels fitxers. Els mateixos fitxers es poden anomenar en funció del propòsit dels blocs que es descriuen, per exemple, network.tf: descriu els paràmetres de xarxa per a la infraestructura.

Per descriure els components de la nostra infraestructura, hem creat els fitxers següents:

Llista de fitxers.

main.tf - descripció dels paràmetres per a l'entorn virtual - màquines virtuals, contenidors virtuals;

network.tf - descripció dels paràmetres de la xarxa virtual i les regles de NAT i tallafoc;

variables.tf - llista de variables que fem servir;

vcd.tfvars: valors de les variables del projecte per al mòdul VMware vCloud Director.

El llenguatge de configuració a Terraform és declaratiu i l'ordre dels blocs no importa, excepte els blocs de subministrament, perquè en aquest bloc es descriuen les ordres a executar en preparar la infraestructura i s'executaran en ordre.

Estructura de blocs.

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

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

Per descriure blocs, s'utilitza el seu propi llenguatge de programació HCL (HashiCorp Configuration Language); és possible descriure la infraestructura mitjançant JSON. Podeu obtenir més informació sobre la sintaxi llegiu al lloc web del desenvolupador.

Configuració de variables d'entorn, variables.tf i vcd.tfvars

Primer, creem dos fitxers que descriguin la llista de totes les variables utilitzades i els seus valors per al mòdul VMware vCloud Director. Primer, creem el fitxer variables.tf.

Contingut del fitxer 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" {}

Valors variables que rebem del proveïdor.

  • vcd_org_user: nom d'usuari amb drets d'administrador de l'organització,

  • vcd_org_password — contrasenya d'usuari,

  • vcd_org — nom de l'organització,

  • vcd_org_vdc — nom del centre de dades virtual,

  • vcd_org_url - URL de l'API,

  • vcd_org_edge_name — nom de l'encaminador virtual,

  • vcd_org_catalog — nom del directori amb plantilles de màquines virtuals,

  • vcd_edge_external_ip — adreça IP pública,

  • vcd_edge_external_network — nom de la xarxa externa,

  • vcd_org_hdd_sp — nom de la política d'emmagatzematge del disc dur,

  • vcd_org_ssd_sp — nom de la política d'emmagatzematge SSD.

I introduïu les nostres variables:

  • vcd_edge_local_ip_nginx — adreça IP de la màquina virtual amb NGINX,

  • vcd_edge_local_ip_bitrix: adreça IP de la màquina virtual amb 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud — Adreça IP de la màquina virtual amb Nextcloud.

Amb el segon fitxer creem i especifiquem variables per al mòdul VMware vCloud Director al fitxer vcd.tfvars: Recordem que en el nostre exemple fem servir propi núvol mClouds, si treballeu amb un altre proveïdor, comproveu els valors amb ells. 

Contingut del fitxer 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"

Configuració de la xarxa, network.tf.

Les variables d'entorn estan configurades, ara configurarem l'esquema de connexió de la màquina virtual: assignarem una adreça IP privada a cada màquina virtual i utilitzarem Destination NAT per "reenviar" els ports a la xarxa externa. Per limitar l'accés als ports de gestió, establirem l'accés només per a la nostra adreça IP.

Com gestionar la infraestructura del núvol amb TerraformDiagrama de xarxa per a la plataforma Terraform que s'està creant

Creem una xarxa organitzativa virtual amb el nom net_lan01, la passarel·la per defecte: 192.168.110.254, i també amb l'espai d'adreces: 192.168.110.0/24.

Descrivim una xarxa virtual.

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"

  }

}

Creem regles de tallafocs que permetin a les màquines virtuals accedir a Internet. Dins d'aquest bloc, tots els recursos virtuals del núvol tindran accés a Internet:

Descriurem les regles per a l'accés de VM a Internet.

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]

}

Una vegada establerta la dependència que després de processar el bloc vcdnetworkrouted.net, procedim a configurar el bloc vcdnsxvfirewallrule, mitjançant l'ús de depén de. Utilitzem aquesta opció perquè algunes dependències es poden reconèixer implícitament a la configuració.

A continuació, crearem regles que permetin l'accés als ports des de la xarxa externa i indicarem la nostra adreça IP per connectar-nos mitjançant SSH als servidors. Qualsevol usuari d'Internet té accés als ports 80 i 443 del servidor web, i un usuari amb una adreça IP de 90.1.15.1 té accés als ports SSH dels servidors virtuals.

Permet l'accés als ports des de la xarxa externa.

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]

}

Creem regles de NAT font per accedir a Internet des d'una xarxa local al núvol:

Descrivim les regles de la font 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]

}

I per completar la configuració del bloc de xarxa, afegim regles Destination NAT per accedir als serveis des de la xarxa externa:

Afegint regles de NAT de destinació.

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]

}

Afegiu una regla NAT per a la traducció de ports al servidor SSH a 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]

}

Afegiu una regla NAT per a la traducció de ports al servidor SSH amb 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]

}

Afegiu una regla NAT per a la traducció de ports al servidor SSH amb 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]

}

Configuració de l'entorn virtual Main.tf

Tal com teníem previst al principi de l'article, crearem tres màquines virtuals. Es prepararan mitjançant "Personalització de convidats". Establirem els paràmetres de xarxa segons els paràmetres que hem especificat i la contrasenya d'usuari es generarà automàticament.

Anem a descriure la vApp en què s'ubicaran les màquines virtuals i la seva configuració.

Com gestionar la infraestructura del núvol amb TerraformConfiguració de la màquina virtual

Creem un contenidor de vApp. Perquè puguem connectar immediatament la vApp i la VM a la xarxa virtual, també afegim el paràmetre depends_on:

Crea un contenidor

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

}

Creem una màquina virtual amb una descripció

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

}

}

Paràmetres principals a la descripció de la VM:

  • nom — nom de la màquina virtual,

  • vappname - nom de la vApp a la qual afegir una nova VM,

  • nom de catàleg / nom de plantilla: nom de catàleg i nom de plantilla de màquina virtual,

  • storageprofile - política d'emmagatzematge predeterminada.

Paràmetres del bloc de xarxa:

  • tipus: tipus de xarxa connectada,

  • nom: a quina xarxa virtual connectar la VM,

  • isprimary - adaptador de xarxa principal,

  • ipallocation_mode — Mode d'assignació d'adreces MANUAL / DHCP / POOL,

  • ip — Adreça IP de la màquina virtual, l'especificarem manualment.

bloc override_template_disk:

  • sizeinmb — mida del disc d'arrencada per a la màquina virtual

  • storage_profile — política d'emmagatzematge del disc

Creem una segona màquina virtual amb una descripció de l'emmagatzematge de fitxers 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 ]

}

A la secció vcdvminternal_disk descriurem un nou disc virtual connectat a la màquina virtual.

Explicacions per al bloc vcdvmininternaldisk:

  • bustype - tipus de controlador de disc

  • sizeinmb — mida del disc

  • busnumber / unitnumber - ubicació de connexió a l'adaptador

  • storage_profile — política d'emmagatzematge del disc

Anem a descriure l'última màquina virtual de 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

}

}

Actualització del sistema operatiu i instal·lació de scripts addicionals

Es prepara la xarxa, es descriuen les màquines virtuals. Abans d'importar la nostra infraestructura, podem realitzar l'aprovisionament inicial amb antelació mitjançant blocs de subministrament i sense utilitzar Ansible.

Vegem com actualitzar el sistema operatiu i executar l'script d'instal·lació de CMS Bitrix mitjançant el bloc de subministrament.

Primer, instal·lem els paquets d'actualització de 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" ]

}

}

}

Designació dels components:

  • provisioner "remote-exec": connecteu el bloc de subministrament remot

  • Al bloc de connexió es descriu el tipus i els paràmetres de la connexió:

  • tipus — protocol, en el nostre cas SSH;

  • usuari — nom d'usuari;

  • password — contrasenya d'usuari. En el nostre cas, apuntem al paràmetre vcdvappvm.nginx.customization[0].admin_password, que emmagatzema la contrasenya generada per a l'usuari del sistema.

  • host — adreça IP externa per a la connexió;

  • port — port per a la connexió, que s'havia especificat anteriorment a la configuració de DNAT;

  • en línia: llista la llista d'ordres que s'introduiran. Les ordres s'introduiran en l'ordre indicat en aquesta secció.

Com a exemple, executem, a més, l'script d'instal·lació 1C-Bitrix. La sortida del resultat de l'execució de l'script estarà disponible mentre s'executa el pla. Per instal·lar l'script, primer descrivim el bloc:

Anem a descriure la instal·lació de 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"

]

}

I de seguida descriurem l'actualització de Bitrix.

Un exemple d'aprovisionament 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"

]

}

}

Important! És possible que l'script no funcioni si no desactiveu SELinux per endavant! Si necessiteu un article detallat sobre la instal·lació i la configuració de CMS 1C-Bitrix mitjançant bitrix-env.sh, oo podeu utilitzeu l'article del nostre blog al lloc web.

3. Inicialització d'infraestructura

Com gestionar la infraestructura del núvol amb TerraformInicialització de mòduls i complements

Per treballar, utilitzem un senzill "kit de gentleman": un ordinador portàtil amb sistema operatiu Windows 10 i un kit de distribució del lloc web oficial terraform.io. Descomprimim i inicialitzem amb l'ordre: terraform.exe init

Després de descriure la infraestructura informàtica i de xarxa, iniciem la planificació per provar la nostra configuració, on podem veure què es crearà i com es connectarà entre ells.

  1. Executeu l'ordre - terraform plan -var-file=vcd.tfvars.

  2. Obtenim el resultat - Plan: 16 to add, 0 to change, 0 to destroy. És a dir, segons aquest pla, es crearan 16 recursos.

  3. Llencem el pla al comandament - terraform.exe apply -var-file=vcd.tfvars.

Es crearan màquines virtuals i, a continuació, els paquets que hem enumerat s'executaran dins de la secció de subministrament: el sistema operatiu s'actualitzarà i s'instal·larà CMS Bitrix.

Recepció de dades de connexió

Després d'executar el pla, volem rebre dades en forma de text per connectar-nos als servidors, per això formarem la secció de sortida de la següent manera:

output "nginxpassword" {

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

}

I la sortida següent ens indica la contrasenya per a la màquina virtual creada:

Outputs: nginx_password = F#4u8!!N

Com a resultat, tenim accés a màquines virtuals amb un sistema operatiu actualitzat i paquets preinstal·lats per al nostre treball posterior. Tot a punt!

Però, què passa si ja tens una infraestructura existent?

3.1. Treballant Terraform amb la infraestructura existent

És senzill, podeu importar màquines virtuals actuals i els seus contenidors vApp mitjançant l'ordre d'importació.

Descrivim el recurs vAPP i la màquina virtual.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

El següent pas és importar les propietats dels recursos de vApp en el format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>on:

  • vApp: nom de vApp;

  • org — nom de l'organització;

  • org_vdc — nom del centre de dades virtual.

Com gestionar la infraestructura del núvol amb TerraformImportació de propietats de recursos vAPP

Importem les propietats dels recursos de VM en el format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, en quin:

  • VM: nom de VM;

  • vApp: nom de vApp;

  • org — nom de l'organització;

  • orgvdc és el nom del centre de dades virtual.

La importació ha estat correcta

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.

Ara podem mirar el nou recurs importat:

Recurs importat

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

}

}

Ara definitivament estem preparats: hem acabat amb l'últim punt (importar a la infraestructura existent) i hem considerat tots els punts principals de treballar amb Terraform. 

L'eina va resultar molt convenient i us permet descriure la vostra infraestructura com a codi, començant des de les màquines virtuals d'un proveïdor de núvol fins a descriure els recursos dels components de la xarxa.

Al mateix temps, la independència de l'entorn permet treballar amb recursos locals, al núvol, i fins i tot gestionar la plataforma. I si no hi ha cap plataforma compatible i en voleu afegir una de nova, podeu escriure el vostre propi proveïdor i utilitzar-lo.

Font: www.habr.com

Afegeix comentari