Capitulo 3: Instalacion
Capitulo 3: Instalacion
< Volver al Indice del Tutorial
Requisitos Minimos
Hardware
| Recurso | Minimo (Server) | Recomendado (Server) | Agent |
|---|---|---|---|
| CPU | 1 core | 2 cores | 1 core |
| RAM | 512MB | 1GB | 512MB |
| Disco | 1GB libre | 10GB+ | 1GB libre |
Estos requisitos son para K3s sin workloads. Tus aplicaciones necesitaran recursos adicionales.
Puertos
| Puerto | Protocolo | Descripcion | Requerido en |
|---|---|---|---|
| 6443 | TCP | API Server de Kubernetes | Server |
| 8472 | UDP | Flannel VXLAN (red entre nodos) | Server y Agent |
| 10250 | TCP | Kubelet metrics | Server y Agent |
| 51820 | UDP | Flannel WireGuard (si se habilita) | Server y Agent |
En un cluster de un solo nodo, solo necesitas el puerto 6443 si quieres acceder al API desde fuera.
Sistemas Operativos Soportados
K3s soporta la mayoria de distribuciones Linux modernas:
- Ubuntu 20.04, 22.04, 24.04
- Debian 11, 12
- RHEL/CentOS 8, 9
- Rocky Linux 8, 9
- Fedora 38+
- openSUSE Leap 15.x
- Raspberry Pi OS (64-bit recomendado)
- Alpine Linux (con configuracion adicional)
Requisitos del kernel: Linux 4.x+ con cgroups v1 o v2 habilitados.
Instalacion Basica
La instalacion estandar requiere un solo comando ejecutado como root o con sudo:
curl -sfL https://get.k3s.io | sh -
Esto realiza los siguientes pasos automaticamente:
- Detecta la arquitectura del sistema (amd64, arm64, armhf).
- Descarga el binario de K3s.
- Crea el servicio systemd
k3s. - Inicia el server con la configuracion por defecto.
- Genera el kubeconfig en
/etc/rancher/k3s/k3s.yaml.
Al finalizar, tienes un cluster de un nodo con todos los componentes integrados funcionando.
Opciones de Instalacion
El script acepta variables de entorno y flags para personalizar la instalacion.
Variable INSTALL_K3S_EXEC
Define los argumentos que se pasan al binario de K3s:
# Instalar sin Traefik (para usar otro ingress controller)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik" sh -
# Instalar sin Traefik ni ServiceLB
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik --disable servicelb" sh -
Permisos del kubeconfig
Por defecto, el kubeconfig tiene permisos restrictivos (solo root). Para permitir que un usuario normal use kubectl:
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
O cambiar los permisos despues de instalar:
sudo chmod 644 /etc/rancher/k3s/k3s.yaml
Version Especifica
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.31.4+k3s1" sh -
Instalacion como Agent
Para agregar nodos worker a un cluster existente:
curl -sfL https://get.k3s.io | K3S_URL=https://server-ip:6443 K3S_TOKEN=mi-token sh -
El token se encuentra en el server en /var/lib/rancher/k3s/server/node-token.
Opciones Comunes
# Cambiar la interfaz de red para Flannel
--flannel-iface eth0
# Usar WireGuard para encriptar trafico entre nodos
--flannel-backend wireguard-native
# Deshabilitar componentes especificos
--disable traefik
--disable servicelb
--disable metrics-server
# Usar etcd embebido en lugar de SQLite
--cluster-init
# Definir el CIDR de pods y servicios
--cluster-cidr 10.42.0.0/16
--service-cidr 10.43.0.0/16
# TLS SANs adicionales (para acceso remoto)
--tls-san mi-dominio.com
--tls-san 203.0.113.10
Verificar la Instalacion
Estado del servicio
sudo systemctl status k3s
Deberias ver active (running). Si hay errores, revisa los logs:
sudo journalctl -u k3s -f
Nodos del cluster
sudo k3s kubectl get nodes
Salida esperada:
NAME STATUS ROLES AGE VERSION
mi-server Ready control-plane,master 1m v1.31.4+k3s1
El nodo debe estar en estado Ready. Si aparece NotReady, espera unos segundos; K3s necesita tiempo para inicializar los componentes de red.
Pods del sistema
sudo k3s kubectl get pods -n kube-system
Deberias ver pods corriendo para:
corednstraefiklocal-path-provisionermetrics-serversvclb-traefik(ServiceLB)
Todos deben estar en estado Running o Completed.
Test rapido
Despliega una aplicacion de prueba para verificar que todo funciona:
sudo k3s kubectl run test --image=nginx:alpine --port=80
sudo k3s kubectl expose pod test --type=NodePort --port=80
sudo k3s kubectl get svc test
Accede a http://localhost:<NodePort> y deberias ver la pagina por defecto de nginx.
Limpieza:
sudo k3s kubectl delete pod test
sudo k3s kubectl delete svc test
Desinstalacion
K3s incluye scripts de desinstalacion que limpian todo:
Desinstalar server
/usr/local/bin/k3s-uninstall.sh
Desinstalar agent
/usr/local/bin/k3s-agent-uninstall.sh
Estos scripts detienen el servicio, eliminan el binario, limpian las reglas de iptables y eliminan los datos en /var/lib/rancher/k3s/.
Entornos Locales para Practicar
Si no quieres instalar K3s directamente en tu maquina, tienes varias opciones para crear entornos de practica.
Multipass (recomendado)
Multipass crea VMs ligeras de Ubuntu:
# Instalar Multipass
sudo snap install multipass
# Crear una VM
multipass launch --name k3s-lab --cpus 2 --memory 2G --disk 10G
# Entrar a la VM
multipass shell k3s-lab
# Dentro de la VM, instalar K3s
curl -sfL https://get.k3s.io | sh -
Vagrant
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64"
config.vm.hostname = "k3s-lab"
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
curl -sfL https://get.k3s.io | sh -
SHELL
end
vagrant up
vagrant ssh
VM Manual
Cualquier hipervisor funciona (VirtualBox, QEMU/KVM, VMware). Crea una VM con Ubuntu Server, 2 CPU, 2GB RAM y 10GB disco. Instala K3s con el comando estandar.
k3d (K3s en Docker)
k3d ejecuta K3s dentro de contenedores Docker. Util para CI/CD y pruebas rapidas:
# Instalar k3d
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
# Crear un cluster
k3d cluster create mi-lab
# Listar clusters
k3d cluster list
# Eliminar cluster
k3d cluster delete mi-lab
k3d configura automaticamente tu kubeconfig para apuntar al cluster creado.
Estructura de Archivos
Despues de instalar, K3s crea los siguientes directorios:
/usr/local/bin/k3s # Binario principal
/etc/rancher/k3s/
k3s.yaml # Kubeconfig
registries.yaml # Config de registros privados (opcional)
/var/lib/rancher/k3s/
server/
node-token # Token para unir nodos
db/ # Base de datos SQLite
manifests/ # Manifiestos auto-deploy
static/ # Charts de Helm embebidos
storage/ # Datos de local-path provisioner
agent/ # Datos del agente
El directorio server/manifests/ es especial: cualquier YAML que coloques ahi sera aplicado automaticamente por K3s al iniciar. Es util para desplegar componentes que siempre deben estar presentes.
Siguiente: Capitulo 4: kubectl Esencial —>