Introducción
La gestión de configuración es el proceso de manejar cambios en un sistema de manera que asegure la integridad a lo largo del tiempo, típicamente involucrando herramientas y procesos que facilitan la automatización y la observabilidad. Aunque este concepto no surgió en la industria de TI, el término se usa ampliamente para referirse a gestión de configuración de servidores.
En el contexto de los servidores, la gestión de configuración también se conoce comúnmente como Automatización de TI o Orquestación de Servidores. Ambos términos resaltan los aspectos prácticos de la gestión de configuración y la capacidad de controlar múltiples sistemas desde un servidor central.
Esta guía te llevará a través de los beneficios de usar una herramienta de gestión de configuración para automatizar la configuración de tu infraestructura de servidores, y cómo una herramienta como Ansible puede ayudarte en eso.
Beneficios de Usar una Herramienta de Gestión de Configuración
Existen varios herramientas de gestión de configuración disponibles en el mercado, con diferentes niveles de complejidad y estilos arquitectónicos diversos. Aunque cada una de estas herramientas tiene sus propias características y funciona de manera ligeramente diferente, todas proporcionan la misma función: asegurar que el estado de un sistema coincida con el estado descrito por un conjunto de scripts de aprovisionamiento.
Muchos de los beneficios de la gestión de configuración para servidores provienen de la capacidad de definir tu infraestructura como código. Esto te permite:
- Utilizar un sistema de control de versiones para llevar un registro de cualquier cambio en tu infraestructura
- Reutilizar scripts de aprovisionamiento para múltiples entornos de servidor, como desarrollo, pruebas y producción
- Compartir scripts de aprovisionamiento entre compañeros de trabajo para facilitar la colaboración en un entorno de desarrollo estandarizado
- Optimizar el proceso de replicación de servidores, lo que facilita la recuperación de errores críticos
Además, las herramientas de gestión de configuración ofrecen una manera de controlar de uno a cientos de servidores desde una ubicación centralizada, lo que puede mejorar drásticamente la eficiencia y la integridad de tu infraestructura de servidores.
Descripción general de Ansible
Ansible es una herramienta moderna de gestión de configuración que facilita la tarea de configurar y mantener servidores remotos, con un diseño minimalista destinado a poner a los usuarios en funcionamiento rápidamente.
Los usuarios escriben scripts de aprovisionamiento de Ansible en YAML, un estándar de serialización de datos amigable para el usuario que no está vinculado a ningún lenguaje de programación en particular. Esto permite a los usuarios crear scripts de aprovisionamiento sofisticados de manera más intuitiva en comparación con herramientas similares en la misma categoría.
Ansible no requiere que se instale ningún software especial en los nodos que serán gestionados con esta herramienta. Una máquina de control se configura con el software de Ansible, que luego se comunica con los nodos a través de SSH estándar.
Como herramienta de gestión de configuración y marco de automatización, Ansible encapsula todas las características comunes presentes en otras herramientas de la misma categoría, manteniendo aún así un enfoque fuerte en la simplicidad y el rendimiento:
Comportamiento Idempotente
Ansible lleva un registro del estado de los recursos en los sistemas gestionados para evitar repetir tareas que ya se ejecutaron. Si un paquete ya estaba instalado, no intentará instalarlo de nuevo. El objetivo es que después de cada ejecución de aprovisionamiento, el sistema alcance (o mantenga) el estado deseado, incluso si se ejecuta varias veces. Esto es lo que caracteriza a Ansible y otras herramientas de gestión de configuración como teniendo un comportamiento idempotente. Al ejecutar un playbook, verás el estado de cada tarea que se ejecuta y si la tarea realizó o no un cambio en el sistema.
Soporte a Variables, Condicionales y Bucles
Al escribir scripts de automatización con Ansible, puedes utilizar variables, condicionales y bucles para hacer que tu automatización sea más versátil y eficiente.
Hechos del Sistema
Ansible recolecta una serie de información detallada sobre los nodos gestionados, como interfaces de red y sistema operativo, y la proporciona como variables globales llamadas hechos del sistema. Los hechos pueden ser utilizados dentro de los playbooks para hacer que tu automatización sea más versátil y adaptable, comportándose de manera diferente dependiendo del sistema que se esté aprovisionando.
Sistema de Plantillas
Ansible utiliza el sistema de plantillas Jinja2 de Python para permitir expresiones dinámicas y acceso a variables. Las plantillas pueden ser utilizadas para facilitar la configuración de archivos de configuración y servicios. Por ejemplo, puedes usar una plantilla para configurar un nuevo host virtual dentro de Apache, reutilizando la misma plantilla para múltiples instalaciones de servidores.
Soporte para Extensiones y Módulos
Ansible cuenta con cientos de módulos incorporados para facilitar la escritura de automatización para tareas comunes de administración de sistemas, como la instalación de paquetes con apt
y la sincronización de archivos con rsync
, y también para manejar software popular como sistemas de bases de datos (como MySQL, PostgreSQL, MongoDB, entre otros) y herramientas de gestión de dependencias (como composer
de PHP, gem
de Ruby, npm
de Node, y otros). Además de eso, hay varias formas en que puedes extender Ansible: los plugins y módulos son buenas opciones cuando necesitas una funcionalidad personalizada que no está presente por defecto.
También puedes encontrar módulos y plugins de terceros en el portal Ansible Galaxy.
Familiarizándose con los Conceptos de Ansible
Ahora veremos la terminología y los conceptos de Ansible para ayudarte a familiarizarte con estos términos a medida que aparezcan a lo largo de esta serie.
Nodo de Control
Un nodo de control es un sistema donde Ansible está instalado y configurado para conectarse a tu servidor. Puedes tener múltiples nodos de control, y cualquier sistema capaz de ejecutar Ansible puede configurarse como un nodo de control, incluyendo computadoras personales o portátiles que ejecutan un sistema operativo basado en Linux o Unix. Por el momento, Ansible no puede instalarse en hosts Windows, pero puedes eludir esta limitación configurando una máquina virtual que ejecute Linux y ejecutando Ansible desde allí.
Nodos Administrados
Los sistemas que controlas usando Ansible se llaman nodos administrados. Ansible requiere que los nodos administrados sean accesibles vía SSH, y tengan Python 2 (versión 2.6 o superior) o Python 3 (versión 3.5 o superior) instalado.
Ansible soporta una variedad de sistemas operativos, incluyendo servidores Windows como nodos administrados.
Inventario
Un archivo de inventario contiene una lista de los hosts que gestionarás utilizando Ansible. Aunque Ansible suele crear un archivo de inventario predeterminado al instalarse, puedes utilizar inventarios por proyecto para tener una mejor separación de tu infraestructura y evitar ejecutar comandos o playbooks en el servidor equivocado por error. Los inventarios estáticos suelen crearse como archivos .ini
, pero también puedes usar inventarios generados dinámicamente escritos en cualquier lenguaje de programación capaz de devolver JSON.
Tareas
En Ansible, una tarea es una unidad individual de trabajo a ejecutar en un nodo gestionado. Cada acción a realizar se define como una tarea. Las tareas pueden ejecutarse como una acción puntual mediante comandos ad-hoc, o incluirse en un playbook como parte de un script de automatización.
Playbook
Un playbook contiene una lista ordenada de tareas, y algunas otras directivas para indicar en qué hosts se dirige esa automatización, si se debe usar o no un sistema de escalado de privilegios para ejecutar esas tareas, y secciones opcionales para definir variables o incluir archivos. Ansible ejecuta las tareas secuencialmente, y una ejecución completa de un playbook se llama juego. Los playbooks se escriben en formato YAML.
Manejadores
Manejadores se utilizan para realizar acciones en un servicio, como reiniciar o detener un servicio que está activamente en ejecución en el sistema del nodo gestionado. Los manejadores suelen ser activados por tareas y su ejecución ocurre al final de una jugada, después de que todas las tareas hayan terminado. De esta manera, si más de una tarea activa un reinicio a un servicio, por ejemplo, el servicio solo se reiniciará una vez y después de que todas las tareas se hayan ejecutado. Aunque el comportamiento predeterminado de los manejadores es más eficiente y en general una mejor práctica, también es posible forzar la ejecución inmediata de los manejadores si una tarea lo requiere.
Roles
Un rol es un conjunto de playbooks y archivos relacionados organizados en una estructura predefinida que es conocida por Ansible. Los roles facilitan la reutilización y la adaptación de playbooks en paquetes compartibles de automatización granular para objetivos específicos, como instalar un servidor web, instalar un entorno PHP o configurar un servidor MySQL.
Conclusión
Ansible es una herramienta de automatización IT minimalista que tiene una curva de aprendizaje suave, en parte gracias a su uso de YAML para sus scripts de aprovisionamiento. Tiene una gran cantidad de módulos incorporados que pueden usarse para abstraer tareas como la instalación de paquetes y el trabajo con plantillas. Sus requisitos de infraestructura simplificados y su sintaxis accesible pueden ser una buena opción para aquellos que están comenzando con la gestión de configuración.
En la siguiente parte de esta serie, veremos cómo instalar y empezar a usar Ansible en un servidor Ubuntu 20.04.