Ansible (software)

De Wikipedia, la enciclopedia libre
Ansible
Información general
Tipo de programa Automatización Orquestación Administración de Configuración
Autor Michael DeHaan
Desarrollador Michael DeHaan
Lanzamiento inicial 20 de febrero de 2012
Licencia Software_propietario / GNU GPL v3
Información técnica
Programado en Python PowerShell Shell de Unix Ruby
Versiones
Última versión estable 2.16.615 de abril de 2024
Enlaces

Ansible es una plataforma de software libre para configurar y administrar ordenadores. Combina instalación multi-nodo (es decir: permite desplegar configuraciones de servidores y servicios por lotes), ejecuciones de tareas ad hoc y administración de configuraciones. Adicionalmente, Ansible es categorizado como una herramienta de orquestación.[2]​ Gestiona nodos a través de SSH y no requiere ningún software remoto adicional (excepto Python 2.4 o posterior[3]​) para instalarlo. Dispone de módulos que trabajan sobre JSON y la salida estándar puede ser escrita en cualquier lenguaje. Nativamente utiliza YAML para describir configuraciones reusables de los sistemas.[4]

La plataforma fue creada por Michael DeHaan, también autor de la aplicación de aprovisionamiento Cobbler y coautor del framework para administración remota Func.[5]​ Está incluido como parte de la distribución de Linux Fedora, heredada de Red Hat Inc., y también está disponible para Red Hat Enterprise Linux, CentOS y Scientific Linux a través de los Paquetes Extras para Enterprise Linux (EPEL) como también para otros sistemas operativos.[6]​ Ansible tiene soporte comercial de Ansible, Inc.[7]

El nombre lo puso DeHaan por el sistema de comunicación instantáneo del hiperespacio imaginado por Orson Scott Card en la novela El juego de Ender,[8]​ y originalmente inventado por Ursula K. Le Guin en su novela de 1966 El mundo de Rocannon.

Principales características[editar]

Generalmente Ansible es agrupado con otras herramientas de Gestión de la Configuración como Puppet, Chef,[9]​ etc. Ansible no puede encasillarse solo a Gestión de la Configuración ya que puede ser usada en otros tipos de escenarios.[10]

Aprovisionamiento[editar]

Con Ansible se pueden aprovisionar las últimas plataformas en la nube, host virtualizados e hipervisores, dispositivos de red y servidores físicos.

Gestión de la configuración[editar]

Establece y mantiene el rendimiento del producto, al registrar y actualizar la información que describe el software y hardware de una empresa. Esta información generalmente incluye las versiones y actualizaciones que se han aplicado a los paquetes de software instalados y las ubicaciones y direcciones de red de los dispositivos de hardware.

Despliegue de aplicaciones[editar]

Cuando se define la aplicación con Ansible y se maneja su despliegue con Ansible Tower es posible llevar un control de todo el ciclo de vida de una aplicación. Desde desarrollo hasta producción.

Seguridad y Cumplimiento[editar]

Ansible permite definir las seguridad en los sistemas de forma sencilla. Utilizando la sintaxis de un Playbook es posible definir reglas de firewall, gestión de usuarios y grupos y políticas de seguridad personalizadas en los sistemas que se estén gestionando y además posees un gran número de módulos que ayudan en la labor.

Orquestación[11][editar]

Ansible se usa para orquestar los despliegues de OpenStack por ejemplo. Compañías como Rackspace, CSC, HP, Cisco e IBM confían en Ansible para mantener sus nubes OpenStack disponibles de manera simple y segura.

Arquitectura[editar]

Como la mayoría del software para administrar configuración, Ansible distingue dos tipos de servidores: controladores y nodos. Primero, está una única máquina de control donde la orquestación comienza. Los nodos son manejados desde esa máquina de control por SSH. La máquina de control conoce a los nodos a través de un inventario.

Para organizar los nodos, Ansible despliega módulos a los nodos el protocolo SSH. Los módulos son guardados temporalmente en los nodos y se comunican con la máquina de control a través del protocolo JSON sobre una salida estándar.[12]​ Como Ansible no controla los módulos ya que estos se ejecutan en la máquina remota, no consumen recursos locales porque no existen procesos o programas ejecutándose en segundo plano.[13]

En contraste con otros programas de control de configuración como Chef y Puppet, Ansible usa una arquitectura sin agentes[13]​ Con la arquitectura basada en agentes, los nodos deben instalar localmente un proceso de comunicaciones con la máquina de control. Con la arquitectura sin agentes los nodos no necesitan instalar ni ejecutar en segundo plano ningún proceso que se comunique con la máquina de control. Este tipo de arquitectura reduce la sobrecarga de la red y previene el uso de estrategias de control más agresivas por parte del servidor (como puede ser la realización de sondeos, con sus constantes operaciones de consulta).[13]

Propósito[editar]

El diseño de Ansible[12]​ incluye:

  • Mínimo por naturaleza. Los sistemas de administración no deben imponer dependencias adicionales.[13]
  • Consistente.
  • Seguro. Ansible no instala agentes vulnerables en los nodos. Solamente se requiere OpenSSH que es considerado crítico y altamente comprobado.[13]
  • Alta confiabilidad. El modelo de idempotencia es aplicado para las instalaciones y configuraciones, para prevenir efectos secundarios en la ejecución repetitiva de guiones (scripts).[2]
  • Suave curva de aprendizaje. Los playbooks o libretos usan un lenguaje descriptivo simple, basado en YAML.

Módulos[editar]

Los módulos son considerados las unidades de trabajo en Ansible. Cada módulo es autosuficiente y puede ser escrito en lenguajes estándar de guionado, como Python, Perl, Ruby, Bash, etc. Una de las propiedades principales de los módulos es la idempotencia la cual asegura que ninguna operación se realizará una vez que el sistema ha alcanzado el estado deseado.[12]

Configuración de inventario[editar]

El inventario es una descripción de los nodos que pueden ser accedidos por Ansible. El inventario está descrito por un archivo de configuración, en formato INI, cuya ubicación por defecto es /etc/ansible/hosts. En el archivo de configuración se listan las direcciones IP o hostname de cada nodo que es accesible por Ansible.

Además, los nodos pueden ser asignados a grupos.[14]​ Un ejemplo de archivo de configuración:

192.168.6.1

[webservers]
foo.example.com
bar.example.com

Este archivo de configuración especifica 3 nodos. El primer nodo está especificado a través de su dirección IP y los siguientes 2 por su nombre de host. Además, los últimos 2 nodos fueron agrupados bajo el nombre de grupo webservers.

Manual de tácticas o Playbooks[editar]

Los Playbooks describen configuraciones, despliegue, y orquestación en Ansible.[15]​ El formato del Playbook es YAML.[16]​ Cada Playbook asocia un grupo de hosts a un conjunto de roles. Cada rol está representado por llamadas a lo que Ansible define como Tareas.

Básicamente una tarea no es más que una llamada a un módulo de Ansible.

Al componer un Playbook con múltiples "jugadas", es posible orquestar despliegues de múltiples máquinas, ejecutando ciertos pasos en todas las máquinas del grupo de servidores web, otros pasos en el grupo de servidores de base de datos, y luego más comandos en los servidores web, etc.

Un Playbook que contiene una sola jugada:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: Asegurarse de que Apache esté en la última versión
    yum: pkg=httpd state=latest
  - name: Escribir el archivo de configuración de apache
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - Reiniciar Apache
  - name: Asegurarse que Apache esta ejecutando (y habilitarlo al iniciar el sistema)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: Reiniciar Apache
      service: name=httpd state=restarted

Lista de tareas[editar]

Cada jugada contiene una lista de tareas. Las tareas son ejecutadas en orden, de una en una, contra cada máquina que encaja con el patrón del host, para luego seguir con la próxima tarea. Es importante entender que, dentro de una jugada, todos los host van a obtener las mismas directivas de la tarea. Es el objetivo de un Playbook el mapear un grupo de host a tareas.

Al correr una jugada, que corre de arriba hacia abajo, los host donde fallen las tareas son sacados de la rotación de las jugadas restantes. Si las cosas fallan, simplemente hay que corregir el Playbook y ejecutar nuevamente.

El objetivo de cada tarea es ejecutar un módulo, con parámetros muy específicos. Variables, como ya se mencionó, pueden ser usadas como argumentos de los módulos.

Los módulos son idempotentes, lo que significa que si se les ejecuta de vuelta, solo van a generar los cambios en el sistema que sean necesarios para llegar al estado deseado. Esto da seguridad para ejecutar el mismo Playbook varias veces. No va a cambiar nada salvo que sea necesario hacerlo.

Cada tarea debe tener un nombre, que está incluido en la salida de la ejecución del Playbook. Esta es una salida para humanos, por lo cual es deseable tener una buena descripción de cada paso de la tarea.

Las tareas pueden declararse usando el formato antiguo action : module options, pero es recomendable usar el formato más convencional module : options. Este es el formato recomendando en la documentación, pero se pueden encontrar Playbook con el formato antiguo.

Plataformas soportadas[editar]

Controladoras (servidores)[editar]

Las máquinas orquestadoras deben tener Python 2.6. Los sistemas operativos soportados en las máquinas controladoras incluyen la mayoría de las distribuciones de Linux y Unix, tales como Red Hat, Debian, CentOS, OSX, y BSD, entre otros. También está disponible para Mac. Los nodos orquestados deben tener Python 2.4 o posteriores. La plataforma Windows no está soportada para albergar una controladora (servidor).[17]​ Sin embargo es posible utilizarlo mediante las siguientes configuraciones: máquina virtual con Linux, Bash de Ubuntu en Windows, Cygwin y Vagrant.

Nodos (clientes)[editar]

Además en los nodos orquestados que tengan Python 2.5 o anteriores, se debe contar con el paquete python-simplejson ya que es requerido. La instalación en plataforma Windows está supeditada a la instalación de WinRM.[18]

Integración con la nube[editar]

La biblioteca de módulos de soporte en la nube de Ansible facilita el aprovisionamiento de instancias, redes e infraestructura de nube completa donde sea necesario. El simple lenguaje de Playbook, que se usa para implementar las aplicaciones y la automatización de virtualización local, también permite aprovisionar la infraestructura, así como aplicar la configuración correcta. Ansible garantiza que las implementaciones en la nube funcionen sin problemas en la nube pública, privada o híbrida de una manera muy sencilla y robusta, como si fuera un solo sistema.

Las nubes son más que simples servidores, independientemente de si el entorno de aplicación solo consiste en servidores, configuraciones específicas del sistema operativo, redes privadas virtuales, subredes o hasta balanceadores de carga, Ansible se asegurará de que la infraestructura satisfaga todas las necesidades de la aplicación cada vez.

La modularidad es la base de código que le permite administrar la infraestructura de hoy, pero también se adapta rápidamente a las nuevas necesidades y requisitos de TI de las nubes que van apareciendo. Incluye más de 300 módulos que abarcan cientos de puntos finales de API en diversas tecnologías de nube públicas y privadas y proveedores. De esta manera Ansible tiene las capacidades necesarias para implementar y administrar infraestructura, desde OpenStack hasta AWS, incluyendo:

  • Servidores y funcionamiento.
  • Enrutamiento y redes nativas de la nube
  • Redes privadas virtuales
  • Política de acceso y permisos
  • Balanceadores de carga
  • Política de autoescala

Ansible puede instalarse en ambientes virtualizados, nubes públicas y privadas, incluyendo VMWare, OpenStack, AWS, Eucalyptus, KVM y CloudStack.[12]

Integración con Big Data[editar]

Ansible se puede instalar en entornos para analizar y archivar big data, incluyendo Hadoop, Riak, y Aerospike.

El problema sobre el cual se apoya Ansible es que estos entornos incluyen la administración de recursos que se consumen en cada nodo. En particular, big data, archivo y análisis buscan hacer un uso eficiente de los recursos mediante el consumo de pequeñas tiempos de CPU y cantidad de memoria como sea posible. Adicionalmente, Ansible permite tener un monitor de cantidades de los recursos de CPU disponibles, que pueden ayudar a la vigilancia de los nodos.[12]

Usuarios[editar]

Ansible es utilizado por Atlassian, Twitter, OneKingsLane, EverNote, TrunkClub, edX, hootsuite, GoPro y Care.com, además de muchos otros.[19]

Véase también[editar]

Referencias[editar]

  1. (en inglés) v2.14.0 Release Summary
  2. a b «Achieving Rolling Updates and Continuous Deployment with Zero Downtime» (pdf). 
  3. «Getting Started | Ansible». 6 de febrero de 2014. Archivado desde el original el 6 de julio de 2015. Consultado el 17 de julio de 2014. 
  4. «Ansible: CM, Deployment, and Ad Hoc Task Execution All in One». DZone. 18 de abril de 2012.  (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  5. «An Interview with Ansible Author Michael DeHaan». Colo and Cloud. 17 de abril de 2012. Archivado desde el original el 22 de julio de 2014. Consultado el 17 de julio de 2014. 
  6. «Ansible». Linux Packages Search. 
  7. «Ansible». Ansible. Consultado el 9 de marzo de 2013. 
  8. «Ansible FAQ». Archivado desde el original el 6 de julio de 2015. Consultado el 17 de julio de 2014. 
  9. Chef
  10. Hat, Ansible, Red. «What is Ansible? | Ansible Quick Start Video». www.ansible.com (en inglés estadounidense). Consultado el 26 de noviembre de 2018. 
  11. Hat, Ansible, Red. «Ansible for Orchestration». www.ansible.com (en inglés estadounidense). Consultado el 26 de noviembre de 2018. 
  12. a b c d e «Ansible in Depth» (pdf). 
  13. a b c d e «The Benefits of Agentless Architecture» (pdf). 
  14. «Inventory | Ansible». 26 de abril de 2014. Archivado desde el original el 6 de julio de 2015. Consultado el 17 de julio de 2014. 
  15. «Playbooks | Ansible». 26 de abril de 2014. Archivado desde el original el 6 de julio de 2015. Consultado el 17 de julio de 2014. 
  16. Rees-Carter, Stephen (13 de junio de 2018). «How to Install and Configure Ansible on Ubuntu 18.04» (html). DigitalOcean (en inglés). Archivado desde el original el 9 de junio de 2019. Consultado el 8 de junio de 2019. «Configuration files are mainly written in the YAML data serialization format due to its expressive nature and its similarity to popular markup languages. Ansible can interact with hosts either through command line tools or its configuration scripts, which are known as Playbooks.» 
  17. «Control Machine Requirements» (html). Ansible (en inglés). Archivado desde el original el 24 de junio de 2018. Consultado el 1 de agosto de 2018. «Currently Ansible can be run from any machine with Python 2 (versions 2.6 or 2.7) or Python 3 (versions 3.5 and higher) installed (Windows isn’t supported for the control machine).» 
  18. «Windows Remote Management» (html). Ansible (en inglés). Archivado desde el original el 1 de agosto de 2018. Consultado el 1 de agosto de 2018. «Unlike Linux/Unix hosts, which use SSH by default, Windows hosts are configured with WinRM. This topic covers how to configure and use WinRM with Ansible.» 
  19. «Ansible is Simple IT Automation». 26 de abril de 2014. Archivado desde el original el 13 de julio de 2014. 

Enlaces externos[editar]