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.