9.0 KiB
Esquema de Batalla: Tema 17 - Automatización y Orquestación TIC (FOSS)
- 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).
- 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).
- 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?").
- 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).
- 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
- 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. - Planificar (
terraform plan): Compara el estado deseado con el estado actual y muestra qué recursos se crearán, actualizarán o eliminarán. - 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.