# Quiz de la fase 8: Contenedores, Kubernetes / OpenShift y Observabilidad LKA / LGTM

> 14 afirmaciones de verdadero o falso, con la respuesta explicada, sobre los días de esta fase del plan JavaMastery.

Versión interactiva: https://aprende-java.webs-economicas.es/quiz/fase-8/

## Afirmaciones

### 1. En Kubernetes, si falla la liveness probe, el kubelet reinicia el contenedor.

**Respuesta:** Verdadero. La liveness responde a la pregunta "¿está colgado?". Si dice que sí, la solución es reiniciar.

**Para recordarlo:** Liveness falla: reinicio.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 2. Si falla la readiness probe, Kubernetes reinicia el pod.

**Respuesta:** Falso. Lo saca de los endpoints del Service para que no reciba tráfico, pero no lo reinicia. Readiness responde a "¿puede atender ahora?".

**Para recordarlo:** Readiness falla: se queda sin tráfico, pero no se reinicia.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 3. Un Deployment gestiona ReplicaSets para mantener el número de pods deseado y hacer actualizaciones progresivas.

**Respuesta:** Verdadero. Cada cambio de versión crea un ReplicaSet nuevo y va moviendo los pods de uno a otro.

**Para recordarlo:** Deployment, ReplicaSet, Pods: tú solo declaras cuántos quieres.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 4. Un Service da una dirección estable para llegar a un conjunto de pods aunque estos se recreen.

**Respuesta:** Verdadero. Selecciona los pods por etiquetas y les reparte el tráfico; las IP de los pods cambian, la del Service no.

**Para recordarlo:** Las IP de los pods cambian; la del Service, no.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 5. OpenShift es una distribución de Kubernetes con añadidos como las Routes y políticas de seguridad más estrictas por defecto.

**Respuesta:** Verdadero. Por ejemplo, ejecuta los contenedores con un UID arbitrario, así que la imagen no puede contar con un usuario fijo.

**Para recordarlo:** En OpenShift, prepara la imagen para ejecutarse con cualquier UID.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 6. Los tres pilares de la observabilidad son métricas, logs y trazas.

**Respuesta:** Verdadero. Las métricas dicen que algo va mal, las trazas dónde, y los logs por qué.

**Para recordarlo:** Métricas: qué va mal. Trazas: dónde. Logs: por qué.

Se estudia en el [día 30: Observabilidad Completa: Grafana, Prometheus, Loki y OpenTelemetry / Tempo (LKA / LGTM)](https://aprende-java.webs-economicas.es/dias/observabilidad-grafana-prometheus-opentelemetry.md).

### 7. Prometheus suele funcionar en modo pull: es él quien consulta el endpoint de métricas de la aplicación.

**Respuesta:** Verdadero. En Spring Boot ese endpoint es `/actuator/prometheus`, que expone Micrometer.

**Para recordarlo:** Prometheus viene a por las métricas; tu aplicación solo las expone.

Se estudia en el [día 30: Observabilidad Completa: Grafana, Prometheus, Loki y OpenTelemetry / Tempo (LKA / LGTM)](https://aprende-java.webs-economicas.es/dias/observabilidad-grafana-prometheus-opentelemetry.md).

### 8. Loki indexa el contenido completo de cada línea de log, como Elasticsearch.

**Respuesta:** Falso. Loki solo indexa las etiquetas y filtra el texto al consultar. Por eso es más barato de operar.

**Para recordarlo:** Loki indexa etiquetas, no el texto: elige bien las etiquetas.

Se estudia en el [día 30: Observabilidad Completa: Grafana, Prometheus, Loki y OpenTelemetry / Tempo (LKA / LGTM)](https://aprende-java.webs-economicas.es/dias/observabilidad-grafana-prometheus-opentelemetry.md).

### 9. En la trazabilidad distribuida, el trace id se propaga entre servicios para reconstruir el recorrido completo de una petición.

**Respuesta:** Verdadero. Viaja en cabeceras como `traceparent` (W3C). Si además va en los logs, puedes saltar de un log a su traza.

**Para recordarlo:** Pon el trace id en tus logs y podrás pasar de un log a su traza completa.

Se estudia en el [día 30: Observabilidad Completa: Grafana, Prometheus, Loki y OpenTelemetry / Tempo (LKA / LGTM)](https://aprende-java.webs-economicas.es/dias/observabilidad-grafana-prometheus-opentelemetry.md).

### 10. En Spring Boot 3, Micrometer Tracing sustituye a Spring Cloud Sleuth.

**Respuesta:** Verdadero. Sleuth no tiene versión compatible con Boot 3. Micrometer Tracing exporta con OpenTelemetry o Brave.

**Para recordarlo:** Boot 3: Micrometer Tracing. Sleuth es cosa de Boot 2.

Se estudia en el [día 30: Observabilidad Completa: Grafana, Prometheus, Loki y OpenTelemetry / Tempo (LKA / LGTM)](https://aprende-java.webs-economicas.es/dias/observabilidad-grafana-prometheus-opentelemetry.md).

### 11. Un Dockerfile multi-etapa permite compilar con un JDK y ejecutar con una imagen más ligera que solo tiene JRE.

**Respuesta:** Verdadero. La imagen final no lleva Maven, el código fuente ni el compilador. Pesa menos y expone menos superficie de ataque.

**Para recordarlo:** Etapa 1: compilar con el JDK. Etapa 2: copiar solo el JAR sobre una imagen con JRE.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 12. Ejecutar el contenedor como `root` es la opción recomendada por seguridad.

**Respuesta:** Falso. Se crea un usuario sin privilegios con `USER`. Si alguien compromete la aplicación, tiene menos margen dentro del contenedor.

**Para recordarlo:** Añade `USER` a tu Dockerfile: nunca ejecutes la aplicación como root.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 13. Las JVM modernas detectan el límite de memoria del contenedor, y `-XX:MaxRAMPercentage` controla qué parte usa el heap.

**Respuesta:** Verdadero. Está activo por defecto desde JDK 10 (y en 8u191). Sin ajustar `MaxRAMPercentage`, el heap toma solo el 25 % de la memoria.

**Para recordarlo:** En contenedores, ajusta `-XX:MaxRAMPercentage` (por ejemplo, 75) en lugar de fijar `-Xmx`.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

### 14. Copiar el `pom.xml` y descargar las dependencias antes de copiar el código aprovecha la caché de capas de Docker.

**Respuesta:** Verdadero. Si solo cambia el código, Docker reutiliza la capa con las dependencias y el build tarda segundos en vez de minutos.

**Para recordarlo:** Lo que cambia poco va arriba en el Dockerfile; el código, lo último.

Se estudia en el [día 29: Contenedores y Kubernetes / OpenShift para Java Spring Boot](https://aprende-java.webs-economicas.es/dias/contenedores-kubernetes-openshift.md).

