Ansible es una herramienta de automatización de código abierto que los administradores de sistemas utilizan para automatizar la configuración de la infraestructura, la implementación de aplicaciones y la gestión de la configuración. No tiene agente, lo que significa que no requiere la instalación de ningún software en los hosts, a diferencia de otras herramientas de automatización, para realizar las tareas necesarias. En su lugar, utiliza SSH, si el sistema de destino está basado en Linux, WinRM si el sistema de destino está basado en Windows o una API si el sistema de destino expone una API.
Utiliza un lenguaje de programación declarativo para definir la configuración de destino deseada. Sin embargo, no declara cómo debe realizarse la configuración. Por ejemplo, para crear una nueva máquina virtual, debe definir las especificaciones de la máquina virtual de destino y cómo se implementará. Ansible Engine, con la ayuda del módulo correspondiente, realiza la tarea necesaria.
Automatización en el mundo TI
Se necesita automatización en el mundo de TI para evitar realizar acciones repetitivas manualmente y para acelerar el ciclo de implementación. Ansible está destinado a abordar estas necesidades. Estos son algunos ejemplos de cómo Ansible puede ser una parte esencial de su infraestructura de TI:
Infraestructura como código
- La activación de nuevas máquinas virtuales se puede realizar de varias formas. Sin embargo, después de poner en marcha una nueva máquina virtual, aún necesita instalar paquetes de software adicionales, aplicaciones, etc. hasta que el nuevo sistema funcione. Con Ansible, puede automatizar todo el proceso, desde la creación de una nueva máquina virtual hasta la configuración de la aplicación.
- Si tiene un entorno de nube que crece continuamente, las diferentes herramientas nativas de la nube pueden lograr agregar nuevos recursos informáticos a su nube. Aún así, primero debe preparar el hardware antes de conectarlo (es decir, crear configuraciones RAID para discos locales, agregar VLAN a su perfil, etc.). Ansible puede ser la herramienta principal para preparar su hardware y conectarlo a su nube mediante API nativas de la nube.
Automatización de aplicaciones
- Suponga que tiene una aplicación que requiere actualizaciones periódicas. Por ejemplo, agregar nuevas entradas en una base de datos se puede completar de varias maneras. Si su aplicación está dispersa entre servidores específicos, en lugar de crear diferentes secuencias de comandos para varios sistemas, puede crear un libro de jugadas de Ansible que contenga una o más jugadas para automatizar y orquestar esta acción de la A a la Z.
[ También le puede interesar leer: Presentamos el nuevo Ansible Automation Hub ]
Módulos de Ansible
Los módulos de Ansible toman las instrucciones para realizar las tareas. Uno de los puntos más importantes de Ansible es su amplia comunidad, que crea periódicamente nuevos módulos. Estos módulos suelen estar codificados en Python. La instalación inicial siempre viene con módulos preinstalados. Sin embargo, puede instalar módulos adicionales desde Internet. Puede obtener más información sobre cada módulo (es decir, qué está haciendo este módulo, cómo usarlo, ejemplos, etc.) de dos maneras:
En línea :Buscando en la documentación de Ansible.
Al buscar, debe asegurarse de elegir la versión de Ansible adecuada de la lista desplegable en la esquina superior izquierda de la página.
Sin conexión :Usando el ansible-doc
comando desde la línea de comando.
$ ansible-doc file
Aquí, está buscando cómo usar un módulo llamado file
. La rica selección de módulos de Ansible es en realidad un arma de doble filo, donde tiene sus ventajas y desventajas.
Ventajas:
- Puede encontrar un módulo para casi todas las tareas que desee realizar.
- Tienes una gran comunidad para apoyarte si es necesario.
Desventajas:
- Con tantos módulos, puede confundirse rápidamente sobre cuál usar. Es por eso que cuando comienza a planear usar Ansible para automatizar tareas específicas, necesita crear una estrategia para determinar qué módulos usar y probarlos.
- Encontrará muchos módulos comunitarios que ya nadie admite o que están obsoletos con las nuevas versiones de Ansible. Asegúrese de realizar cuidadosamente cada nueva actualización de Ansible. Además, realice suficientes pruebas antes de mover el módulo a su entorno de producción antes de arriesgar su cadena de automatización. Elegir módulos para usar y crear una estrategia de automatización es algo que hará con el tiempo.
Ansible y Python
Ansible depende en gran medida de Python. La mayoría de los módulos están codificados con Python. Además, el sistema basado en Linux de destino debe tener Python instalado para comenzar a automatizar tareas con Ansible. Aunque Ansible depende en gran medida de Python, no se requiere un conocimiento profundo de Python. Sin embargo, saber cómo usar pip
para administrar paquetes de Python (instalar, actualizar, etc.) y se recomienda crear entornos virtuales de Python.
Advertencias:
- Cambiar las versiones de Python o cualquiera de los paquetes preinstalados en el sistema Ansible Engine es una acción arriesgada que puede romper su cadena de automatización.
- Si está utilizando el motor Ansible compatible con Red Hat, Red Hat lo ayudará a crear su entorno virtual de Python si lo desea, pero el contenido del entorno virtual no es compatible.
Ansible Engine frente a Ansible Tower
Ansible está destinado a ser utilizado por diferentes equipos de DevOps. Ansible Tower permite que muchos equipos ejecuten tareas de automatización desde una ubicación centralizada que permite RBAC, registro de tareas ejecutadas, una GUI para ejecutar tareas y más funciones. Tener un sistema de automatización centralizado para una gran cadena de automatización simplificará sus tareas de mantenimiento. Para una pequeña cadena de automatización de Ansible, se puede usar Ansible Engine, que es un nodo basado en Linux con archivos binarios de Ansible instalados. En esta configuración, se perderá RBAC y la GUI. Sin embargo, Ansible Engine proporciona el entorno necesario para ejecutar las tareas de automatización relevantes.
¿Qué enfoque de Ansible?
Ad-hoc
Ad-hoc es una forma de enviar una única tarea de Ansible a los sistemas de destino. Puede ver esto ejecutando un comando en un sistema remoto usando SSH o rsh heredado. Con Ansible ad-hoc, está ejecutando una tarea más sofisticada en lugar de un solo comando porque está utilizando un módulo Ansible, que ejecuta más que un solo comando.
Reproducciones
Ansible Plays son colecciones de diferentes archivos en formato YAML, que se ejecutarán en uno o más sistemas de destino. Estas jugadas se escriben en un archivo llamado libro de jugadas .
¿Qué tipo usar?
En mi experiencia con Ansible, he visto que se utilizan ambos enfoques. He visto desarrolladores enumerando comandos ad-hoc en un simple script Bash y otros creando libros de jugadas ordenados. Aunque los scripts de Bash con Ansible ad-hoc pueden parecer más simples, Ansible no fue diseñado para usarse de esta manera. Los comandos ad-hoc son adecuados para algunas tareas simples. Para un escenario de automatización completa, necesita un libro de jugadas para depurar las actividades que se ejecutarán de una manera visual sencilla. Una ventaja significativa de usar playbooks es que puede importarlos a Ansible Tower a medida que crece su cadena de automatización. Como se mencionó anteriormente, encontrará desarrolladores que prefieren diferentes formas, pero como diseñador o arquitecto de "cadena de automatización", debe considerar la escalabilidad de su cadena y determinar el punto en el que decide consolidar sus tareas de automatización en Ansible Tower.
YAML
YAML no es lenguaje de marcas , (YAML) es el formato en el que se escriben los playbooks de Ansible. El formato YAML se usa en varias áreas (es decir, plantillas de calor en OpenStack, creación/modificación de objetos en Kubernetes, etc.). El formato YAML es fácil de leer. Sin embargo, es algo complicado porque es sensible a la sangría. Si no ha escrito ningún archivo en YAML, y para evitar perder tiempo depurando su libro de jugadas, debe elegir un editor que comprenda la sintaxis y el formato de YAML y pueda ajustar automáticamente su sangría. Personalmente, me gusta usar el editor Vim gratuito en los sistemas Linux. Solo necesita agregar la siguiente línea a un archivo, asígnele el nombre .vimrc
y guárdelo en su directorio de inicio:
autocmd FileType yaml setlocal ai ts=2 sw=2 et
Archivos
En Ansible, hay algunos tipos de archivos de los que escuchará regularmente. Aquí hay algunos:
Libro de jugadas
Un libro de jugadas es un archivo escrito en formato YAML que contiene tareas que se ejecutarán en los sistemas de destino. Las tareas que se dirigen a los mismos sistemas generalmente se agrupan en una jugada, y un libro de jugadas puede contener una o más jugadas. El motor Ansible ejecuta las tareas desde la parte superior del archivo hacia abajo.
Inventario
Ansible Inventory es un archivo que identifica sus sistemas de destino. Puede crear grupos dentro de su inventario para organizar sus sistemas. Por ejemplo, puede crear un grupo para servidores web y otro grupo para bases de datos. Ansible tiene dos tipos de archivos de inventario:
Inventarios estáticos :Los archivos para inventarios estáticos se pueden escribir en formato INI o YAML, y puede tener más de un archivo de inventario. Puede especificar cuál usar escribiendo -i path
en el archivo de comandos.
Inventarios dinámicos :Un inventario dinámico es una secuencia de comandos que se ejecutará para obtener los sistemas de destino cada vez que ejecute su libro de jugadas. Esto es útil cuando está ejecutando sus sistemas de segmentación de libro de estrategias implementados en la nube, y cada vez que tiene más (o menos) sistema(s), para que el libro de estrategias se oriente.
Ansible Tower ha creado previamente algunos scripts de inventario dinámico.
Ansible.cfg
Ansible.cfg
es el archivo de configuración de Ansible. Está en formato INI. Por lo general, se guarda en /etc/ansible/ansible.cfg
. Controla la configuración de Ansible en todo el sistema. Sin embargo, es posible que deba cambiar una o más configuraciones para su proyecto específico (es decir, cambiar el formato de salida estándar en la pantalla de JSON a YAML). Puede crear su propio ansible.cfg
y colóquelo en el directorio del proyecto donde está cambiando solo la configuración que desea sobrescribir.
Archivos de variables
Las variables en Ansible son un tema importante y requieren tiempo para comprenderlas y practicarlas. Puede definir variables en más de 20 ubicaciones. Debe comprender la precedencia de las variables para seleccionar la ubicación adecuada.
Funciones
Los objetivos principales de la automatización son minimizar las tareas manuales y acelerar las actividades de implementación. Si tiene una o más tareas que realiza con frecuencia durante diferentes juegos y desea mantenerlas en una ubicación compartida y hacer referencia a ellas cuando sea necesario, Ansible Roles lo ayudará. Ansible Roles tiene una estructura de archivos que debe seguir. Tener esta estructura bien definida hace que sea útil descargar Roles desarrollados por la comunidad para usar en sus libros de jugadas.
Galaxia ansible
Ansible Galaxy es una plataforma comunitaria en la que puede descargar herramientas adicionales para Ansible, módulos adicionales, funciones y libros de jugadas. Si es nuevo en Ansible, recuerde que Ansible tiene una gran comunidad. Para casi todos los casos que desea resolver con Ansible, es probable que alguien más en la comunidad lo haya pensado y lo haya subido a Ansible Galaxy. Para evitar reinventar la rueda, vale la pena pasar un tiempo en Ansible Galaxy buscando algo que realice las tareas que desea, descárguelo, luego utilícelo tal cual o modícelo para su propio entorno o aplicación.
Centro de automatización
Como se mencionó anteriormente, Ansible tiene una gran cantidad de módulos desarrollados por su comunidad. Eso suena muy útil, pero para las empresas que son muy sensibles al tiempo de comercialización o tienen un pequeño equipo de automatización que carece de habilidades de codificación de Python, es menos deseable confiar únicamente en los módulos de la comunidad. Es posible que algunos no sean compatibles con futuras versiones de Ansible, mientras que otros podrían incluso ser abandonados por sus desarrolladores.
No se requiere que nadie resuelva los problemas encontrados al usar los módulos de la comunidad, por lo que Red Hat elevó a Ansible de una herramienta de automatización respaldada por la comunidad a un nivel empresarial y entregó lo que se llama Centro de automatización. Automation Hub puede verse como la versión paga y compatible de Ansible Galaxy. La belleza de este servicio es que puede elegir los módulos que necesita que coincidan con su versión de Ansible, así como obtener soporte si un módulo no funciona como se esperaba.
Algunos consejos
Ansible, como cualquier tecnología de TI, tiene mejores prácticas. Puedes desarrollar el tuyo propio con el tiempo, pero me gustaría compartir el mío aquí:
- Comience a usar Ansible. Solo puedes dominarlo cuando lo usas.
- Si usted es el diseñador o el arquitecto de la cadena de automatización, aunque esté comenzando con pequeños pasos, siempre considere el futuro y lo que debe hacer desde el primer día para estar listo cuando su cadena de automatización se haga más grande.
- Si está escribiendo guías para automatizar tareas, piense siempre de manera simple y busque Ansible Galaxy. Si ve que lo que está haciendo es demasiado complejo, entonces se está moviendo en la dirección equivocada porque no podrá mantenerlo en el futuro.
- La automatización no es un programa de una sola persona en el sentido de que otras personas trabajen contigo, así que escribe tus libros de jugadas de forma clara y descriptiva, y usa sistemas SCM para el control de versiones.
Recursos para aprender
Ansible tiene una variedad de recursos de aprendizaje. Aquí hay algunos:
Libros :Ansible tiene muchos libros en el mercado, pero, con mucho, Ansible:Up and Running, en mi opinión, es la referencia más completa.
IRC :En los servidores freenode, Ansible tiene un canal donde la comunidad puede ayudarlo si es necesario.
Documentación en línea :La documentación de Ansible está en línea donde puede visitarla y aprender de ella.
Recursos en línea y en video :Estos son algunos recursos en línea y en video para aprender sobre Ansible.
- Instrucciones en video de Ansible
- Canal de YouTube de Ansible
- Cursos de Red Hat Ansible
[ ¿Necesita más información sobre Ansible? Realice un curso gratuito de descripción técnica de Red Hat. Ansible Essentials:descripción técnica de la simplicidad en la automatización. ]
Resumir
Ansible es una herramienta de vanguardia para la automatización de TI. Es fácil de aprender, accesible y rico en módulos. Si está planeando algo más que aprender Ansible, por ejemplo, construir su cadena de automatización o migrarla a Ansible, hay muchos recursos disponibles para comenzar.