K3s Apuntes - Parte 1

Experimentando con Docker Swarm me puse a la tarea de armar algo con los Raspberry Pi (RPI v3, RPI v4) que tengo en mi laboratorio, luego de estar googleando y charlando con Sergio, me recomendó usar K3s que es una distribución de Kubernetes con backend de almacenamiento ligero basado en sqlite3 compatible con arquitectura ARM.

Revisamos la documentación oficial de K3s y pude armar mi laboratorio, el tipo de ejercicio que se desarrollara sera un Server node y cuatro Worker nodes con la base de datos sqlite3.

Arquitectura

Existen dos tipos de nodos:

  1. Server node, es el nodo que ejecuta K3s server.
  2. Worker node, es el nodo que ejecuta K3s agent.

También existen dos formas de implementación:

  1. Un solo servidor con una base de datos integrada, en esta configuración, cada nodo de agente está registrado en el mismo Server node.

  1. Servidor K3s de Alta Disponibilidad con una base de datos externa, que se compone de:

    • Dos o más nodos de servidor que servirán a la API de Kubernetes y ejecutarán otros servicios del plano de control.
    • Un almacén de datos externo (a diferencia del almacén de datos SQLite incorporado que se usa en configuraciones de un solo servidor).

2.1 Direcciones de registro fija para nodos agente

En la configuración del servidor de alta disponibilidad, cada nodo también debe registrarse con la API de Kubernetes mediante una dirección de registro fija, después del registro, los nodos del agente establecen una conexión directamente con uno de los Server nodes.

Configuraciones Previas

  • Configuraciones necesarias RPI: Antes de instalar los binarios de K3s es necesario realizar unas configuraciones extra en el sistema operativo de las Raspberry Pi, utilizaremos Raspbian Buster para este laboratorio.

  • Habilitar iptables heredados en Raspbian Buster

Raspbian Buster utiliza de forma predeterminada en nftables en lugar de iptables. Las funciones de red de K3s requieren iptables y no funcionan con nftables, para solucionar este problema debemos realizar el cambio correspondiente.

1$ sudo iptables -F
2$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
3$ sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
4$ sudo reboot
  • Habilitando cgroups para Raspbian Buster

Las instalaciones estándar de Raspbian Buster no se inicializan con cgroups habilitado. K3s necesita cgroups inicializado como un servicio systemd. Se puede habilitar cgroups agregando cgroup_memory=1 y cgroup_enable=memory en /boot/cmdline.txt.

1# Dentro del archivo cmdline.txt
2console=serial0,115200 console=tty1 root=PARTUUID=58b06195-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_memory=1 cgroup_enable=memory

Con estos cambios aplicados se debe reiniciar el sistema operativo en los Raspberry Pi.

Instalación del Server node

Según la documentación oficial podemos utilizar los scripts oficiales para instalar los binarios para el Server node de K3s:

1$ curl -sfL https://get.k3s.io | sh -

Este script instalará todas la herramientas necesarias como:

  • kubectl
  • crictl
  • ctr
  • k3s-killall.sh
  • k3s-uninstall.sh

También creara el archivo de configuración /etc/rancher/k3s/k3s.yaml

Instalación de Worker Nodes

Luego de la instalación del servidor K3s podemos agregar nodos:

1$ curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

donde:

  • K3S_URL: Esta es la dirección IP o el dominio del servidor K3s.
  • K3S_TOKEN: Es un token que se almacena en el servidor K3s, /var/lib/rancher/k3s/server/node-token
  • Es necesario que el hostname de los nuevos nodos sean diferentes.

Operaciones Básicas

Podemos ejecutar los comandos comunes de Kubernetes o utilizar el comando K3s, a estos dos comandos debemos anteponerle el comando sudo para que se ejecuten las ordenes sin problemas.

1$ sudo k3s kubectl get nodes
2# o también
3$ sudo kubectl get nodes
4$ sudo kubectl get pods --all-namespaces

Control daemon:

1$ sudo systemctl status k3s
2$ sudo systemctl stop k3s

Articles K3s

  1. K3s - Parte 1
  2. K3s - Parte 2
  3. K3s - Parte 3
  4. K3s - Parte 4

Referencias

Traducciones: