Terraform+Proxmox, la experiencia en mi homelab, parte 1

Hola a todos. En esta serie de posts voy a poner mi experiencia acerca de pruebas hechas con Proxmox y Terraform, cómo provisionar VMs(máquinas virtuales) y CTs(Contenedores) desde cero. Además, cómo crear plantillas dentro del Proxmox que más tarde serán usadas como base para generar VMs, todo con Terraform.

Proxmox, todos los que trabajamos en IT/SRE/Administración de Redes lo conocemos como la solución de primera mano para resolver los problemas de infraestructura, entornos de desarrollo para pequeñas empresas, o simplemente como laboratorio de pruebas a la hora de testear o llevar a producción cierto stack.

Pero, ¿qué es Terraform?

Terraform es un software de infraestructura como código (Infrastructure as Code o IaC) 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 OpenStack, por ejemplo, u otros proveedores de servicio tales como AWS, IBM Cloud (antiguamente Bluemix), Google Cloud Platform, Linode, Microsoft Azure, Oracle Cloud Infrastructure o VMware vSphere. La infraestructura se define utilizando la sintaxis de configuración de HashiCorp denominada HashiCorp Configuration Language (HCL) o, en su defecto, el formato JSON.

Resumen y sin mucho tecnicismo: Terraform manda a ejecutar acciones en la plataforma que se le configure y levanta toda una infraestructura desde cero.

Lo primero es instalar Terraform en tu pc. Para ello sólo debemos ejecutar en nuestra consola como usuario con privilegios:

El comando de descarga con wget, ustedes saben, con VPN, pues está bloqueado para Cuba. La documentación de Hashicorp, libre, las descargas, no… 😥

También puedes ir a su página de descarga y descargarlo a mano.

Hecho esto, como usuario sin privilegios en la consola, probamos que funciona:

Y debería responder:

Versión 1.1.9, en lo que se escribía este post.

A continuación se muestran los conceptos/terminologías centrales que se utilizan en Terraform y que veremos más adelante:

  • Variables: Variables de entrada, es un par clave-valor utilizado por los módulos Terraform para permitir la personalización.
  • Proveedor: Es un complemento para interactuar con las API de servicio y acceder a sus recursos relacionados.
  • Módulo: Es una carpeta con plantillas Terraform donde se definen todas las configuraciones
  • Estado: Consiste en información en caché sobre la infraestructura administrada por Terraform y las configuraciones relacionadas.
  • Recursos: Se refiere a un bloque de uno o más objetos de infraestructura (instancias de cómputo, redes virtuales, etc.), que se utilizan para configurar y administrar la infraestructura.
  • Fuente de datos: Los proveedores lo implementan para devolver información sobre objetos externos a Terraform.
  • Valores de salida: Estos son valores de retorno de un módulo terraform que pueden ser utilizados por otras configuraciones.
  • Planificar: Es una de las etapas en las que determina qué se debe crear, actualizar o destruir para pasar del estado real / actual de la infraestructura al estado deseado.
  • Aplicar: Es una de las etapas donde se aplican los cambios de estado real/actual de la infraestructura para pasar al estado deseado.

Comandos importantes de Terraform:

  • terraform init: Inicializa el directorio de trabajo que donde están todos los archivos de configuración.
  • terraform plan: Se utiliza para crear un plan de ejecución para alcanzar el estado deseado de la infraestructura. Los cambios en los archivos de configuración se realizan para lograr el estado deseado.
  • terraform apply: Realiza los cambios en la infraestructura tal como se define en el plan, y la infraestructura llega al estado deseado.
  • terraform destroy: Se utiliza para eliminar todos los recursos de infraestructura antiguos, que están marcados como inoperables/no usables después de la fase de aplicación.

Entonces, ya tenemos Terraform, ahora sólo nos falta el plugin o conector que nos permitirá conectar con Proxmox. Dicho conector/plugin está acá y se llama Terraform Proxmox Provider. En el momento de escribir este post a última versión estable era la 2.9.10.

Para el siguiente procedimiento, no es necesario ser root, como usuario normal, funciona a las mil maravillas

Que quede de la siguiente forma:

Y listo, con eso podemos proseguir. Los archivos checkpoint_cache y checkpoint_signature se crean cuando ejecute Terraform la primer vez, así que ni se preocupen por ellos, no son necesarios en esta parte del tutorial.

Hasta acá he explicado bastante, espero hayan entendido, si no, a comentarios. Nos vemos en la parte 2 de la serie…

Referencias:

How to deploy VMs in Proxmox with Terraform

https://www.digitalocean.com/community/tutorials/how-to-structure-a-terraform-project

How to deploy VMs in Proxmox with Terraform

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.