B4-T3: VIRTUALIZACIÓN Y ARQUITECTURA DE CONTENEDORES

Tema de alta densidad técnica. Docker y Kubernetes son los protagonistas absolutos de los últimos exámenes TAI. No basta con saber qué es un contenedor: preguntan instrucciones concretas de Dockerfile, diferencias entre CMD y ENTRYPOINT, puertos por defecto, objetos de Kubernetes. Los microservicios aparecen como patrones (Circuit Breaker, Saga, API Gateway). La virtualización clásica sigue cayendo pero con menos peso.

1. VIRTUALIZACIÓN

1.1 Concepto y tipos de virtualización

La virtualización permite ejecutar múltiples sistemas operativos o entornos aislados sobre un mismo hardware físico. El software que gestiona esta abstracción se denomina hipervisor (hypervisor) o Monitor de Máquina Virtual (VMM).

TipoDescripciónEjemplo
Virtualización completaEl hipervisor emula el hardware completo; el SO guest no necesita modificarseVMware, VirtualBox, Hyper-V
ParavirtualizaciónEl SO guest se modifica para comunicarse directamente con el hipervisor (hypercalls)Xen (modo PV)
Virtualización asistida por HWExtensiones del procesador (Intel VT-x, AMD-V) permiten virtualización completa eficienteKVM, Hyper-V, Xen (modo HVM)
Virtualización de SO (contenedores)Aislamiento a nivel de proceso, comparten el kernel del hostDocker, LXC, Podman
Virtualización de aplicacionesEmpaquetan una aplicación con sus dependencias sin instalarla en el SOApp-V, ThinApp
Virtualización de escritorio (VDI)Escritorios virtuales ejecutados en un servidor central, accedidos remotamenteCitrix Virtual Desktops, VMware Horizon

1.2 Hipervisores: Tipo 1 vs Tipo 2

CaracterísticaTipo 1 (bare-metal)Tipo 2 (hosted)
Se ejecuta sobreHardware directamenteUn sistema operativo host
RendimientoSuperior (acceso directo al HW)Inferior (capa adicional del SO host)
Uso típicoServidores, centros de datos, producciónDesarrollo, pruebas, uso personal
EjemplosVMware ESXi, Microsoft Hyper-V, Citrix XenServer, KVM, Proxmox VEVirtualBox (Oracle), VMware Workstation, Parallels, QEMU (sin KVM)
OJO examen: KVM es Tipo 1 aunque se integre en el kernel Linux. Convierte el propio kernel en hipervisor. Hyper-V también actúa como Tipo 1 incluso en Windows Desktop (se interpone entre el HW y Windows).

1.3 Extensiones de hardware para virtualización

TecnologíaFabricanteFunción
Intel VT-xIntelVirtualización de CPU — modo root/non-root para aislar hipervisor y VMs
AMD-V (SVM)AMDEquivalente AMD de VT-x
Intel VT-dIntelVirtualización de E/S — permite asignar dispositivos físicos directamente a VMs (passthrough)
AMD-Vi (IOMMU)AMDEquivalente AMD de VT-d
EPT (Extended Page Tables)IntelTraduce direcciones de memoria VM→física sin intervención del hipervisor
RVI/NPT (Rapid Virtualization Indexing)AMDEquivalente AMD de EPT
SR-IOVPCI-SIGPermite compartir un dispositivo PCIe (ej. NIC) entre múltiples VMs con acceso directo

1.4 Formatos de disco virtual

FormatoPlataformaCaracterísticas
VMDKVMwareSoporta thin/thick provisioning, snapshots, split en múltiples archivos
VHD / VHDXMicrosoft Hyper-VVHD: máx 2 TB. VHDX: máx 64 TB, resiliente a fallos de energía, bloques de 4 KB
QCOW2QEMU/KVMCopy-on-write, snapshots internos, compresión, cifrado (AES), thin provisioning nativo
VDIVirtualBoxFormato nativo de VirtualBox, soporta snapshots y dynamic allocation
OVF / OVAEstándar abierto (DMTF)OVF: directorio con descriptor XML + discos. OVA: OVF empaquetado en un solo archivo TAR. Portabilidad entre plataformas
RAWUniversalImagen sin formato, máximo rendimiento, sin snapshots ni compresión

2. CLOUD COMPUTING

2.1 Definición NIST y características esenciales

Según la definición del NIST SP 800-145, cloud computing ofrece acceso ubicuo y bajo demanda a un pool compartido de recursos informáticos configurables. Las 5 características esenciales son:

CaracterísticaDescripción
Autoservicio bajo demandaEl usuario aprovisiona recursos (CPU, almacenamiento) sin intervención humana del proveedor
Acceso amplio a la redDisponible a través de la red mediante mecanismos estándar (HTTP, API REST)
Pool de recursos compartidoRecursos asignados dinámicamente a múltiples consumidores (multi-tenant)
Elasticidad rápidaEscalado automático hacia arriba o abajo según la demanda
Servicio medidoMonitorización, control y facturación según uso real (pay-per-use)

2.2 Modelos de servicio

ModeloQué gestiona el proveedorQué gestiona el clienteEjemplos
IaaS (Infrastructure as a Service)HW, red, almacenamiento, virtualizaciónSO, middleware, runtime, apps, datosAWS EC2, Azure VMs, Google Compute Engine
PaaS (Platform as a Service)Todo lo anterior + SO, middleware, runtimeAplicaciones y datosAzure App Service, Google App Engine, Heroku, AWS Elastic Beanstalk
SaaS (Software as a Service)Todo — el usuario solo consume la aplicaciónConfiguración y datos propiosMicrosoft 365, Google Workspace, Salesforce
FaaS (Function as a Service)Todo + escalado automático por funciónSolo el código de las funcionesAWS Lambda, Azure Functions, Google Cloud Functions
CaaS (Container as a Service)Orquestación de contenedoresImágenes de contenedor y configuraciónAWS ECS/EKS, Azure AKS, Google GKE

2.3 Modelos de despliegue

ModeloDescripción
Nube públicaInfraestructura del proveedor, compartida entre múltiples organizaciones
Nube privadaInfraestructura exclusiva de una organización (on-premise o gestionada por tercero)
Nube híbridaCombinación de pública + privada, con orquestación entre ambas
Nube comunitariaCompartida por organizaciones con intereses comunes (ej. sector sanitario, administración)

2.4 Principales proveedores y servicios

ServicioAWSAzureGoogle Cloud
Cómputo (VMs)EC2Virtual MachinesCompute Engine
Contenedores (Kubernetes)EKSAKSGKE
ServerlessLambdaFunctionsCloud Functions
Almacenamiento objetosS3Blob StorageCloud Storage
BBDD relacionalRDSSQL DatabaseCloud SQL
BBDD NoSQLDynamoDBCosmos DBFirestore/Bigtable
CDNCloudFrontFront Door/CDNCloud CDN
DNSRoute 53DNS ZonesCloud DNS
IdentidadIAMEntra ID (ex AD)Cloud IAM
MonitorizaciónCloudWatchMonitorCloud Monitoring

2.5 OpenStack — Componentes principales

OpenStack es la plataforma de nube privada IaaS de código abierto más extendida. Cada componente tiene un nombre en clave:

ComponenteNombre claveFunción
CómputoNovaGestión de instancias de VM (equivalente a EC2)
RedNeutronNetworking: redes virtuales, subredes, routers, firewalls
Almacenamiento de bloquesCinderVolúmenes persistentes para VMs (equivalente a EBS)
Almacenamiento de objetosSwiftAlmacenamiento de objetos distribuido (equivalente a S3)
ImágenesGlanceRegistro y descubrimiento de imágenes de VM
IdentidadKeystoneAutenticación y autorización centralizada
DashboardHorizonInterfaz web de administración
OrquestaciónHeatPlantillas de infraestructura como código (IaC)
TelemetríaCeilometerRecolección de métricas y eventos de uso
Bare MetalIronicAprovisionamiento de servidores físicos

2.6 Nube SARA

La Nube SARA es la infraestructura de nube de la Administración General del Estado (AGE) española, gestionada por la SGAD. Opera sobre la Red SARA y ofrece servicios IaaS y PaaS a las Administraciones Públicas. Certificada según el ENS (categoría ALTA). Tecnología basada en OpenStack y VMware.


3. CONTENEDORES — DOCKER

CLAVE EXAMEN: Docker es el tema más preguntado de este bloque. Esperan que sepas instrucciones de Dockerfile, diferencias CMD vs ENTRYPOINT, comandos docker, el concepto de capas y registros de imágenes. Preguntado en 2019, 2022 y 2024.

3.1 Contenedores vs Máquinas Virtuales

CaracterísticaContenedorMáquina Virtual
AislamientoA nivel de proceso (namespaces + cgroups)A nivel de hardware (hipervisor)
KernelComparte el kernel del hostCada VM tiene su propio kernel
TamañoMegabytes (imagen base Alpine: ~5 MB)Gigabytes (SO completo)
ArranqueSegundosMinutos
OverheadMínimo (comparte kernel)Significativo (SO completo + hipervisor)
PortabilidadMuy alta (OCI estándar)Media (depende del formato de disco/hipervisor)
DensidadCientos por hostDecenas por host
SeguridadMenor aislamiento (kernel compartido)Mayor aislamiento (HW virtualizado)

3.2 Tecnologías del kernel Linux para contenedores

TecnologíaFunción
NamespacesAíslan la visibilidad: PID (procesos), NET (red), MNT (sistema de ficheros), UTS (hostname), IPC (comunicación entre procesos), USER (usuarios)
cgroups (Control Groups)Limitan y controlan el uso de recursos: CPU, memoria, disco, red
Union filesystemSistema de archivos por capas (OverlayFS, AUFS): cada capa es de solo lectura excepto la superior (read-write)
seccompFiltra las llamadas al sistema (syscalls) que un proceso puede hacer
capabilitiesDescompone los privilegios de root en unidades granulares (CAP_NET_ADMIN, CAP_SYS_PTRACE...)

3.3 Arquitectura Docker

ComponenteDescripción
Docker daemon (dockerd)Proceso servidor que gestiona imágenes, contenedores, redes y volúmenes. Escucha en socket Unix (/var/run/docker.sock) o TCP
Docker CLI (docker)Cliente que envía comandos al daemon vía API REST
containerdRuntime de alto nivel: gestiona ciclo de vida de contenedores, descarga imágenes, gestiona almacenamiento
runcRuntime de bajo nivel OCI: crea y ejecuta contenedores usando namespaces y cgroups del kernel
Docker RegistryAlmacén de imágenes. Docker Hub (público por defecto), registros privados (Harbor, GitLab Registry, AWS ECR, Azure ACR)

3.4 Imágenes y capas

Una imagen Docker es una plantilla de solo lectura compuesta por capas apiladas. Cada instrucción del Dockerfile que modifica el filesystem crea una nueva capa. Las capas se comparten entre imágenes (caché), ahorrando espacio y acelerando builds.

ConceptoDescripción
Capa (layer)Cada instrucción RUN, COPY, ADD genera una nueva capa de solo lectura
Capa R/WAl ejecutar un contenedor se añade una capa superior de lectura-escritura (efímera)
TagEtiqueta de versión (ej. nginx:1.25-alpine). latest es el tag por defecto
DigestHash SHA256 que identifica unívocamente una imagen (inmutable)
Multi-stage buildMúltiples FROM en un Dockerfile; se copia solo lo necesario de etapas previas, reduciendo tamaño final
Imagen basescratch (vacía), alpine (~5 MB), debian-slim (~80 MB), ubuntu (~75 MB)

3.5 Dockerfile — Instrucciones

CLAVE EXAMEN: Preguntan la diferencia CMD vs ENTRYPOINT, qué hace EXPOSE, diferencia COPY vs ADD, y el orden óptimo para aprovechar la caché de capas.
InstrucciónFunciónEjemplo
FROMImagen base (obligatoria, primera instrucción)FROM python:3.12-slim
RUNEjecuta un comando durante el build (crea nueva capa)RUN apt-get update && apt-get install -y curl
COPYCopia archivos del contexto de build a la imagenCOPY ./app /usr/src/app
ADDComo COPY pero además descomprime .tar y acepta URLsADD archive.tar.gz /opt/
WORKDIREstablece el directorio de trabajo para instrucciones siguientesWORKDIR /usr/src/app
ENVDefine variables de entorno persistentes en la imagenENV NODE_ENV=production
ARGVariable solo disponible durante el build (no persiste)ARG VERSION=1.0
EXPOSEDocumenta el puerto que usa el contenedor (NO lo publica, es metadata)EXPOSE 8080
CMDComando por defecto al ejecutar el contenedor. Se puede sobreescribir con docker run ... [cmd]CMD ["python", "app.py"]
ENTRYPOINTPunto de entrada fijo. Los argumentos de docker run se pasan como parámetros adicionalesENTRYPOINT ["nginx", "-g", "daemon off;"]
VOLUMEDeclara un punto de montaje para datos persistentesVOLUME /var/lib/mysql
USEREstablece el usuario (y grupo) para ejecutar el contenedorUSER appuser:appgroup
HEALTHCHECKDefine un comando para verificar la salud del contenedorHEALTHCHECK CMD curl -f http://localhost/
LABELAñade metadatos clave=valor a la imagenLABEL version="2.0" maintainer="admin"
CMD vs ENTRYPOINT: Si defines ENTRYPOINT + CMD, CMD actúa como argumentos por defecto del ENTRYPOINT. Ejemplo: ENTRYPOINT ["python"] + CMD ["app.py"] → ejecuta python app.py. Si haces docker run img test.py → ejecuta python test.py (CMD sobreescrito).

3.6 Comandos Docker esenciales

ComandoFunción
docker build -t nombre:tag .Construye una imagen desde un Dockerfile en el directorio actual
docker run -d -p 8080:80 --name mi_web nginxEjecuta un contenedor en segundo plano mapeando puertos host:contenedor
docker psLista contenedores en ejecución (-a incluye parados)
docker imagesLista imágenes locales
docker exec -it contenedor bashEjecuta un comando interactivo dentro de un contenedor en ejecución
docker logs contenedorMuestra la salida estándar/error del contenedor
docker stop / start / restartControla el ciclo de vida del contenedor
docker rm contenedorElimina un contenedor parado (-f fuerza)
docker rmi imagenElimina una imagen local
docker pull imagen:tagDescarga imagen de un registro
docker push imagen:tagSube imagen a un registro
docker volume create / ls / rmGestión de volúmenes persistentes
docker network create / lsGestión de redes Docker
docker inspect contenedorMuestra información detallada en JSON del contenedor o imagen
docker system pruneElimina contenedores parados, redes no usadas, imágenes colgantes y caché de build
docker tag imagen nueva_imagen:tagCrea un alias (tag) para una imagen existente

3.7 Redes en Docker

DriverDescripciónCaso de uso
bridgeRed privada interna por defecto. Contenedores se comunican entre sí por IP o nombre (en redes custom)Contenedores en un solo host
hostEl contenedor usa directamente la red del host (sin aislamiento de red)Máximo rendimiento de red
noneSin conectividad de redProcesamiento offline, seguridad
overlayRed que conecta contenedores en múltiples hosts (requiere Docker Swarm o similar)Clusters multi-host
macvlanAsigna dirección MAC real al contenedor, aparece como dispositivo físico en la redAplicaciones legacy que necesitan IP en la LAN

3.8 Docker Compose

Docker Compose permite definir y ejecutar aplicaciones multi-contenedor mediante un archivo declarativo docker-compose.yml (o compose.yaml).

SecciónDescripción
servicesDefine cada contenedor (imagen, build, ports, volumes, environment, depends_on, networks)
volumesDeclara volúmenes con nombre para datos persistentes
networksDefine redes personalizadas
configs / secretsGestión de configuración y secretos
Comando ComposeFunción
docker compose up -dInicia todos los servicios en segundo plano
docker compose downPara y elimina contenedores, redes (añadir -v elimina volúmenes)
docker compose psLista el estado de los servicios
docker compose logs -f servicioMuestra logs en tiempo real de un servicio
docker compose buildReconstruye las imágenes de los servicios
docker compose exec servicio bashAbre shell en un servicio en ejecución

3.9 OCI y alternativas a Docker

La Open Container Initiative (OCI), bajo la Linux Foundation, define los estándares abiertos para contenedores:

Estándar OCIQué define
Runtime SpecificationCómo ejecutar un contenedor (configuración, ciclo de vida, hooks). Implementación de referencia: runc
Image SpecificationFormato de las imágenes de contenedor (manifiesto, capas, configuración)
Distribution SpecificationAPI HTTP para distribuir imágenes (push/pull a registros)
AlternativaDescripción
PodmanCompatible con Docker CLI pero sin daemon (daemonless). Puede ejecutar contenedores rootless. Desarrollado por Red Hat
BuildahHerramienta para construir imágenes OCI sin necesitar un daemon
SkopeoCopia e inspecciona imágenes entre registros sin descargarlas completamente
CRI-ORuntime de contenedores ligero diseñado específicamente para Kubernetes (implementa CRI)
LXC/LXDContenedores de sistema (parecidos a VMs ligeras), ejecutan un init completo. LXD es la interfaz de gestión

4. KUBERNETES (K8s)

CLAVE EXAMEN: Kubernetes aparece en los exámenes TAI desde 2022. Preguntan la arquitectura (qué hace cada componente del control plane), los objetos principales (Pod, Deployment, Service, ConfigMap), y comandos kubectl básicos.

4.1 Arquitectura de Kubernetes

Kubernetes (K8s) es un orquestador de contenedores de código abierto, originalmente desarrollado por Google y ahora mantenido por la CNCF (Cloud Native Computing Foundation). Su arquitectura se divide en Control Plane (nodos master) y Data Plane (nodos worker).

Control Plane (Master)
ComponenteFunción
kube-apiserverAPI REST central de K8s. Toda comunicación pasa por aquí. Valida y procesa peticiones. Puerto 6443
etcdBase de datos clave-valor distribuida que almacena TODO el estado del cluster. Puerto 2379-2380
kube-schedulerDecide en qué nodo worker se ejecuta cada nuevo pod (basándose en recursos, afinidad, tolerations)
kube-controller-managerEjecuta los controladores (loops de reconciliación): ReplicaSet, Node, Endpoint, ServiceAccount
cloud-controller-managerIntegra con APIs del proveedor cloud (balanceadores, volúmenes, nodos)
Data Plane (Worker Nodes)
ComponenteFunción
kubeletAgente en cada nodo worker. Recibe instrucciones del API server y gestiona los pods/contenedores del nodo
kube-proxyGestiona las reglas de red (iptables/IPVS) para enrutar tráfico a los pods. Implementa el concepto de Service
Container RuntimeEjecuta los contenedores. Debe implementar la CRI (Container Runtime Interface): containerd, CRI-O

4.2 Objetos principales de Kubernetes

ObjetoDescripción
PodUnidad mínima desplegable. Contiene uno o más contenedores que comparten red (IP) y almacenamiento. Los contenedores del mismo pod se comunican por localhost
ReplicaSetAsegura que un número determinado de réplicas de un pod estén ejecutándose en todo momento
DeploymentGestiona ReplicaSets con actualizaciones declarativas (rolling update, rollback). Es el objeto más usado para desplegar aplicaciones
StatefulSetComo Deployment pero para aplicaciones con estado: identidad de red estable, almacenamiento persistente ordenado (ej. bases de datos)
DaemonSetAsegura que un pod se ejecute en CADA nodo del cluster (ej. agentes de monitorización, log collectors)
Job / CronJobJob: ejecuta tareas hasta completarse. CronJob: las programa periódicamente (sintaxis cron)
ServiceAbstracción de red que expone un conjunto de pods. IP virtual estable + DNS interno. Tipos: ClusterIP, NodePort, LoadBalancer, ExternalName
IngressReglas HTTP/HTTPS de enrutamiento: host/path → Service. Requiere un Ingress Controller (NGINX, Traefik, HAProxy)
ConfigMapAlmacena configuración como pares clave-valor. Se inyecta como variables de entorno o archivos montados
SecretComo ConfigMap pero para datos sensibles (contraseñas, tokens). Codificado en Base64 (NO cifrado por defecto)
PersistentVolume (PV)Recurso de almacenamiento aprovisionado por el administrador o dinámicamente
PersistentVolumeClaim (PVC)Solicitud de almacenamiento por parte de un pod. Se enlaza (bind) a un PV
NamespacePartición lógica del cluster para aislar recursos. Namespaces por defecto: default, kube-system, kube-public, kube-node-lease
NetworkPolicyReglas de firewall a nivel de pod: controlan tráfico ingress/egress
HPA (HorizontalPodAutoscaler)Escala automáticamente el número de pods según métricas (CPU, memoria, custom)

4.3 Tipos de Service

TipoDescripciónAcceso
ClusterIPIP virtual interna al cluster (por defecto)Solo desde dentro del cluster
NodePortExpone el servicio en un puerto estático (30000-32767) en cada nodoDesde fuera via nodo:puerto
LoadBalancerAprovisiona un balanceador del proveedor cloudIP pública externa
ExternalNameMapea un servicio a un nombre DNS externo (CNAME)Redirección DNS

4.4 kubectl — Comandos esenciales

ComandoFunción
kubectl get pods/svc/deploy/nodesLista recursos (-o wide para más detalle, -n namespace para filtrar)
kubectl describe pod nombreInformación detallada y eventos de un recurso
kubectl apply -f manifiesto.yamlAplica configuración declarativa (crea o actualiza recursos)
kubectl delete -f manifiesto.yamlElimina los recursos definidos en el manifiesto
kubectl logs pod [-c contenedor]Muestra logs de un pod (-f para seguir en tiempo real)
kubectl exec -it pod -- bashAbre shell interactivo en un pod
kubectl scale deploy nombre --replicas=5Escala un deployment a 5 réplicas
kubectl rollout status/undo deploy nombreVerifica estado de un despliegue o hace rollback
kubectl port-forward pod 8080:80Reenvía un puerto local al pod (desarrollo/debug)
kubectl top pods/nodesMuestra consumo de CPU y memoria (requiere metrics-server)
kubectl create namespace nombreCrea un namespace
kubectl config use-context nombreCambia el contexto activo (cluster + usuario + namespace)

4.5 Kubernetes como servicio (KaaS)

ServicioProveedorNotas
EKS (Elastic Kubernetes Service)AWSControl plane gestionado. Nodos: EC2 o Fargate (serverless)
AKS (Azure Kubernetes Service)MicrosoftControl plane gratuito. Integración con Azure AD y Azure Monitor
GKE (Google Kubernetes Engine)GoogleEl más maduro (Google creó K8s). Modo Autopilot (totalmente gestionado)
OpenShiftRed HatDistribución empresarial de K8s con herramientas adicionales (Source-to-Image, Routes, OperatorHub)
RancherSUSEPlataforma de gestión multi-cluster K8s
k3sSUSE/RancherK8s ligero para edge/IoT, binario único de ~70 MB
MinikubeKubernetes SIGK8s local para desarrollo/aprendizaje (un solo nodo)

5. MICROSERVICIOS

5.1 Concepto: Monolito vs Microservicios

AspectoMonolitoMicroservicios
EstructuraUn único proceso/artefacto desplegableMúltiples servicios independientes, cada uno con su propio proceso
Base de datosCompartida (una BBDD para toda la app)Database-per-service (cada servicio con su propia BBDD)
DespliegueTodo junto — un cambio requiere redesplegar todoIndependiente — cada servicio se despliega por separado
EscaladoVertical (más HW) o replicar todoHorizontal y granular (escalar solo el servicio que necesita más recursos)
TecnologíaStack únicoPolíglota — cada servicio puede usar lenguaje/framework/BBDD diferente
ComplejidadCódigo complejo, operaciones simplesCódigo simple por servicio, operaciones complejas (red, observabilidad)
FalloUn fallo puede tumbar toda la aplicaciónFallo aislado al servicio (si hay resiliencia)

5.2 Comunicación entre microservicios

TipoPatrónTecnologíaCaracterísticas
SíncronaREST (HTTP/JSON)HTTP 1.1/2Simple, universal, con latencia y acoplamiento temporal
gRPCHTTP/2 + Protocol BuffersBinario, tipado, streaming bidireccional, muy eficiente. Puerto 50051
AsíncronaMessage QueueRabbitMQ (AMQP, puerto 5672), ActiveMQProductor → Cola → Consumidor. Desacoplamiento temporal
Event StreamingApache Kafka (puerto 9092)Log distribuido, alto throughput, retención configurable. Ideal para event sourcing
Pub/SubRedis Pub/Sub, NATS, AWS SNS+SQSPublicador → Topic → Suscriptores (1:N)

5.3 Patrones de microservicios

PatrónDescripción
API GatewayPunto de entrada único que enruta peticiones a los microservicios internos. Gestiona autenticación, rate limiting, transformación. Ej: Kong, AWS API Gateway, Spring Cloud Gateway
Service DiscoveryRegistro dinámico de servicios para que se encuentren entre sí sin hardcodear IPs. Server-side: Consul, Eureka, etcd. Client-side: el cliente consulta el registro y elige
Service MeshCapa de infraestructura con proxies sidecar que gestionan comunicación entre servicios (mTLS, retry, tracing). Ej: Istio (sidecar: Envoy), Linkerd
Circuit BreakerEvita llamadas repetidas a un servicio caído. Estados: CLOSED (normal) → OPEN (fallo, corta llamadas) → HALF-OPEN (prueba). Ej: Resilience4j, Hystrix (deprecated)
BulkheadAísla recursos entre servicios para que el fallo de uno no agote los recursos de otros (pools separados)
Retry con backoff exponencialReintenta peticiones fallidas con tiempos crecientes (1s, 2s, 4s...) + jitter aleatorio para evitar thundering herd
SidecarContenedor auxiliar que se despliega junto al servicio principal en el mismo pod, proporcionando funcionalidad cross-cutting (logging, proxy, config)
BFF (Backend for Frontend)Un API Gateway específico para cada tipo de cliente (web, móvil, IoT), adaptando las respuestas
Strangler FigPatrón de migración gradual: se van reemplazando partes del monolito por microservicios, redirigiendo tráfico progresivamente

5.4 Patrones de datos

PatrónDescripción
Database-per-ServiceCada microservicio tiene su propia BBDD, garantizando autonomía. Otros servicios acceden a datos solo vía API
SagaTransacciones distribuidas sin 2PC: secuencia de transacciones locales con compensaciones si alguna falla. Dos enfoques: coreografía (eventos) o orquestación (coordinador central)
CQRS (Command Query Responsibility Segregation)Separa el modelo de escritura (Command) del de lectura (Query). Permite optimizar cada uno independientemente
Event SourcingEn lugar de guardar el estado actual, se almacenan todos los eventos que lo produjeron. El estado se reconstruye reproduciendo eventos
Outbox PatternEscribe eventos en una tabla "outbox" de la misma transacción local. Un proceso aparte los publica al broker, garantizando consistencia

5.5 Observabilidad (los 3 pilares)

PilarQué mideHerramientas
LogsRegistro de eventos (texto estructurado)ELK Stack (Elasticsearch + Logstash + Kibana), Fluentd, Loki (Grafana)
MétricasDatos numéricos agregados en series temporales (CPU, latencia, errores)Prometheus (recolección pull, puerto 9090) + Grafana (visualización, puerto 3000)
Trazas distribuidasSeguimiento de una petición a través de múltiples serviciosJaeger, Zipkin, OpenTelemetry (estándar unificado CNCF)

5.6 Frameworks y herramientas para microservicios

HerramientaLenguaje/PlataformaUso
Spring Boot + Spring CloudJavaFramework dominante para microservicios Java (gateway, config, discovery, resilience)
QuarkusJavaFramework Java nativo en la nube (GraalVM), arranque ultrarrápido
.NET (ASP.NET Core)C#Microservicios con middleware integrado, health checks, config distribuida
Go (Gin, Echo)GoServicios ligeros con alto rendimiento y baja huella de memoria
Node.js (Express, Fastify, NestJS)JavaScript/TSMicroservicios ligeros, event-driven, ideal para I/O intensivo

6. CI/CD Y DESPLIEGUE DE CONTENEDORES

6.1 Pipeline CI/CD típico

FaseDescripciónHerramientas
SourceCommit al repositorio dispara el pipelineGit, GitHub, GitLab, Bitbucket
BuildCompilación del código + construcción de imagen DockerMaven, Gradle, npm, docker build, Kaniko
TestTests unitarios, integración, seguridad (SAST/DAST)JUnit, Jest, SonarQube, Trivy
RegistryPush de la imagen al registro de contenedoresDocker Hub, Harbor, ECR, ACR, GCR
DeployDespliegue al entorno (dev/staging/prod)kubectl apply, Helm, ArgoCD, Flux
MonitorObservabilidad post-desplieguePrometheus, Grafana, Datadog, ELK

6.2 Estrategias de despliegue

EstrategiaDescripciónRiesgo
Rolling UpdateReemplaza pods gradualmente (por defecto en K8s Deployments)Bajo — siempre hay pods activos
Blue/GreenDos entornos idénticos; se cambia el tráfico del blue (actual) al green (nuevo) de golpeBajo — rollback inmediato
CanarySe envía un % pequeño de tráfico a la nueva versión; si va bien, se escala al 100%Muy bajo — afecta a pocos usuarios
RecreateSe para todo y se despliega la nueva versión (downtime)Alto — hay interrupción
A/B TestingDiferentes versiones para diferentes usuarios (basado en headers, cookies, geolocalización)Bajo — controlado por reglas

6.3 GitOps

GitOps es un paradigma donde Git es la fuente única de verdad para la configuración de infraestructura y aplicaciones. Un operador (ej. ArgoCD, Flux) observa el repositorio y sincroniza automáticamente el estado del cluster con lo declarado en Git.

HerramientaDescripción
HelmGestor de paquetes de Kubernetes. Los charts son plantillas parametrizadas de manifiestos YAML (values.yaml). Repositorio central: Artifact Hub
ArgoCDOperador GitOps para K8s: monitoriza un repo Git y aplica cambios automáticamente al cluster. UI web incluida
FluxOperador GitOps alternativo (CNCF graduated). Más ligero, sin UI nativa
KustomizePersonalización de manifiestos YAML sin templates (integrado en kubectl)
TerraformIaC para aprovisionar infraestructura cloud (no específico de K8s pero complementario)


FUENTES PÚBLICAS

Este resumen ha sido elaborado íntegramente a partir de fuentes de dominio público. No se ha utilizado material con copyright de terceros ni material de preparadores.
FuenteTipoReferencia
Documentación de DockerDocumentación oficialdocs.docker.com
Documentación de KubernetesDocumentación oficialkubernetes.io/docs (Apache 2.0)
KVM documentationDocumentación oficiallinux-kvm.org
OCI — Open Container InitiativeEstándaropencontainers.org

¿Quieres practicar este tema con tests?

MIMIR tiene más de 5.000 preguntas verificadas, simulacros con penalización real y chat IA que resuelve tus dudas sobre este tema.

Abrir MIMIR gratis →