La administración de configuración es el proceso de manejar los cambios en un sistema de manera que se asegure la integridad a lo largo del tiempo, lo que suele implicar herramientas y procesos que facilitan la automatización y la capacidad de observación. Si bien este concepto no se originó en la industria de IT, el término se utiliza ampliamente para referirse a la administración de la configuración de servidores.
En el contexto de los servidores, la administración de la configuración también se suele denominar automatización de TI u orquestación de servidores. Estos dos términos destacan los aspectos prácticos de la administración de la configuración y la capacidad de controlar varios sistemas desde un servidor central.
Esta guía lo orientará sobre los beneficios que proporciona la utilización de una herramienta de administración de configuración para automatizar los ajustes de la infraestructura de servidores y le demostrará cómo una de esas herramientas, Ansible, puede ayudarlo a hacerlo.
Hay varias herramientas de administración de configuración disponibles en el mercado, con distintos niveles de complejidad y estilos de arquitectura. Si bien cada una de estas herramientas tiene sus propias características y funciona de manera algo distinta, todas ellas ofrecen la misma función: asegurarse de que el estado de un sistema coincida con el estado descrito por un conjunto de secuencias de comandos de aprovisionamiento.
Muchos de los beneficios de la administración de configuración para los servidores provienen de la capacidad de definir la infraestructura como código. Esto le permite hacer lo siguiente:
Además, las herramientas de administración de configuración le ofrecen una forma de controlar hasta cientos de servidores desde una ubicación centralizada, lo que puede mejorar drásticamente la eficiencia y la integridad de la infraestructura de su servidor.
Ansible es una herramienta de administración de configuración moderna que facilita la tarea de configurar y mantener servidores remotos con un diseño minimalista destinado a hacer que los usuarios puedan estar operativos rápidamente.
Los usuarios escriben secuencias de comandos de aprovisionamiento de Ansible en YAML, un estándar de serialización de datos fácil de usar que no está vinculado a ningún lenguaje de programación en particular. Esto permite a los usuarios crear secuencias de comandos de aprovisionamiento de forma más intuitiva en comparación con herramientas similares de la misma categoría.
La herramienta Ansible no requiere la instalación de ningún software especial en los nodos que se administrarán con ella. El software Ansible instala una máquina de control que, luego, se comunica con los nodos a través de SSH estándar.
Como herramienta de administración de configuración y marco de automatización, Ansible reúne todas las funciones comunes presentes en otras herramientas de la misma categoría, a la vez que mantiene un fuerte enfoque en la simplicidad y el rendimiento:
Ansible realiza un seguimiento del estado de los recursos en los sistemas administrados para evitar repetir tareas ejecutadas con anterioridad. Si ya se instaló un paquete, no intentará volver a instalarlo. El objetivo es que, después de cada ejecución de aprovisionamiento, el sistema alcance (o mantenga) el estado deseado, aunque lo ejecute varias veces. Esto es lo que caracteriza a Ansible y otras herramientas de administración de configuración que tienen un comportamiento idempotente. Al ejecutar un playbook, verá el estado de cada tarea que se ejecute y si la tarea realizó o no un cambio en el sistema.
Al escribir secuencias de comandos de automatización de Ansible, puede usar variables, condicionales y bucles para hacer que la automatización sea más versátil y eficiente.
Ansible recopila una serie de datos detallados sobre los nodos administrados, como las interfaces de red y el sistema operativo, y los proporciona como variables globales denominadas datos del sistema. Los datos pueden usarse en playbooks para hacer que la automatización sea más versátil y adaptativa, y se comportarán de forma diferente según el sistema que se aprovisione.
Ansible utiliza el sistema de plantillas Jinja2 de Python para permitir expresiones dinámicas y el acceso a las variables. Las plantillas pueden usarse para facilitar el ajuste de archivos y servicios de configuración. Por ejemplo, puede usar una plantilla para configurar un nuevo host virtual en Apache y volver a utilizar la misma plantilla para varias instalaciones de servidores.
Ansible viene con cientos de módulos incorporados para facilitar la automatización de la escritura en tareas comunes de administración de sistemas, como la instalación de paquetes con apt
y la sincronización de archivos con rsync
, así como para administrar software populares, como sistemas de bases de datos (por ejemplo, MySQL, PostgreSQL y MongoDB, entre otros) y herramientas de administración de dependencias (como composer
de PHP, gem
de Ruby y npm
de Node, entre otras). Además, Ansible se puede ampliar de varias maneras: los complementos y los módulos son buenas opciones cuando se necesita una funcionalidad personalizada que no está presente por defecto.
También puede encontrar módulos y complementos de terceros en el portal Ansible Galaxy.
Ahora, veremos la terminología y los conceptos de Ansible para ayudarlo a familiarizarse con estos términos que se irán presentando a lo largo de esta serie.
Un nodo de control es un sistema en el que se instala y configura Ansible para establecer conexión con su servidor. Puede tener varios nodos de control y puede configurar como nodo de control cualquier sistema que pueda ejecutar Ansible, incluso equipos personales o portátiles que ejecuten un sistema operativo basado en Linux o Unix. Por el momento, no se puede instalar Ansible en hosts de Windows, pero puede sortear esta limitación estableciendo una máquina virtual que ejecute Linux y ejecutando Ansible allí.
Los sistemas que controla usando Ansible se denominan nodos administrados. Ansible requiere que se pueda acceder a los nodos administrados a través de SSH y que tengan instalado Python 2 (versión 2.6 o superior) o Python 3 (versión 3.5 o superior).
Ansible admite varios sistemas operativos como nodos administrados, incluso servidores de Windows.
Los archivos de inventario contienen una lista de los hosts que administrará usando Ansible. Si bien, en general, Ansible crea un archivo de inventario predeterminado cuando se instala, puede usar inventarios por proyecto para tener una mejor separación de la infraestructura y evitar ejecutar comandos o playbooks en un servidor equivocado por error. Los inventarios estáticos se suelen crear como archivos .ini
, pero también puede usar inventarios generados de forma dinámica escritos en cualquier lenguaje de programación que pueda devolver JSON.
En Ansible, una tarea es una unidad de trabajo individual que se ejecuta en un nodo administrado. Cada acción que se debe ejecutar 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 una secuencia de comandos de automatización.
Los playbooks contienen una lista ordenada de tareas y algunas otras directivas para indicar qué hosts son el objetivo de esa automatización, si se debe utilizar o no un sistema de elevación de privilegios para ejecutar esas tareas y secciones opcionales para definir variables o incluir archivos. Ansible ejecuta tareas de forma secuencial, y la ejecución completa de un playbook se denomina play. Los playbooks se escribirán en formato YAML.
Los controladores se utilizan para realizar acciones en un servicio, por ejemplo, para reiniciar o detener un servicio que se está ejecutando activamente en el sistema de un nodo administrado. Los controladores se suelen activar con tareas y su ejecución se realiza al final de un play, una vez que se completaron todas las tareas. De esta manera, si más de una tarea desencadena el reinicio de un servicio, por ejemplo, el servicio solo se reiniciará una vez, después de que se ejecuten todas las tareas. Si bien el comportamiento predeterminado de los controladores es más eficiente y, en general, lo más recomendable, también es posible forzar la ejecución inmediata de un controlador si así lo requiere una tarea.
Una función es un conjunto de playbooks y archivos relacionados organizados en una estructura predefinida que Ansible reconoce. Las funciones facilitan la reutilización y la reasignación de playbooks en paquetes compartidos de automatización granular para objetivos específicos, como la configuración de un servidor web, de un entorno PHP o de un servidor MySQL.
Ansible es una herramienta de automatización de TI minimalista que tiene una curva de aprendizaje moderada, en parte, gracias a que utiliza YAML para sus secuencias de comando de aprovisionamiento. Cuenta con una gran cantidad de módulos incorporados que pueden usarse para tareas abstractas, por ejemplo, para instalar paquetes y trabajar con plantillas. Sus requisitos de infraestructura simplificados y su sintaxis accesible pueden ser una buena opción para quienes se están iniciando en la administración de configuración.
En la siguiente parte de esta serie, veremos cómo instalar y comenzar a comenzar a utilizar Ansible en un servidor Ubuntu 20.04.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!