Fase 4.1
k3s v1.29

k3s Setup · Kubernetes Lightweight

k3s es Kubernetes empaquetado en un solo binario de menos de 100 MB. Certificado por la CNCF, diseniado para ARM64 y entornos con recursos limitados. La base sobre la que corre todo el observability stack.

01

Por que k3s y no kubeadm

k3s elimina la complejidad de instalacion de Kubernetes sin sacrificar compatibilidad. Un solo comando instala el cluster completo. Ideal para single-node labs donde kubeadm seria sobredimensionado.

Un binario
API server, scheduler, controller manager y kubelet en un solo proceso. Menos de 100 MB.
ARM64 nativo
Diseniado para ARM. Corre en Raspberry Pi y VMs Ampere A1 de Oracle Cloud sin modificaciones.
Certificado CNCF
Pasa todas las pruebas de conformidad de Kubernetes. Lo que corre en k3s corre en cualquier cluster certificado.
Todo incluido
containerd, flannel, CoreDNS y local-path-provisioner vienen preconfigurados. Cero dependencias externas.
02

Instalacion

El playbook de Ansible k3s.yml aplica el hardening base y luego instala k3s con un solo comando. La instalacion es idempotente: si k3s ya existe, Ansible no lo reinstala.

ansible/playbooks/k3s.yml (extracto)
- name: Instalar k3s (single-node, ARM64)
  shell: |
    curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.29.0+k3s1 sh -s - \
      --write-kubeconfig-mode 644 \
      --disable traefik \
      --disable servicelb
  args:
    creates: /usr/local/bin/k3s

- name: Esperar a que k3s este listo
  command: k3s kubectl get nodes
  changed_when: false
  retries: 10
  delay: 10
  register: result
  until: result.rc == 0

Flags de instalacion

--write-kubeconfig-mode 644
Permite leer el kubeconfig sin sudo. Necesario para que el usuario rocky pueda usar kubectl sin permisos elevados.
--disable traefik
Deshabilita el ingress controller por defecto de k3s. El proyecto no necesita un ingress controller en el lab local — se usa port-forward.
--disable servicelb
Deshabilita el load balancer por defecto. En un cluster single-node, los Services se acceden via ClusterIP o NodePort.
03

Componentes del Cluster

k3s incluye todo lo necesario para un cluster funcional sin dependencias externas. Estos son los componentes que corren en la VM.

k3s server
Binario unico que incluye API server, controller manager, scheduler y kubelet. Todo empaquetado en un solo proceso.
containerd
Container runtime. Reemplaza a Docker. k3s lo incluye embebido — no requiere instalacion separada.
flannel
CNI plugin para networking de pods. k3s lo incluye por defecto. Provee conectividad IP entre pods en el cluster.
CoreDNS
DNS interno del cluster. Resuelve nombres de servicios (service.namespace.svc.cluster.local).
local-path-provisioner
Provisioner de storage dinamico. Crea PVCs automaticamente usando el filesystem del nodo. Ideal para single-node.
metrics-server
Recolecta metricas de CPU/memoria de pods y nodos. Necesario para HPA y kubectl top.
04

Acceso Remoto

k3s guarda el kubeconfig en /etc/rancher/k3s/k3s.yaml. Para administrar el cluster desde la maquina local, se copia este archivo y se reemplaza la IP.

setup kubeconfig
# Copiar kubeconfig de la VM a la maquina local
$scp -P 2222 rocky@192.168.64.10:/etc/rancher/k3s/k3s.yaml ~/.kube/config
# Reemplazar 127.0.0.1 por la IP de la VM
$sed -i '' 's/127.0.0.1/192.168.64.10/' ~/.kube/config
# Verificar conexion
$kubectl get nodes
NAME STATUS ROLES AGE VERSION
rocky-vm Ready control-plane,master 5m v1.29.4+k3s1
El kubeconfig contiene credenciales de admin. No se comparte ni se commitea. En Oracle Cloud, el acceso se hace via port-forward a traves del bastion — el kubeconfig nunca sale del entorno controlado.
05

Namespace aiops

Todo el stack corre en el namespace aiops. Los manifiestos en k3s/manifests/ asumen este namespace como destino.

k3s/manifests/namespace.yml
apiVersion: v1
kind: Namespace
metadata:
  name: aiops
  labels:
    vault.hashicorp.com/agent-inject: "enabled"

La label vault.hashicorp.com/agent-inject: "enabled" indica al Vault Agent Injector que los pods en este namespace son candidatos para la inyeccion de secrets. Sin esta label, el Injector ignora los pods del namespace.

Siguiente: Prometheus y Alertmanager

Con k3s corriendo, la primera capa del observability stack es Prometheus para metricas y Alertmanager para enrutar alertas a n8n.

Prometheus