Capitulo 1: Que es K3s
Capitulo 1: Que es K3s
< Volver al Indice del Tutorial
Que es K3s
K3s es una distribucion certificada de Kubernetes empaquetada en un solo binario de aproximadamente 70MB. A diferencia de un K8s completo que requiere multiples componentes separados, K3s incluye todo lo necesario para correr un cluster funcional con un solo comando.
curl -sfL https://get.k3s.io | sh -
En menos de 30 segundos tienes un cluster Kubernetes operativo con networking, DNS, storage y un ingress controller listo para usar.
K3s vs K8s Completo
Diferencias Clave
| Caracteristica | K3s | K8s Completo |
|---|---|---|
| Tamano binario | ~70MB | ~300MB+ (multiples) |
| Instalacion | 1 comando | kubeadm + configuracion |
| RAM minima | 512MB | 2GB+ |
| Base de datos | SQLite embebido | etcd externo |
| Certificados | Auto-generados | Configuracion manual |
| Networking | Flannel incluido | Plugin CNI requerido |
| Ingress | Traefik incluido | Sin ingress por defecto |
| DNS | CoreDNS incluido | CoreDNS separado |
| Storage | local-path incluido | Sin provisioner |
| Load Balancer | ServiceLB incluido | Requiere MetalLB o cloud |
| Certificacion | CNCF Certified | CNCF Certified |
Lo que K3s Remueve de K8s
K3s elimina componentes que la mayoria de usuarios no necesitan:
- Cloud providers legacy: Integraciones antiguas con AWS, GCP y Azure que agregan complejidad al binario. Si necesitas integracion cloud, usas plugins externos.
- Storage drivers legacy: Drivers in-tree para sistemas de almacenamiento empresarial (GlusterFS, Ceph in-tree). Se reemplazan con CSI drivers externos.
- Alpha features: APIs en estado alpha que cambian frecuentemente.
Esto no limita funcionalidad. Todo lo removido es reemplazable por plugins externos y la API de Kubernetes sigue siendo 100% compatible.
Arquitectura Server/Agent
K3s utiliza un modelo de dos roles: server y agent.
┌─────────────────────────────┐
│ K3s Server │
│ │
│ ┌───────────┐ ┌──────────┐ │
│ │ API Server│ │Scheduler │ │
│ └───────────┘ └──────────┘ │
│ ┌───────────┐ ┌──────────┐ │
│ │Controller │ │ SQLite/ │ │
│ │ Manager │ │ etcd │ │
│ └───────────┘ └──────────┘ │
│ ┌───────────┐ ┌──────────┐ │
│ │ Kubelet │ │ Kube- │ │
│ │ │ │ proxy │ │
│ └───────────┘ └──────────┘ │
└──────────┬──────────────────┘
│ Puerto 6443
┌──────────┴──────────────────┐
┌─────────┤ Red del Cluster ├─────────┐
│ └──────────────────────────────┘ │
┌───────┴───────┐ ┌───────┴───────┐
│ K3s Agent │ │ K3s Agent │
│ │ │ │
│ ┌───────────┐ │ │ ┌───────────┐ │
│ │ Kubelet │ │ │ │ Kubelet │ │
│ └───────────┘ │ │ └───────────┘ │
│ ┌───────────┐ │ │ ┌───────────┐ │
│ │ Kube-proxy│ │ │ │ Kube-proxy│ │
│ └───────────┘ │ │ └───────────┘ │
│ ┌───────────┐ │ │ ┌───────────┐ │
│ │Containerd │ │ │ │Containerd │ │
│ └───────────┘ │ │ └───────────┘ │
└───────────────┘ └───────────────┘
Server (Nodo Control Plane)
El server ejecuta todos los componentes del control plane en un solo proceso:
- API Server: Punto de entrada para todas las operaciones del cluster. kubectl habla con este componente.
- Scheduler: Decide en que nodo corre cada pod basandose en recursos disponibles y restricciones.
- Controller Manager: Ejecuta los controladores que mantienen el estado deseado (ReplicaSet controller, Deployment controller, etc.).
- Base de datos: SQLite embebido por defecto. Para alta disponibilidad se usa etcd embebido o una base de datos externa (PostgreSQL, MySQL).
El server tambien puede ejecutar workloads (pods de usuario) a menos que se configure como nodo dedicado al control plane.
Agent (Nodo Worker)
El agent se conecta al server y ejecuta los pods asignados:
- Kubelet: Gestiona los contenedores en el nodo. Recibe instrucciones del scheduler y reporta estado.
- Kube-proxy: Maneja las reglas de red para que los Services funcionen.
- Containerd: Runtime de contenedores que ejecuta las imagenes Docker/OCI.
Componentes Integrados
K3s viene con componentes preinstalados que en K8s estandar requieren instalacion separada.
Traefik (Ingress Controller)
Expone servicios HTTP/HTTPS al exterior. Soporta routing basado en host y path, SSL automatico con Let’s Encrypt y middleware para headers, redirects y rate limiting.
CoreDNS
Resolucion DNS interna del cluster. Permite que los pods se comuniquen entre si usando nombres de servicio en lugar de IPs.
Flannel (CNI)
Plugin de red que crea la red overlay entre nodos. Cada pod recibe su propia IP y puede comunicarse con cualquier otro pod del cluster sin NAT.
local-path Provisioner
Provisiona volumenes persistentes usando directorios locales del nodo. Ideal para desarrollo y entornos single-node.
ServiceLB (antes Klipper)
Load balancer ligero para entornos bare-metal. En cloud se reemplazaria por el load balancer del proveedor, pero para VPS y homelab, ServiceLB permite exponer servicios tipo LoadBalancer sin infraestructura adicional.
Casos de Uso
Homelab
K3s corre comodamente en hardware modesto. Una Raspberry Pi 4 con 2GB de RAM puede ejecutar un cluster con multiples servicios. Es la opcion preferida para homelabs porque consume pocos recursos y la instalacion es trivial.
Edge Computing
Dispositivos en ubicaciones remotas con conectividad limitada. K3s puede operar de forma autonoma y sincronizar cuando hay conexion. Su bajo consumo de recursos lo hace ideal para gateways industriales y puntos de venta.
IoT
Clusters distribuidos en dispositivos ARM. K3s soporta nativamente arquitecturas ARM64 y ARMv7, lo que permite correr Kubernetes en dispositivos como Raspberry Pi, NVIDIA Jetson y similares.
CI/CD
Clusters efimeros para pipelines de integracion continua. K3s arranca en segundos, ejecuta los tests en un entorno Kubernetes real y se destruye al terminar. Herramientas como k3d y k3s-in-docker facilitan este patron.
VPS y Servidores Modestos
Un VPS con 1 CPU y 1GB de RAM puede correr K3s con varios servicios. Comparado con K8s completo que necesitaria 2GB solo para el control plane, K3s deja mas recursos para tus aplicaciones.
Raspberry Pi
K3s fue disenado pensando en Raspberry Pi. El binario ARM esta optimizado y el consumo de RAM base es de ~300MB. Un cluster de 3 Raspberry Pi es un laboratorio de Kubernetes economico y funcional.
Historia
K3s fue creado por Darren Shepherd en Rancher Labs y lanzado en febrero de 2019. El nombre es un juego de palabras: si Kubernetes (K8s) tiene 8 letras entre K y s, K3s tiene 3 — la mitad, representando que es la mitad del tamano.
Linea de tiempo:
- 2019-02: Lanzamiento inicial por Rancher Labs.
- 2019-08: Rancher Labs dona K3s a la CNCF como proyecto Sandbox.
- 2020-12: SUSE adquiere Rancher Labs.
- 2022-08: K3s alcanza el estatus de CNCF Graduated Project, al mismo nivel que Kubernetes, Prometheus y Envoy.
- 2024+: K3s supera 30k estrellas en GitHub y se consolida como la distribucion ligera mas popular de Kubernetes.
La graduacion en la CNCF significa que K3s cumple con los estandares mas altos de madurez, gobernanza y adopcion. Es software listo para produccion respaldado por la misma fundacion que gobierna Kubernetes.
Siguiente: Capitulo 2: Conceptos de Kubernetes —>