Kubernetes 1.37 sale hoy con nombre propio: **Garhwal**, por la región del Himalaya indio. Las cifras oficiales: 67 enhancements — 16 graduados a estable, 23 a beta, 27 nuevos en alfa y una deprecación —, 1.224 issues y PRs en el milestone, etcd 3.7 por defecto, CoreDNS 1.14.6 y Go 1.26.5.
Como cada release, los titulares se los llevan las funcionalidades con nombre bonito. Pero cuando administras un clúster, la pregunta no es qué suena mejor: es qué te toca hacer. Este es el resumen ordenado así. Diecisiete cambios; los cuatro primeros los más importantes para no tener sustos en la actualización.
Lo que puede romper la actualización
SELinuxMount llega a GA
Hasta ahora los volúmenes se reetiquetaban recursivamente y varios Pods con etiquetas SELinux distintas podían compartir un volumen en el mismo nodo. Ahora se montan con `-o context=<label>`, y un montaje solo admite un contexto: esos Pods que convivían pueden dejar de arrancar. Solo aplica si tienes SELinux activo y el driver CSI declara `seLinuxMount: true`. Dos salidas: por carga, `seLinuxChangePolicy: Recursive` en el `securityContext` del Pod; y a nivel de clúster, el feature gate se puede desactivar todavía — no queda bloqueado hasta la 1.38 (KEP-1710). Es la única nota *action required* que puede parar Pods en producción.
cgroup v1 no arranca el kubelet
No es nuevo de la 1.37: desde la 1.35, `failCgroupV1` vale `true` por defecto y el kubelet ni se inicializa en un nodo con cgroup v1. El parche es ponerlo a `false` en la `KubeletConfiguration`, pero pierdes Memory QoS y el redimensionado en caliente, y la retirada definitiva de cgroup v1 (KEP-5573) ya está planificada.
Las APIs de scheduling por grupos cambian de versión.
Workload y PodGroup promocionan a scheduling.k8s.io/v1beta1, la v1alpha2 desaparece y el api-server no migra los objetos por ti. Si probaste la alfa en 1.36, tienes que borrar todos los objetos v1alpha2 antes de actualizar — es otra de las notas *action required* de la release.
El kubelet no arranca con flags antiguos de cAdvisor.
Si sigues utilizando --containerd, --event-storage-age-limit, los --storage-driver-* o cualquier otro flag heredado de cAdvisor, el kubelet falla al arrancar. Solo se permite --housekeeping-interval. Y desaparecen de /metrics/cadvisor las series container_cpu_load_average_10s y container_tasks_state: si tienes dashboards o alertas, migra antes de actualizar.
Lo que promociona a estable
La Metrics API gradúa a v1 tras casi nueve años en beta.
Es la API que hay debajo de kubectl top y del HorizontalPodAutoscaler, en v1beta1 desde la 1.8. Sube a v1 sin cambios funcionales, y v1beta1 sigue sirviendo durante la transición (KEP-5207).
DRA madura de golpe: GPUs en una línea
Los recursos extendidos sobre Dynamic Resource Allocation llegan a GA (KEP-5004): un nombre de recurso como example.com/gpu: 3 se asigna a una DeviceClass y se pide con la sintaxis clásica de resources, sin declarar ResourceClaims a mano. Graduan también los taints/tolerations de dispositivos (KEP-5055) y el estado por dispositivo en el ResourceClaim (KEP-4817), que por fin expone cosas como la IP de una interfaz de red asignada por DRA.
Pod Certificates y ClusterTrustBundles, en GA
Identidad por Pod con certificados X.509 emitidos y rotados por la plataforma, sin montar Secrets: un volumen proyectado podCertificate para la clave y el certificado, y otro clusterTrustBundle para las anclas de confianza (KEP-4317 y KEP-3257).
KYAML es estable
kubectl get -o kyaml: un subconjunto de YAML con llaves y comillas explícitas, sin el problema de Noruega ni sangrados traicioneros. Todo KYAML es YAML válido, así que no cambia nada en tus pipelines. No lo estrena la versión 1.37 — alfa en la 1.34, beta en la 1.35 —, pero ahora es estable (KEP-5295).
Redimensionar init containers en caliente
In-Place Pod Resize para init containers (los sidecars, entre otros) llega a GA.
Lo que llega en beta
El HPA puede escalar a cero
Introducido en la 1.16, llega a beta y activado por defecto: con minReplicas: 0, un HorizontalPodAutoscaler puede apagar del todo una carga ociosa y recuperarla cuando vuelva la demanda. Solo con métricas *object* o *external* — con CPU y memoria no puede, porque dependen de que haya Pods en ejecución. Para consumidores de colas, batch y cargas con GPU, es dinero (KEP-2021).
Gang scheduling
El scheduler puede tratar un grupo de Pods como una unidad todo-o-nada sobre las APIs de Workload y PodGroup: o cabe el grupo entero, o no se programa ninguno. Con preemption consciente del workload, para no desalojar Pods sueltos que no liberan capacidad útil. Es la pieza que faltaba para entrenamientos de ML y HPC sin deadlocks (KEP-4671).
El kubelet sin root en el host
Los componentes de nodo pueden correr dentro de un user namespace de Linux (KEP-2033): usuario sin privilegios en el host, root solo dentro del namespace. Una capa más de aislamiento.
Memory QoS
Protección de memoria con cgroup v2 (memory.min, memory.low, memory.high), con el gate activado por defecto. Los valores por defecto están pensados para no estrangular nada al actualizar: el throttling solo entra si configuras memoryThrottlingFactor explícitamente (KEP-2570).
Lo que se despide
kube-proxy en modo ipvs
Deprecado desde la 1.35, con aviso al arrancar. La 1.37 añade el feature gate KubeProxyIPVS, el interruptor con el que se apagará por defecto en la 1.40 y desaparecerá en la 1.43 (KEP-5495). El destino es nftables, GA desde la 1.33.
kube-dns
CoreDNS es el DNS por defecto desde la 1.13, y kube-dns se quedó atrás hace años: ni EndpointSlices ni dual-stack. El proyecto está retirado y no se esperan paquetes nuevos después de la 1.40. Si aún lo ejecutas, ve planificando la migración a CoreDNS.
Los Pods estáticos ya no pueden leer Secrets ni ConfigMaps
Era un bug que les permitía referenciar recursos de la API mediante configMapRef o secretRef sin pasar por el api-server. Queda prohibido, y el feature gate que permitía optar por el comportamiento antiguo ha desaparecido.
kubectl run --filename
Queda deprecado. En realidad el flag ya era ignorado: el Pod siempre se construía desde los argumentos.
Kubernetes 101 sale el 1 de septiembre, escrito con esta misma versión
365 páginas, 15 capítulos y 55 laboratorios sobre un único sistema que crece capítulo a capítulo hasta ser una tienda de 10 piezas en 3 nodos. El apéndice C — “Desde cuándo funciona cada pieza” — recoge en qué estado está cada funcionalidad y desde qué versión
Kindle 12,99 € · papel 24,99 €. Prólogo de Eric Trigo.
