Docker en VMware VSphere con Terraform
Terraform es un software de infraestructura como código (infrastructure as code) desarrollado por HashiCorp. Permite a los usuarios definir y configurar la infraestructura de un centro de datos en un lenguaje de alto nivel, generando un plan de ejecución para desplegar la infraestructura en los principales Servicios de Cloud. En este caso realizaremos un despliegue de una maquina virtual (VM) en VMware VSphere a través de su VCenter Server.
En este caso vamos a desplegar una Virtual Machine con Photon 3.0, la que contiene en su interior el servicio Docker, en su totalidad con un despliegue en 100% a través de Terraform.
Prerrequisitos
- VMware Vcenter Server (Usuario y Contraseña)
- Terraform CLI
- Interfaz de red VMware con DHCP
Manos a la obra
Primero configuramos el archivo _provider.tf en donde definiremos el proveedor a usar y sus respectivos accesos. En este caso los accesos a VMware VCenter Server .
_provider.tf
provider "vsphere" {
user = "xxxxxx@vsphere.local"
password = "your-password"
vsphere_server = "fqdn-vcenter-server"
# If you have a self-signed cert
allow_unverified_ssl = true
}
Luego configuramos el archivo main.tf en donde definiremos todos la información referente a la instalación de nuestra VM y sus caracteristicas.
_provider.tf
data "vsphere_datacenter" "DC" {
name = "CLS_DW" # Nombre de Data Center
}
data "vsphere_datastore" "STG" {
name = "LUN_11" # Nombre de Almacen de Datos
datacenter_id = data.vsphere_datacenter.DC.id
}
data "vsphere_resource_pool" "POOL" {
name = "01-Docker" # Nombre de Pool de Recursos (Si Aplica)
datacenter_id = data.vsphere_datacenter.DC.id
}
data "vsphere_host" "ESX" {
name = "esx01.dwvap.com" # Nombre de Servidor ESX
datacenter_id = data.vsphere_datacenter.DC.id
}
data "vsphere_network" "NET" {
name = "QA" # Nombre de Adaptador de Red
datacenter_id = data.vsphere_datacenter.DC.id
}
resource "vsphere_virtual_machine" "mydocker01" {
name = "mydocker01"
resource_pool_id = data.vsphere_resource_pool.POOL.id
datastore_id = data.vsphere_datastore.STG.id
host_system_id = data.vsphere_host.ESX.id
wait_for_guest_net_timeout = 0
wait_for_guest_ip_timeout = 0
datacenter_id = data.vsphere_datacenter.DC.id
num_cpus = 2 # Especificar Cantidad de CPU
memory = 4096 # Especificar Cantidad de Memoria a Asignar
network_interface {
network_id = data.vsphere_network.NET.id
}
disk {
unit_number = 1
label = "data"
size = 20 # Cantidad de Disco Presentado en [GiB]
}
ovf_deploy {
# Url to remote ovf/ova file
remote_ovf_url = "https://packages.vmware.com/photon/3.0/Rev3/ova/photon-hw11-3.0-a383732.ova" # Photon 3.0
}
}
Luego Abrimos un consola en el directorio donde se encuentran los archivos y ejecutamos los siguientes comandos:
Comando terraform init
El comando terraform init se utiliza para inicializar una configuración de Terraform. Este es el primer comando que se debe ejecutar para cualquier configuración de Terraform nueva o existente.
terraform init
Luego ejecutamos el siguiente comando:
Comando terraform plan
El comando terraform plan se utiliza para crear un plan de ejecución. Terraform realiza una actualización, a menos que se deshabilite explícitamente y, a continuación, determina qué acciones son necesarias para lograr el estado deseado especificado en los archivos de configuración. En el se describiran todos los componentes, que se agregaran, modificaran o eliminaran.
terraform plan
Luego ejecutamos el siguiente comando:
Comando terraform apply
El comando terraform apply se utiliza para aplicar los cambios necesarios para alcanzar el estado deseado de la configuración, o el conjunto predefinido de acciones generado por un plan ejecución. En el también se describiran todos los componentes, que se agregaran, modificaran o eliminaran.
terraform apply
El la consola se deberá aceptar la aplicación de la configuración escribiendo yes cuando la consola lo solicite.
Luego veremos el avance de la creación de la VM hasta que finalice completamente.
Una vez completado, podremos ingresar a a nuestro VCenter Serve para ver las características y el estado de la maquina Virtual.
Nota: Por defecto los accesos para Photon OS son los siguientes:
- Usuario: root
- Contraseña: changeme
Con la información del direccionamiento IP de la maquina virtual, podremos ingresar a través de SSH al Servidor, de la siguiente manera:
ssh root@ip-server
Ahora debemos cambiar la contraseña por la que nosotros establezcamos.
Una vez que ya podamos ingresar al sistema operativo, docker ya se encuentra instalado por lo que debemos ejecutar los siguintes comandos:
Comando systemctl enable docker
Permite que el servicio docker se corra al iniciar el dispositivo.
systemctl enable docker
Comando systemctl start docker
Permite que el servicio inicie inmediatamente.
systemctl start docker
Comando systemctl status docker
Permite que el estado del servicio docker.
systemctl status docker
Iniciar nuestro primer container en Docker
En este caso vamos a inicializar una imagen de personalizada de VMware que muestra la pagina de inicio de Photon en un servidor nginx.
docker run -d -p 80:80 vmwarecna/nginx
Comando run
El comando docker run crea y arranca un contenedor para ejecutar unos comandos ya establecidos en el Dockerfile o los que se pasen como un parámetro. De estos, sólo tiene un parámetro obligatorio que es el nombre de la imagen que usará para crear el contenedor.
Parametros:
- -p 80:80 — Expondra el puerto 80 del contenedor en el puerto 80 del servidor.
- vmwarecna/nginx — nombre_repositorio/imagen
- -d — Correr la imagen en segundo plano.
Podemos probar el acceso a nuestro nuevo contenedor a través de un Curl o el navegador (Se debe tener acceso a la red del Servidor Docker).
curl http://127.0.0.1
http://127.0.0.1
Comando terraform destroy
El comando terraform destroy se utiliza para destruir la infraestructura gestionada por Terraform.
terraform destroy
En la consola se debera aceptar la eliminación de la configuración, escribiendo yes cuando la consola lo solicite.
Nota: Siempre revisar el resultado del terraform destroy para saber todos los componenetes que se eliminaran. Al esta seguro aceptar la eliminación de la infraestructura gestionada.
Originally published at http://www.facmin.cl.