GNU/Linux >> Tutoriales Linux >  >> Linux

Ansible vs Kubernetes:comprensión de las diferencias

Introducción

A medida que las aplicaciones web se vuelven más grandes y complejas, crece la necesidad de desarrollo de software automatizado, aprovisionamiento de infraestructura y mantenimiento.

Desde herramientas que ayudan con tareas repetitivas (como implementar y actualizar aplicaciones en servidores nativos de la nube) hasta soluciones completas de orquestación de contenedores, la automatización en el desarrollo de software es un campo diverso y en rápida evolución.

Este artículo presenta las ventajas y desventajas de dos herramientas de automatización populares:Ansible y Kubernetes. Además, incluye casos de uso para cada plataforma y sugiere cómo puede usarlos juntos.

Ansible frente a Kubernetes:definiciones

Tanto Ansible como Kubernetes son herramientas de automatización, pero tienen diferentes propósitos en el ciclo de vida del desarrollo de software.

Ansible

Ansible es un motor de automatización que automatiza la implementación de aplicaciones, el aprovisionamiento en la nube y la orquestación dentro de un servicio. Además, ayuda con la gestión de la configuración. Es un sistema declarativo que utiliza Playbooks de Ansible basados ​​en YAML que utilizan un lenguaje sencillo para describir trabajos de automatización.

Herramientas similares a Ansible son Jenkins, Puppet, Terraform Chef, Rudder, etc.

Kubernetes

Kubernetes es una plataforma de orquestación para automatizar la implementación, la gestión y el escalado de aplicaciones en contenedores. Su función principal es la gestión de clústeres. También controla la programación, la ejecución y la gestión de las imágenes de Docker en el servidor. Es compatible con muchas herramientas de contenedores y proporciona una interfaz API unificada capaz de administrar sistemas complejos distribuidos en varios servidores y plataformas.

Para explorar herramientas similares a Kubernetes, consulte nuestro artículo sobre las mejores herramientas de orquestación de contenedores.

¿Cómo funcionan?

Ansible

Ansible funciona al enviar módulos de Ansible (scripts independientes contenidos en los libros de jugadas de Ansible) a los nodos. Los módulos están diseñados para describir el estado deseado de todo el sistema, incluida la infraestructura subyacente. Se ejecutan a través de SSH y se eliminan una vez que el sistema alcanza el estado deseado.

Ansible no requiere servidores, bases de datos o demonios. Utiliza un solo "nodo de control" para administrar y monitorear servidores remotos. Los módulos se pueden ubicar en cualquier servidor del sistema. Se utiliza un archivo INI simple para listar las máquinas administradas en grupos. A continuación se muestra un ejemplo del contenido de uno de estos archivos:

[webservers]
www1.test.com
www2.test.com

[dbservers]
db0.test.com
db1.test.com
db2.test.com

Con Ansible, es posible agregar y quitar máquinas de los balanceadores de carga y las ventanas de monitoreo, crear archivos de configuración de forma dinámica y centralizar la administración y la implementación de la configuración.

Kubernetes

Kubernetes funciona al recibir la entrada del usuario a través de archivos de manifiesto. Estos archivos contienen la descripción general del estado deseado del clúster. Los usuarios interactúan con Kubernetes a través de kubectl, la interfaz de línea de comandos predeterminada. A su vez, kubectl transmite instrucciones al servidor API de Kubernetes.

El propósito del servidor API es administrar contenedores automáticamente siguiendo la declaración proporcionada en el archivo de manifiesto. Garantiza que el estado actual del clúster y el estado deseado sean siempre los mismos.

Los clústeres de Kubernetes constan de los siguientes componentes:

  • Cápsulas - Grupos de contenedores en el mismo nodo que están configurados para trabajar juntos. Los pods son la unidad de implementación más pequeña en Kubernetes.
  • Etiquetas - Pares clave/valor asignados a objetos para su identificación.
  • Servicios - Grupos de pods que operan bajo el mismo nombre y realizan la misma función. Los servicios se pueden utilizar como equilibradores de carga, controlando la distribución del tráfico.
  • Controladores de replicación - Marcos para garantizar que se programe y ejecute la cantidad correcta de réplicas de pods en un momento dado.

Ansible:ventajas y desventajas

Ventajas

  • Sencillo - Ansible es fácil de configurar y aprender, ya que cuenta con una documentación completa y bien organizada. También es sencillo solucionar errores en Ansible porque ejecuta tareas secuencialmente y se detiene al encontrar un error.
  • Sin agente - Toda la comunicación relacionada con la gestión de nodos en Ansible se realiza a través de SSH o el módulo Paramiko (una implementación de SSH2). En la práctica, esto significa que Ansible no requiere agentes de servidor remoto, lo que mejora el rendimiento y la seguridad de la herramienta.
  • basado en YAML - Los playbooks de Ansible son esencialmente archivos YAML, que son fáciles de leer y bien conocidos por los desarrolladores.
  • Capaz y eficiente - La herramienta es capaz de manejar flujos de trabajo complejos.
  • Flexible - Muchos módulos útiles permiten una fácil personalización de Ansible.
  • Diseñado en Python - Las bibliotecas de Python son parte de la mayoría de las distribuciones de Linux. Por lo tanto, los desarrolladores a menudo se sienten como en casa cuando trabajan con él.
  • Gratis - Ansible es una solución de código abierto que se ofrece de forma gratuita.

Contras

  • GUI subdesarrollada - Ansible se creó como una herramienta de línea de comandos. Los intentos posteriores de implementar una GUI (como AWX y posteriormente Ansible Tower) no han logrado transferir toda la funcionalidad de la CLI. La GUI también puede perder la sincronización con la CLI, lo que genera consultas inconsistentes.
  • Apátrida - A diferencia de Terraform o Puppet, Ansible es un sistema sin estado y no realiza un seguimiento de las dependencias. Esto puede presentar un problema en escenarios donde el entorno cambia.
  • Pobre soporte de Windows - Ansible para Windows es un trabajo en progreso. Actualmente, puede ejecutar Ansible en Windows, pero aún se necesitan máquinas Linux para controlar los hosts de Windows.
  • Falta de apoyo de la comunidad - Ansible es relativamente nuevo en el mercado y tiene una comunidad de usuarios más pequeña que sus competidores.

Kubernetes:pros y contras

Ventajas

  • Altamente escalable y eficiente - La capacidad de adaptarse a las circunstancias es lo que hace de Kubernetes una herramienta extremadamente amigable con los recursos. Permite el escalado horizontal agregando o eliminando contenedores para admitir cargas de trabajo aumentadas o reducidas.
  • Habilita la comunicación del contenedor - La plataforma proporciona un marco para que los contenedores se comuniquen y garantiza que siempre estén correctamente sincronizados.
  • Elimina bloqueos de infraestructura - Con Kubernetes, las organizaciones no tienen que preocuparse por las consecuencias de utilizar múltiples entornos de producción y desarrollo. Esto es particularmente útil en escenarios híbridos y de múltiples nubes.
  • Configuración declarativa - Permite a los usuarios declarar un estado deseado del sistema y luego se asegura de que ese estado se mantenga. En comparación con la configuración imperativa, este enfoque es mucho menos propenso a errores.
  • Inmutable - Con la opción de revertir los cambios, crear e implementar nuevas imágenes de contenedores es fácil y seguro.
  • Reparación automática - Kubernetes automatiza el proceso de monitoreo de réplicas e introduce nuevas en caso de falla.
  • Gratis - Es un proyecto de código abierto, disponible de forma gratuita.

Contras

  • Curva de aprendizaje empinada - Kubernetes es un sistema complejo que utiliza muchas tecnologías nuevas.
  • Complejidad - Si bien las aplicaciones con numerosos usuarios distribuidos ciertamente se benefician de Kubernetes, el uso de la herramienta para implementaciones más simples puede reducir la productividad.
  • La transición a Kubernetes puede ser difícil - Introducirlo en su organización requiere personal capacitado y ajuste del flujo de trabajo.

Cómo elegir

Dada la diferencia en sus funciones, no es necesario elegir entre las dos herramientas. Confiar en una herramienta de automatización puede ser contraproducente en un entorno de desarrollo de software. Se debe establecer una estrategia de automatización más amplia antes de introducir la automatización en una organización.

Kubernetes no está diseñado para administrar todo el ciclo de vida de una aplicación. Ansible es una buena opción para administrar servidores y aplicaciones dentro de Kubernetes, así como integraciones externas.

Usados ​​juntos, Kubernetes y Ansible se complementan en un ciclo de vida de desarrollo de software como una solución altamente rentable. Mientras que Kubernetes se ocupa de la gestión y el estado de los contenedores, Ansible implementa cambios en los hosts, configura sistemas, aprovisiona infraestructura y organiza actualizaciones continuas e implementaciones continuas.

Por último, Ansible es una excelente solución para la automatización de actualizaciones y otros procedimientos de mantenimiento de Kubernetes debido a su naturaleza fácil de usar y configuración simple.


Linux
  1. Comprender YAML para Ansible

  2. PlayOnLinux vs Wine:Las diferencias

  3. ¿Comprender el signo de exclamación (!) en Bash?

  4. ¿Comprender el resultado de la "política apt-cache"?

  5. Fedora vs Ubuntu:¿Cuáles son las diferencias clave?

Guía de Ansible:el comando ad-hoc

Presentamos el nuevo Ansible Automation Hub

Comprender el comando uname en Linux

Comprender el bucle for en los scripts de Shell

Entendiendo el comando time en Linux

useradd vs adduser:¿Cuáles son las diferencias?