>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Rust

Reescribiendo Kubernetes desde cero en Rust: Un vistazo al proyecto Rusternetes

Los chistes sobre programadores de sistemas que intentan reescribir todo en Rust se han convertido hace mucho en un tópico clásico. Por lo general, estos esfuerzos terminan en la etapa de "Hola Mundo" o en analizar configuraciones básicas. Pero con Rusternetes, la historia resultó completamente diferente. El autor del proyecto fue tras el propio Kubernetes y lo reescribió desde cero.

Esto no es un wrapper alrededor de código Go ni un mock de prueba reducido. El repositorio contiene un plano de control y componentes de nodo completos: API server, scheduler, controller manager, kubelet y kube-proxy. Todo está escrito en Rust sin dependencias externas de Go.

El proyecto contiene más de 216,000 líneas de código, distribuidas en 10 crates, 31 controladores y más de 3,100 pruebas unitarias. Los desarrolladores verifican la compatibilidad usando el suite de pruebas e2e oficial de Kubernetes (v1.35) a través de Sonobuoy. Actualmente, Rusternetes pasa exitosamente el 94% de las pruebas de conformidad (415 de 441).

¿Por qué otro Kubernetes

El Kubernetes original está escrito en Go y requiere recursos considerables. Para levantar incluso un cluster local mínimo como minikube o k3s, tienes que asignar una máquina virtual o ejecutar varios contenedores pesados con etcd.

Rusternetes resuelve este problema con opciones de despliegue flexibles. Tiene tres modos de operación:

  1. Cluster clásico con etcd. Todos los componentes se ejecutan en contenedores separados y se comunican con un cluster de etcd.
  2. Reemplazar etcd con SQLite o Redis. En lugar de etcd, se conecta Rhino—un servidor gRPC compatible con etcd escrito en Rust. La configuración de la API y los binarios permanecen iguales; solo cambia el archivo compose.
  3. Todos los componentes en un único binario. El API server, scheduler, controller manager, kubelet y kube-proxy se ejecutan como tareas async de Tokio dentro de un único proceso. El estado del cluster se escribe en un único archivo SQLite o instancia de Redis.

El modo All-in-One resuelve los puntos débiles del desarrollo local, pipelines de CI/CD y ejecutar el orquestador en dispositivos edge (Edge/IoT), donde cada megabyte de RAM cuenta.

Interfaz Web Integrada

Rusternetes tiene un dashboard de monitoreo integrado. Está embebido directamente en el binario del API server, así que no se necesita configurar ni desplegar nada adicional.

Topología del Cluster con Logs en Vivo

La interfaz muestra un mapa de topología del cluster con animación de tráfico, un heatmap de carga de CPU y RAM, streaming de logs de contenedores, y permite ver ConfigMaps, Secrets, manifiestos RBAC y estado de despliegues.

Qué hay adentro: Arquitectura del Proyecto

El repositorio está organizado como un workspace de Cargo con 10 crates.

Cada parte del cluster es responsable de su propia área de trabajo:

  • api-server: Escrito usando el framework Axum. Maneja la API REST, Watch API a través de Server-Sent Events, webhooks de validación y mutación, evaluación de reglas CEL y autorización RBAC.
  • scheduler: Selecciona nodos para pods basándose en afinidad/anti-afinidad, taints, toleraciones y restricciones de recursos.
  • controller-manager: Contiene 31 bucles de reconciliación. Maneja Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob, HPA, Ingress y CRDs.
  • kubelet: Se comunica con Docker o Podman a través del crate bollard. Rastrea el ciclo de vida de contenedores, ejecuta probes de liveness y readiness, y monta volúmenes (hostPath, configMap, secret).
  • kube-proxy: Gestiona reglas de iptables para los tipos de servicio ClusterIP, NodePort y LoadBalancer.

Cómo Ejecutar para Pruebas

La compilación requiere una versión reciente de Rust, el compilador protobuf y Docker o Podman.

La forma más rápida de probar es el modo All-in-One con SQLite:

Si quieres levantar una emulación más honesta de un entorno multi-componente a través de Docker Compose:

Después del bootstrap, puedes interactuar con el cluster usando la utilidad estándar kubectl.

Utilidad Práctica y Conclusiones

Traer Rusternetes a producción ahora mismo no vale la pena: aunque el proyecto pasa el 94% de las pruebas e2e, sigue siendo experimental. Sin embargo, tiene tres casos de uso excelentes.

Primero, es una guía de estudio ideal para aprender los interiores de Kubernetes. Leer código fuente de Rust con una división clara de módulos es mucho más agradable que excavar en el enorme monolito del K8s original.

Segundo, ejecutar un cluster en un único proceso con SQLite ahorra recursos en entornos de prueba y en CI/CD.

Tercero, el proyecto es útil para ejecutar orquestación en hardware débil como Raspberry Pi o plataformas IoT embebidas.

Si estás interesado en desarrollo de sistemas en Rust o en cómo funcionan los orquestadores, el proyecto definitivamente merece una estrella en GitHub.

Proyectos relacionados