OpoTests/Public/md/gemini/esquemas/tema-25.automatizacion-orquestacion.md
2026-03-13 20:38:02 +01:00

9.0 KiB

Esquema de Batalla: Tema 17 - Automatización y Orquestación TIC (FOSS)

  1. Conceptos Fundamentales (La diferencia vital)
    • Automatización: Hacer que un sistema ejecute una tarea repetitiva sin intervención humana (ej. un script en Bash que hace un backup a las 3 AM).
    • Orquestación: Coordinar múltiples tareas automatizadas, en varios sistemas y con un orden lógico (ej. desplegar una base de datos, luego los servidores web, conectarlos y avisar por email de que todo está listo).
  2. Infraestructura como Código (IaC - Infrastructure as Code)
    • Concepto: Tratar los servidores, redes y bases de datos como si fueran líneas de código fuente.
    • Herramienta Rey: Terraform (o su fork libre OpenTofu).
      • Paradigma: Declarativo (tú dices "quiero 3 servidores", y Terraform se busca la vida para crearlos en AWS, Proxmox o VMware).
  3. Gestión de la Configuración (Configuration Management)
    • Concepto: Una vez que el servidor existe, ¿cómo me aseguro de que tiene instalado Apache, PHP y los puertos abiertos correctos en los 50 servidores a la vez?
    • Herramientas Libres Principales:
      • Ansible: El favorito moderno. Agentless (no requiere instalar un agente en el cliente, usa SSH). Trabaja en modo Push (empuja la configuración desde el nodo de control). Ficheros YAML (Playbooks).
      • Puppet / Chef: Más clásicos. Requieren agente instalado en las máquinas cliente. Trabajan en modo Pull (el cliente pregunta al servidor "¿qué configuración debo tener?").
  4. Orquestación de Contenedores (El hermano mayor de Docker)
    • Concepto: Si tengo cientos de contenedores Docker, ¿qué pasa si uno se cae? ¿Cómo reparto la carga?
    • Herramienta Rey: Kubernetes (K8s). Automatiza el despliegue, el escalado y el manejo de aplicaciones en contenedores.
    • Alternativa más ligera: Docker Swarm (orquestador nativo de Docker, más sencillo pero menos potente).
  5. Integración y Despliegue Continuo (CI/CD)
    • Concepto: Automatizar el ciclo de vida del software (el código se sube al repositorio, se testea automáticamente y se despliega en producción).
    • Herramientas: Jenkins (el clásico, enorme ecosistema de plugins) y GitLab CI/CD (integrado directamente con el repositorio de código).

Ansible

Ansible es una herramienta de automatización de TI de código abierto, sin agentes ("agentless") y fácil de usar, diseñada para gestionar la configuración, el aprovisionamiento, el despliegue de aplicaciones y la orquestación de tareas en infraestructura, servidores y redes. Utiliza archivos YAML (Playbooks) para definir el estado deseado, facilitando tareas repetitivas mediante SSH.

Aspectos clave de Ansible:

  • Sin agentes (Agentless): No requiere instalar software adicional en los nodos gestionados, ya que se conecta por SSH o CQR Shell.
  • Idempotencia: Garantiza que el sistema alcance el estado deseado sin importar su estado inicial, evitando cambios innecesarios.
  • YAML (Playbooks): Utiliza un lenguaje sencillo basado en YAML, lo que hace que los scripts sean legibles y fáciles de entender.
  • Módulos y Roles: Se basa en módulos para ejecutar tareas específicas (gestión de paquetes, usuarios, servicios) y utiliza roles para organizar y reutilizar la automatización.
  • Usos principales: Aprovisionamiento de servidores, gestión de configuraciones, despliegue de aplicaciones y seguridad.

Es una herramienta fundamental para equipos DevOps y administradores de sistemas que buscan estandarizar y automatizar la infraestructura, incluyendo entornos en la nube y dispositivos de red.

Terraform

Terraform es una herramienta de Infraestructura como Código (IaC) de código abierto, creada por HashiCorp, que permite definir, aprovisionar y gestionar infraestructuras en la nube (AWS, Azure, GCP) y locales mediante archivos de configuración declarativos. Utiliza el lenguaje HCL (HashiCorp Configuration Language) para automatizar el ciclo de vida de los recursos de manera segura, eficiente y reproducible.

Características y Beneficios Principales

  • Enfoque Declarativo: Tú defines el estado deseado de la infraestructura ("qué" quieres), y Terraform se encarga de determinar cómo lograrlo ("cómo" crearlo).
  • Agnóstico a la Nube (Multi-cloud): Permite gestionar recursos en múltiples proveedores de nube como AWS, Azure, Google Cloud, Oracle Cloud, y más, usando el mismo flujo de trabajo.
  • Infraestructura como Código (IaC): La infraestructura se define en archivos de texto, lo que permite el control de versiones (ej. Git), la colaboración y la reutilización.
  • Inmutabilidad y Automatización: Facilita la creación de infraestructuras reproducibles y evita la "deriva de configuración" (configuration drift).

Flujo de Trabajo de Terraform

  1. Escribir (terraform init / plan): Se definen los recursos en archivos de configuración (.tf) y se genera un plan de ejecución para visualizar los cambios antes de aplicarlos.
  2. Planificar (terraform plan): Compara el estado deseado con el estado actual y muestra qué recursos se crearán, actualizarán o eliminarán.
  3. Aplicar (terraform apply): Ejecuta las acciones necesarias para alcanzar el estado deseado.

Componentes Clave

  • HashiCorp Configuration Language (HCL): Lenguaje diseñado para ser legible y fácil de escribir por humanos.
  • Proveedores (Providers): Plugins que Terraform utiliza para interactuar con las APIs de los proveedores de nube (por ejemplo, el proveedor de AWS).
  • Estado (State): Archivo que rastrea el estado real de la infraestructura gestionada, permitiendo a Terraform saber qué recursos existen.

Diferencias Clave

  • Terraform vs. Ansible: Terraform se especializa en el aprovisionamiento de infraestructura (servidores, redes), mientras que Ansible se centra más en la configuración de software dentro de esos servidores.
  • Terraform vs. Kubernetes: Terraform aprovisiona la infraestructura (como los clústeres), mientras que Kubernetes gestiona las aplicaciones en contenedores dentro de ellos.

Puppet

Puppet es una herramienta de gestión de configuración y automatización de software de código abierto, utilizada por administradores de sistemas para configurar, implementar y administrar infraestructuras de TI complejas. Utiliza un lenguaje declarativo para definir el estado deseado de servidores y automatiza el mantenimiento de esa configuración.

Características principales de Puppet:

  • Modelo Cliente-Servidor (Agent-Master): Funciona mediante un servidor central (Puppet Master) y agentes que se ejecutan en los sistemas configurados.
  • Gestión Declarativa: Permite al administrador definir "qué" configuración debe tener el sistema (estado final), en lugar de "cómo" lograrlo.
  • Automatización de Infraestructura: Automatiza la instalación, gestión de archivos, usuarios, servicios y despliegue de máquinas.
  • Autocorrección (Idempotencia): Puppet se ejecuta regularmente (por defecto cada 30 minutos) para asegurar que la configuración actual coincida con la deseada, corrigiendo cualquier desviación automáticamente.
  • Lenguaje propio (DSL): Utiliza su propio lenguaje de dominio específico (Puppet DSL) para definir las configuraciones.

Es una herramienta esencial en entornos DevOps para gestionar cientos o miles de servidores de manera eficiente, popularizada por Puppet Labs.

GitLab CI/CD

GitLab CI/CD es una herramienta integrada en GitLab que automatiza el ciclo de vida del desarrollo de software, incluyendo la integración (compilación/pruebas) y la entrega continua (despliegue). Utiliza un archivo .gitlab-ci.yml para definir flujos de trabajo (pipelines) que se ejecutan automáticamente en cada cambio de código, facilitando pruebas y despliegues rápidos, seguros y consistentes.

Características principales y funcionamiento:

  • Integración continua (CI): Automatiza la construcción y las pruebas de cada cambio en el código fuente, permitiendo detectar errores tempranamente.
  • Entrega/Despliegue continuo (CD): Automatiza el lanzamiento de aplicaciones, permitiendo que el software se despliegue automáticamente a producción o entornos de pruebas.
  • .gitlab-ci.yml: Archivo YAML donde se configuran las etapas (stages), trabajos (jobs) y dependencias del flujo de trabajo.
  • GitLab Runners: Son agentes o servidores dedicados que ejecutan los trabajos definidos en el pipeline, permitiendo que los procesos no ocurran localmente.
  • Pipeline automatizado: Cada vez que se realiza un push o un merge request, GitLab inicia automáticamente el pipeline, ejecutando tareas como compilación, pruebas y despliegue.

Ventajas de usar GitLab CI/CD:

  • Plataforma única: Evita la necesidad de herramientas externas para la gestión de repositorios y automatización.
  • Visibilidad: Ofrece una interfaz para ver el estado de los trabajos y los registros (logs).
  • Eficiencia: Acelera el ciclo de desarrollo y entrega de software.