Saltar al contenido principal
CLOUD-701 • 38 Horas • Nivel Avanzado / Principal Cloud Native & IDP Architect

Plataforma Interna de Desarrolladores (IDP), Kubernetes Multi-Clúster, Service Mesh (Cilium eBPF) y Canary

Ingeniería de Plataformas (Backstage, Golden Paths y Crossplane Control Planes), internals del plano de control de Kubernetes (etcd Raft, Scheduler y Operator Pattern), Service Mesh sin Sidecars con Cilium eBPF / Istio Ambient y Progressive Delivery (Argo Rollouts).

Módulo 1: Módulo 1: Internals del Plano de Control de Kubernetes, Patrón Operador y Escalabilidad de Clúster

Anatomía Profunda del Control Plane: etcd MVCC, kube-apiserver Watch Cache y Optimistic Concurrency (50 min)

Anatomía Profunda del Control Plane: etcd MVCC, kube-apiserver Watch Cache y Optimistic Concurrency

1. Control de Concurrencia Optimista mediante resourceVersion (etcd Revision)

En Kubernetes no existen transacciones con bloqueos pesimistas entre controladores. Cada objeto almacenado en etcd (motor B+Tree MVCC sobre BoltDB/bbolt respaldado por Raft) posee un metadato entero monotónico llamado resourceVersion que refleja la revisión global del log MVCC: - Cuando un controlador lee un objeto (resourceVersion: "48102"), lo modifica y envía un PUT o Apply, kube-apiserver ejecuta una operación atómica Compare-And-Swap (CAS) en etcd verificando que la revisión actual siga siendo 48102. - Si otro controlador modificó el objeto un milisegundo antes, kube-apiserver rechaza la escritura con HTTP 409 Conflict, obligando al cliente a refrescar desde su caché local y reintentar.

2. Por Qué un LIST Sin Caché Desde 500 Nodos Derrumba etcd

Hacer LIST de todos los Pods directamente contra etcd desde cientos de demonios agota los $8\text{ GB}$ de cuota de etcd y satura el disco (donde wal_fsync_duration_seconds debe mantenerse siempre $< 10\text{ ms}$ p99). Los componentes de producción utilizan SharedInformers, que abren un stream WATCH eficiente desde el Watch Cache en memoria del kube-apiserver y mantienen un almacén indexado local en RAM.

Ingeniería de Operadores (CRDs + Controller Runtime): Lógica Level-Triggered, Finalizers y Server-Side Apply (50 min)

Ingeniería de Operadores (CRDs + Controller Runtime): Lógica Level-Triggered, Finalizers y Server-Side Apply

1. Diseño Level-Triggered (Basado en Estado) vs. Edge-Triggered (Basado en Eventos)

Un controlador de Kubernetes no debe depender del tipo de evento individual que lo despertó (Edge-Triggered), porque los eventos pueden agruparse o perderse durante una reconexión de red. La función Reconcile(ctx, req) recibe únicamente el NamespacedName del recurso y debe ser Level-Triggered e Idempotente: 1. Lee el Estado Deseado (Spec) actual del Custom Resource (CRD). 2. Inspecciona el Estado Real (ObservedState) en el clúster o nube externa. 3. Calcula el diferencial $\Delta = \text{Spec} - \text{Observed}$ y ejecuta las acciones idempotentes necesarias.

2. Ciclo de Vida de Limpieza Externa con Finalizers

Si un CRD aprovisiona un bucket S3 o una base de datos RDS externa y el usuario ejecuta kubectl delete, borrar el objeto de etcd inmediatamente dejaría el recurso cloud huérfano cobrando miles de dólares. Al añadir un finalizer al CRD, kubectl delete solo estampa deletionTimestamp, permitiendo que el Operador elimine primero el recurso externo de forma segura y luego retire el finalizer para que etcd borre el registro.

Scheduling de Alta Resiliencia: TopologySpreadConstraints, PodDisruptionBudgets (PDB) y Karpenter (45 min)

Scheduling de Alta Resiliencia: TopologySpreadConstraints, PodDisruptionBudgets (PDB) y Karpenter

1. Garantía Matemática de Supervivencia Ante Caída de Zona de Disponibilidad (AZ)

1. topologySpreadConstraints: Fuerza que las réplicas de un microservicio se repartan equitativamente entre zonas (topologyKey: topology.kubernetes.io/zone, maxSkew: 1). 2. PodDisruptionBudget (minAvailable: "80%" o maxUnavailable: 1): Impide que un drenado de nodos (kubectl drain o consolidación de Karpenter) desaloje simultáneamente más pods de los permitidos por el presupuesto de disponibilidad.

Módulo 2: Módulo 2: Redes de Próxima Generación y Service Mesh Sin Sidecar: Cilium eBPF e Istio Ambient

Por Qué kube-proxy (iptables) Degrada en O(N) y Cómo Cilium eBPF Logra Enrutamiento en O(1) (55 min)

Por Qué kube-proxy (iptables) Degrada en O(N) y Cómo Cilium eBPF Logra Enrutamiento en O(1)

1. El Cuello de Botella de iptables en Clústeres con 10,000+ Services

El modo clásico de kube-proxy traduce cada Service de Kubernetes en una cadena secuencial de reglas iptables en el kernel: - Enrutamiento de Paquetes en $\mathcal{O}(N)$: Cada paquete de red debe evaluar secuencialmente miles de reglas lineales. - Actualización de Reglas en $\mathcal{O}(N^2)$: Añadir o borrar un solo Pod exige descargar, modificar y volver a cargar de forma monolítica decenas de miles de líneas de iptables-restore.

2. Reemplazo Total de kube-proxy con Cilium eBPF y Mapas Hash en el Kernel

flowchart LR
    APP["Socket App (connect() a Virtual IP de Service)"] --> EBPF["Hook eBPF cgroup/connect4 en Kernel"]
    EBPF -->|"Lookup O(1) en Mapa Hash BPF"| POD["Reescribe Destino Directamente a Pod IP:Port (Sin NAT intermedio por paquete)"]

Cilium intercepta la llamada connect() a nivel de socket (cgroup/connect4) utilizando un Mapa Hash eBPF en $\mathcal{O}(1)$, traduciendo la IP virtual del Service directamente a la IP del Pod destino antes incluso de construir el paquete TCP y puenteando las capas innecesarias de netfilter mediante Socket Map Redirection.

Evolución del Service Mesh: El Impuesto de los Sidecars (Envoy por Pod) vs. Sidecarless (Cilium / Istio Ambient) (50 min)

Evolución del Service Mesh: El Impuesto de los Sidecars (Envoy por Pod) vs. Sidecarless (Cilium / Istio Ambient)

1. El "Sidecar Tax" en Arquitecturas Tradicionales de Service Mesh

Inyectar un contenedor proxy Envoy dentro de cada uno de los $5,000$ Pods de un clúster provoca: 1. Sobrecarga de Memoria y CPU: $5,000$ instancias de Envoy replicando toda la configuración del clúster (xDS) consumen cientos de gigabytes de RAM. 2. Latencia de Red Duplicada: Cada paquete atraviesa la pila TCP/iptables del kernel 4 veces extra para entrar y salir del contenedor sidecar. 3. Condiciones de Carrera en el Ciclo de Vida: Jobs de procesamiento batch que no terminan nunca porque el contenedor sidecar sigue vivo, o contenedores de app que fallan al arrancar porque el sidecar aún no levantó la red.

2. Arquitectura Sidecarless en Dos Capas (Istio Ambient Mesh / Cilium Mesh)

Separamos el plano de datos en dos niveles compartidos por nodo: 1. Capa Segura L4 por Nodo (ztunnel en Rust / Cilium eBPF): Un agente ultraligero por nodo que provee mTLS Zero-Trust con identidades SPIFFE/SPIRE y telemetría L4 para todos los pods sin inyectar sidecars. 2. Waypoint Proxies L7 bajo Demanda: Proxies Envoy compartidos por namespace desplegados únicamente para los servicios que requieren políticas L7 avanzadas (retries, header routing, rate limiting).

Kubernetes Multi-Clúster Activo-Activo: Cilium ClusterMesh y el Estándar Kubernetes Gateway API (45 min)

Kubernetes Multi-Clúster Activo-Activo: Cilium ClusterMesh y el Estándar Kubernetes Gateway API

1. De Ingress Limitado a la Especificación Declarativa Gateway API

El recurso clásico Ingress carecía de soporte nativo para gRPC, canary weighting, header manipulation y separación de roles, obligando a usar decenas de anotaciones propietarias de Nginx/ALB. Kubernetes Gateway API desacopla la infraestructura en tres recursos orientados por rol: 1. GatewayClass (Proveedor Cloud/Infra): Define el controlador subyacente (Envoy, Cilium, AWS Lattice). 2. Gateway (Equipo de Plataforma/SecOps): Define puertos, listeners y certificados TLS corporativos. 3. HTTPRoute / GRPCRoute (Equipo de Desarrollo): Define rutas, filtros y pesos de división de tráfico hacia los Services de la aplicación.

Módulo 3: Módulo 3: Ingeniería de Plataformas (IDP con Backstage & Crossplane) y Progressive Delivery (Canary)

Diseño de una Internal Developer Platform (IDP): Reducción de Carga Cognitiva, Backstage y Crossplane (50 min)

Diseño de una Internal Developer Platform (IDP): Reducción de Carga Cognitiva, Backstage y Crossplane

1. Plataforma como Producto (Team Topologies) y Golden Paths

Obligar a cada desarrollador de producto a escribir desde cero 1,500 líneas de Terraform, manifiestos Helm, políticas IAM, alertas Prometheus y pipelines CI/CD multiplica la carga cognitiva y los errores de seguridad.

Una IDP moderna combina dos planos declarativos: 1. Portal de Desarrollador (Backstage): Expone el Catálogo de Software unificado, Scorecards de madurez SRE/Seguridad y plantillas Golden Path de autoservicio. 2. Plano de Control de Infraestructura (Crossplane): A diferencia de terraform apply ejecutado puntualmente en CI (que no corrige el configuration drift hasta el próximo commit), Crossplane extiende el API Server de Kubernetes mediante Compositions (XRDs) que reconcilian continuamente bases de datos RDS, colas y buckets cloud con las mismas políticas RBAC y GitOps (ArgoCD) que las aplicaciones.

Progressive Delivery con Argo Rollouts: Canary Automatizado con Análisis Estadístico de SLIs y Auto-Rollback (55 min)

Progressive Delivery con Argo Rollouts: Canary Automatizado con Análisis Estadístico de SLIs y Auto-Rollback

1. Por Qué el RollingUpdate Nativo de Kubernetes No Protege Contra Bugs de Lógica

Un Deployment estándar de Kubernetes solo verifica que el nuevo Pod responda 200 OK en su readinessProbe. Si la nueva versión tiene un bug que devuelve errores HTTP 500 en el $15\%$ de los pagos reales de clientes, el RollingUpdate reemplazará el $100\%$ de los pods en 60 segundos causando una caída total.

flowchart LR
    V2["Nuevo Commit v2.4.0"] --> C5["Paso 1: Enviar 5% de Tráfico Real al Canary (5 min)"]
    C5 --> AR["AnalysisRun (Consulta Prometheus: Success Rate >= 99.9% y p99 <= 180ms)"]
    AR -->|"PASS"| C25["Paso 2: Escalar a 25% -> 50% -> 100% Promoción Completa"]
    AR -->|"FAIL"| RB["AUTO-ROLLBACK INMEDIATO (< 2s): 100% Tráfico vuelve a Stable v2.3.9"]

Con Argo Rollouts (o Flagger), cada incremento de peso en el HTTPRoute está condicionado por un recurso AnalysisTemplate que consulta Prometheus/Datadog en tiempo real y aborta automáticamente el despliegue ante cualquier regresión en la tasa de éxito o latencia p99.

Ingeniería FinOps en Kubernetes: Erradicación de Slack Cost (Requests vs. Usage) y Consolidación con Karpenter (45 min)

Ingeniería FinOps en Kubernetes: Erradicación de Slack Cost (Requests vs. Usage) y Consolidación con Karpenter

1. El Desperdicio Silencioso del "Slack Cost" (CPU/Memory Requests Inflados)

El planificador de Kubernetes (kube-scheduler) reserva capacidad en los nodos basándose exclusivamente en resources.requests, nunca en el uso real. Si los equipos configuran requests.memory: 4Gi para un microservicio que en realidad consume 350Mi, el $91\%$ de la memoria pagada a AWS/GCP queda bloqueada e inutilizable (Slack / Idle Allocation).

Automatización FinOps: 1. Visibilidad por namespace/tenant con OpenCost / Kubecost. 2. Ajuste continuo de requests basado en el percentil $p99$ histórico de 14 días más un margen del $20\%$ (recomendador VPA / Goldilocks). 3. Karpenter Consolidation: Reemplaza nodos subutilizados en vivo por instancias del tamaño exacto o migra los pods a nodos existentes, reduciendo la factura de cómputo entre un $35\%$ y un $55\%$.

Módulo 4: Módulo 4: Laboratorio de Evaluación Automática Canary / FinOps y Evaluación de Certificación

Gobernanza Automatizada en la IDP: Production Readiness Scorecards y Métricas DORA (45 min)

Gobernanza Automatizada en la IDP: Production Readiness Scorecards y Métricas DORA

El catálogo de la IDP evalúa continuamente el nivel de madurez (Bronze / Silver / Gold) de cada microservicio verificando programáticamente la presencia de: PodDisruptionBudget, límites de memoria (GOMEMLIMIT / requests = limits para memoria Guaranteed), AnalysisTemplate de Canary, SBOM firmado y alertas de Burn Rate de SLO.

Laboratorio Práctico: Motor de Decisión Automatizada de Canary Release (Argo Rollouts AnalysisRun) en SQL (60 min)

Laboratorio Práctico: Motor de Decisión Automatizada de Canary Release (Argo Rollouts AnalysisRun) en SQL

Contexto del Desafío de Platform Engineering & Progressive Delivery

Estamos auditando las métricas en vivo de 4 despliegues Canary gestionados por Argo Rollouts (al $10\%$ de tráfico) almacenadas en la tabla canary_rollout_metrics: - service_name (TEXT) - canary_version (TEXT) - total_requests (INTEGER) - error_5xx_count (INTEGER) - latency_p99_ms (INTEGER)

Nuestra política de AnalysisTemplate exige que para promover el Canary a producción se cumplan ambas condiciones simultáneamente: 1. La tasa de éxito (100.0 * (total_requests - error_5xx_count) / total_requests) debe ser >= 99.50%. 2. La latencia latency_p99_ms debe ser <= 200 ms.

Objetivo de la Consulta SQL

Escribe una consulta SQL que evalúe los 4 servicios y devuelva: 1. service_name 2. canary_version 3. success_rate_pct: tasa de éxito redondeada a 2 decimales 4. latency_p99_ms 5. rollout_action: 'PROMOTE_TO_STABLE' si cumple ambas condiciones, o 'ABORT_AND_ROLLBACK' si viola cualquiera de las dos. Ordena el resultado por service_name ASC.

Evaluación de Certificación: Plataforma Interna de Desarrolladores (IDP), Kubernetes, Cilium eBPF y Canary (45 min)

Evaluación de Certificación: CLOUD-701

Demuestra tu dominio de los internals del plano de control de Kubernetes, operadores, Cilium eBPF, Service Mesh sin sidecars y Progressive Delivery.