Orquestador completo, 5 pods de nginx
PSS, v0.2.1; en reposo, sin pods: 23.2 vs 567
33.5MiB
litek8s sirve la API real de Kubernetes, así que kubectl, Helm y Argo CD funcionan sin cambios. El plano de control, el scheduler, los controladores, el DNS, el proxy de servicios y el agente de nodo son un solo proceso de Rust. Para desarrollo local, home labs y el edge.
brew install jairoFernandez/tap/litek8sDe dev up a nodo Ready: 1.28 s en macOS, 0.17 s en Linux. bench/RESULTS.md
Funciona con las herramientas que ya usas
Un proceso hace lo que una distribución de Kubernetes reparte entre etcd, el API server, el controller manager, el scheduler, CoreDNS, kube-proxy, el kubelet y containerd, más una API compatible con Docker y una pila de métricas, logs y alertas.
Contra k3s, kind y k3d. Cada fila enlaza al archivo con la configuración, los datos crudos y las salvedades. Más corto es mejor.
PSS, v0.2.1; en reposo, sin pods: 23.2 vs 567
33.5MiB
memoria del orquestador
90MiB
dev up a nodo Ready, Linuxcluster de desarrollo local
0.17s
dev up a nodo Ready, macOScluster de desarrollo local
1.28s
cluster de desarrollo local
47MiB
vs kube-prometheus-stack + Loki
+1.8MiB
kubectl, CRDs, workloads, red, 47 charts de Helm
119/ 119
k3s: 119/119 · compat/RESULTS.md
En macOS un cluster de desarrollo corre en una pequeña VM Linux, y el Monitor de Actividad muestra la VM entera: unos 240 MiB recién iniciada, ~380 MiB después de descargar y correr 5 pods de nginx, porque macOS conserva cada página que el guest tocó hasta que la VM se detiene. Los 6 fallos de conformance: 5 son solo de macOS (DNS por TCP en el puerto 53, un binding de hostPort) y pasan en Linux; 1 era un watch, ya corregido. Un plano de control HA de 3 servidores sigue siendo linealizable ante caídas del líder y particiones, y un cluster de 3 nodos corrió 21 h bajo carga sin fugas. Memoria en macOS, bench/HA.md, bench/SOAK.md.
kind, k3d o minikube sin Docker. Tantos clusters como quieras, cada uno con tantos nodos como quieras, en un sandbox sin root en Linux o en una pequeña VM de Virtualization.framework en macOS que crece su memoria a demanda. NodePorts en localhost, tu directorio home montado en la misma ruta.
Leer más: Clusters de desarrollo$ litek8s dev up --name ci --nodes 3 $ litek8s dev load myapp:dev # a local image $ litek8s dev list # state, API port, nodes, memory $ litek8s dev down # objects and images are kept
docker, docker compose, docker build, Dev Containers y Testcontainers corren sobre el cluster de desarrollo, junto a (no en lugar de) Docker u OrbStack. Los proyectos de Compose pueden tener presupuestos de CPU y memoria.
Leer más: API de Docker Engine$ export DOCKER_HOST=unix://$HOME/.litek8s/docker.sock $ docker compose up -d --build $ docker run --rm -it alpine sh # the same cluster, the same images $ kubectl get pods -A
Si tu pipeline necesita un cluster, este es el paso de setup: Ready en ~2.5 s en lugar de los ~45 s de kind en los runners de GitHub, jobs de Helm y multi-nodo 3–5× más cortos con 26–37× menos memoria, y 1.8× más rápido que kind en Docker in Docker en jobs de contenedor estilo GitLab.
Leer más: Kubernetes en CI# .github/workflows/e2e.yml - uses: jairoFernandez/litek8s/.github/actions/setup-litek8s@v0.2.1 - run: helm install hello ./chart --wait && helm test hello # cluster Ready in ~2.5 s, job 21 s (kind: 79 s)
litek8s ui: estado del cluster, una vista de Kubernetes al estilo k9s, contenedores por proyecto de compose con logs y shells, imágenes, volúmenes, limpieza de disco. Se maneja con el teclado y funciona por SSH.
Leer más: UI de terminalUn almacén de series de tiempo embebido con una API compatible con Prometheus (Grafana funciona), búsqueda de logs en todos los pods y nodos, reglas de alerta hacia un webhook, ntfy o Telegram, y kubectl top sin metrics-server.
Leer más: Observabilidad integrada$ litek8s logs -l app=web --since 1h --grep ERROR $ litek8s query 'topk(5, sum by (pod) (rate(container_cpu_usage_seconds_total[5m])))' $ litek8s alerts $ kubectl top pods -A --containers
litek8s apiserver en una máquina; las demás se unen con un token al estilo k3s que fija la CA. Los pods hablan entre nodos por una malla WireGuard que litek8s arma solo, y corren directamente sobre crun: sin containerd, sin contenedores pause.
Leer más: Servidores y nodos reales# the server; prints the join command $ curl -fsSL https://raw.githubusercontent.com/jairoFernandez/litek8s/main/install.sh | sh -s -- server # every other machine $ curl -fsSL …/install.sh | sh -s -- agent --join https://192.168.1.10:6443 --token K10<hash>::<secret>
3 o 5 API servers comparten el almacén con Raft, sin etcd. Cualquier servidor puede caer sin perder escrituras; litek8s lb le da a kubectl una sola dirección delante de los tres.
Leer más: Plano de control HA$ install.sh | sh -s -- server --cluster-init $ install.sh | sh -s -- server --server https://<first>:6443 --token <token> $ litek8s lb --listen 127.0.0.1:6443 --server http://192.168.1.10:6443
litek8s mcp es un servidor MCP (clusters de desarrollo, objetos, diagnóstico de pods, logs, PromQL, alertas) con protecciones: las herramientas destructivas piden confirmación, hay modo de solo lectura y límites de salida. litek8s skill instala un skill para agentes.
Leer más: Para agentes LLM$ claude mcp add litek8s -- litek8s mcp $ claude mcp add litek8s-ro -- litek8s mcp --read-only $ litek8s skill --install ~/.claude/skills
Validación de esquemas OpenAPI, reglas CEL con chequeo de tipos y costo estimado al crear la CRD, ratcheting, y server-side apply con managedFields, conflictos y pruning, como un API server de Kubernetes 1.33.
Leer más: CRDs bien hechasx-kubernetes-validations: - rule: "self.replicas <= self.maxReplicas" message: "replicas must not exceed maxReplicas" # a typo is rejected when the CRD is created: ERROR: <input>:1:5: undefined field 'replica'
kubectl, Helm y Argo CD llegan al API server de Kubernetes en :6443; docker y compose llegan a la API de Docker Engine en docker.sock. Ambos viven en un proceso con el almacén de objetos, los controladores y el scheduler, el DNS y el proxy de servicios, las métricas, logs y alertas, y el agente de nodo, y ambos corren contenedores sobre crun.
Leer la documentaciónCada cluster, y cada nodo de un cluster multi-nodo, corre en una pequeña VM en macOS o en un sandbox sin root en Linux, que arranca con el primer cluster y se detiene con el último. Cada cluster tiene su propio puerto de API, contexto de kubectl y socket de Docker.
Leer la documentaciónUn servidor corre todo el plano de control y sus propios pods; cualquier máquina Linux (una Raspberry Pi, una laptop vieja, una VM barata en la nube) se le une como nodo con el token que imprime el servidor. Cada nodo recibe un /24 de 10.42.0.0/16; los Services y el DNS funcionan en todo el cluster.
Leer la documentaciónTres servidores hacen al plano de control altamente disponible: el almacén de objetos se replica con Raft, sin etcd. Cualquier servidor puede caer sin perder escrituras; los nodos pasan a otro servidor, y litek8s lb le da a kubectl una sola dirección.
Leer la documentaciónmacOS (Apple silicon) y Linux (x86_64, aarch64). macOS no necesita nada más: ni Docker Desktop, ni Lima, ni sudo.
brew install jairoFernandez/tap/litek8scurl -fsSL https://raw.githubusercontent.com/jairoFernandez/litek8s/main/install.sh | shcargo install litek8slitek8s dev setup revisa todo y dice qué falta.$ litek8s dev up $ kubectl create deployment web --image=nginx $ kubectl expose deployment web --type=NodePort --port 80 $ curl localhost:$(kubectl get svc web -o jsonpath='{.spec.ports[0].nodePort}') $ litek8s ui # explóralo todo $ export DOCKER_HOST=unix://$HOME/.litek8s/docker.sock $ docker run --rm hello-world # el mismo cluster habla la API de Docker $ litek8s dev up --name ci --nodes 3 # otro cluster, tres nodos $ litek8s dev down # detener; los objetos y las imágenes se conservan
En servidores Linux. Un comando por máquina, como el instalador de k3s: una unidad de systemd, el token en /etc/litek8s, pods que siguen corriendo entre reinicios y actualizaciones.
Multi-nodo y HA| clusters de desarrollo | servidor / nodo | binario del release | |
|---|---|---|---|
| macOS, Apple silicon (13+) | sí, en una VM (Virtualization.framework) | solo para desarrollo (runtime Docker) | darwin-arm64, guest de la VM incluido |
| Linux x86_64 / aarch64, sin root | sí, sandbox de user namespaces (kernel ≥ 5.11, cgroup v2) | – | linux-x86_64, linux-aarch64 (estáticos) |
| Linux, root con crun | sí | sí: la configuración prevista para servidores y nodos | los mismos |
| macOS Intel, Windows | no (WSL2 sin probar) | no | – |
Probado en Ubuntu 24.04 (arm64 y x86_64) y macOS reciente en Apple silicon. Ubuntu ≥ 23.10 necesita sudo litek8s dev setup una vez.
Vista previa temprana, hecha y probada por una persona: espera asperezas.
Los servidores autentican clientes y aplican RBAC desde la 0.2.12, pero no hay login OIDC ni webhook ni revocación de certificados. Los clusters de desarrollo siguen abiertos en 127.0.0.1; en un servidor, igual mantén el puerto 6443 (y el de Raft, 6444) fuera de redes no confiables.
Las APIs, flags y formatos en disco pueden cambiar entre versiones 0.x sin migración.
Sin eventos Unhealthy/BackOff; un emptyDir en memoria es un tmpfs por montaje de contenedor; ValidatingAdmissionPolicy y los matchConditions de webhooks se aceptan pero no se aplican.
Cubren contenedores, nodos y estado del cluster; los endpoints /metrics de las aplicaciones no se scrapean.
Un límite de Virtualization.framework; litek8s mantiene pequeño el guest a cambio.
Usan Docker para los pods; corre servidores y nodos reales en Linux.
Libre y de código abierto, Apache-2.0. Comentarios e issues son muy bienvenidos.
brew install jairoFernandez/tap/litek8s