Capitulo 3: Instalacion

Por: Artiko
k3skubernetesinstalacionlinux

Capitulo 3: Instalacion

< Volver al Indice del Tutorial

Requisitos Minimos

Hardware

RecursoMinimo (Server)Recomendado (Server)Agent
CPU1 core2 cores1 core
RAM512MB1GB512MB
Disco1GB libre10GB+1GB libre

Estos requisitos son para K3s sin workloads. Tus aplicaciones necesitaran recursos adicionales.

Puertos

PuertoProtocoloDescripcionRequerido en
6443TCPAPI Server de KubernetesServer
8472UDPFlannel VXLAN (red entre nodos)Server y Agent
10250TCPKubelet metricsServer y Agent
51820UDPFlannel 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:

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:

  1. Detecta la arquitectura del sistema (amd64, arm64, armhf).
  2. Descarga el binario de K3s.
  3. Crea el servicio systemd k3s.
  4. Inicia el server con la configuracion por defecto.
  5. 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:

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 —>