> **Fase 2: Test Trampa (Tema 17)**

# Pregunta 1

Terraform se ha consolidado como la herramienta libre de referencia para la Infraestructura como Código (IaC). ¿Cuál de las siguientes afirmaciones describe correctamente su paradigma principal de funcionamiento?

- A) Utiliza un enfoque imperativo, ejecutando comandos paso a paso mediante scripts en Bash para alcanzar el estado deseado en la infraestructura.
- B) Utiliza un enfoque declarativo, donde el administrador define el estado final deseado y la herramienta determina cómo alcanzarlo automáticamente.
- C) Se basa en un modelo cliente-servidor tradicional, requiriendo la instalación obligatoria de agentes de monitorización en los hipervisores.
- D) Funciona exclusivamente mediante la ejecución de Playbooks escritos en formato YAML para configurar los parámetros de red y almacenamiento.

## Respuesta

Esta es la B pues:

- A) Si hace uso de Scrips será orquestador pero no automatizador, y una de las características es que automatiza.
- B) Esta es la correcta pues la define como tal realmente, a nivel superficial y teórico.
- C) Aquí describe a Puppet.
- D) Este describe a Ansible.

## Corrección

- **Tu respuesta: B | Correcta: B**
- **Feedback**: Impecable. No solo has acertado la de Terraform (enfoque declarativo), sino que has "desnudado" las opciones falsas reconociendo a Puppet en la C y a Ansible en la D. Eso demuestra un dominio panorámico espectacular del ecosistema.

# Pregunta 2

En el ecosistema de orquestación de contenedores, Kubernetes (K8s) define varias unidades lógicas para su funcionamiento. ¿Cuál es la unidad de computación más pequeña y básica que se puede desplegar y gestionar en Kubernetes?

- A) El Container, que encapsula directamente el código de la aplicación y sus dependencias sin ninguna capa de abstracción adicional.
- B) El Node, que representa la máquina física o virtual completa encargada de ejecutar los distintos servicios de la plataforma.
- C) El Cluster, que agrupa todos los recursos disponibles para garantizar la alta disponibilidad y el balanceo de carga automático.
- D) El Pod, que puede alojar uno o varios contenedores que comparten almacenamiento, red y especificaciones sobre cómo ejecutarse.

## Respuesta

Aquí voy a tirar una piedra al aire con la lógica. Digo que la A por:

- A) Kubernetes agrupa Docker (Contenedores) y Docker Compose (Administración de contenedores) con capacidad para crear Clústers de estos elementos. Como unidad básica tenemos al Contenedor.
- B) Esto es una característica de Docker, que permite comunicar al anfitrión con el contenedor, y es lo que permite hacer uso de los recursos del anfitrión a diferencia de las Máquinas Virtuales.
- C) Esto es el rescurso más bestia que puede utilizar, por tanto, este no es.
- D) Estos son los recursos como los Volumnes, las Networks, etc. Sin contenedores no tiene valor de existencia si quiera.

## Corrección

- **Tu respuesta: A | Correcta: D**
- **Feedback**: ¡Caíste en la trampa de oro de Kubernetes! Aplicaste la lógica pura de Docker (donde el contenedor es el rey absoluto), pero Kubernetes tiene sus propias reglas.
- **La realidad**: En K8s, **no puedes desplegar un contenedor suelto**. Kubernetes envuelve el contenedor (o un grupo muy estrecho de ellos) en una cápsula lógica llamada Pod. El Pod es la unidad de computación más pequeña y básica en K8s. Grábate esto a fuego: *Docker = Contenedor; Kubernetes = Pod*. A partir de hoy, esta no la fallas nunca más.

# Pregunta 3

En una arquitectura de Integración y Despliegue Continuo (CI/CD) basada en software libre, si comparamos Jenkins con GitLab CI/CD, ¿cuál es una diferencia arquitectónica o de diseño fundamental entre ambos?

- A) Jenkins requiere la instalación de un servidor independiente y el uso de plugins, mientras que GitLab CI/CD está integrado nativamente en el propio repositorio.
- B) GitLab CI/CD es una herramienta diseñada exclusivamente para lenguajes compilados (como C++), mientras que Jenkins solo soporta lenguajes interpretados.
- C) Jenkins utiliza un modelo de orquestación de contenedores nativo, haciendo innecesario el uso de Docker, a diferencia de la arquitectura de GitLab CI/CD.
- D) GitLab CI/CD requiere el pago de licencias propietarias para cualquier automatización básica, mientras que Jenkins es la única opción de código abierto.

## Respuesta

Voy a lanzarme a la piscina y voy a decir a ciegas que la A por:

- A) Jenkins trabaja con Pluggins para pluralizar las tareas, mientras que GitLab CI/CD hace uso de instrucciones sobre un entorno YML.
- B) GitLab CI/CD engloba mucho más, así que no es.
- C) Esta parece la correcta pero admite un entorno de contenedor mediante docker-dind, por tanto, lo que determina que requiere sí o sí de Docker internamente.
- D) Si el despliegue es local no tiene un precio inicial, GitLab CI/CD.

## Corrección

- **Tu respuesta: A | Correcta: A**
- **Feedback**: ¡Lanzarse a la piscina con red! Tu deducción es 100% correcta. Jenkins es el "dinosaurio" todopoderoso que vive en su propio servidor y se alimenta de miles de plugins. GitLab CI/CD es el enfoque moderno, integrado nativamente en el propio repositorio mediante archivos YAML. Lo has clavado.