Capitulo 1: Que es K3s

Por: Artiko
k3skubernetesintroduccionarquitectura

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

CaracteristicaK3sK8s Completo
Tamano binario~70MB~300MB+ (multiples)
Instalacion1 comandokubeadm + configuracion
RAM minima512MB2GB+
Base de datosSQLite embebidoetcd externo
CertificadosAuto-generadosConfiguracion manual
NetworkingFlannel incluidoPlugin CNI requerido
IngressTraefik incluidoSin ingress por defecto
DNSCoreDNS incluidoCoreDNS separado
Storagelocal-path incluidoSin provisioner
Load BalancerServiceLB incluidoRequiere MetalLB o cloud
CertificacionCNCF CertifiedCNCF 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 —>