Introducción a K3s
K3s es una distribución de Kubernetes completamente compatible y optimizada para entornos con recursos limitados. Logra empaquetar todos los componentes esenciales en un único binario que pesa menos de 100 MB, reduciendo el consumo de memoria a la mitad en comparación con una instalación estándar de K8s. El nombre es un juego matemático: si Kubernetes tiene 10 letras y se abrevia como K8s, la mitad de su tamaño equivale a 5 letras, dando como resultado K3s.
Instalación Rápida en Línea
Para sistemas operativos basados en CentOS 7.9, la forma más eficiente de desplegar el clúster es mediante el script oficial. Este método configura el servicio para que se reinicie automáticamente tras un fallo o un reinicio del sistema, e incluye herramientas auxiliares como kubectl, crictl y ctr.
Defina la IP pública de su servidor y ejecute el instalador:
export SERVER_PUBLIC_IP="203.0.113.50"
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--tls-san ${SERVER_PUBLIC_IP}" sh -
En redes con restricciones de acceso o latencia elevada hacia los repositorios globales, se recomienda redirigir la descarga a través del mirror de Rancher:
export SERVER_PUBLIC_IP="203.0.113.50"
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC="--tls-san ${SERVER_PUBLIC_IP}" sh -
Una vez finalizado el proceso, el archivo de configuración (kubeconfig) se generará en /etc/rancher/k3s/k3s.yaml. Puede validar el estado del nodo ejecutando:
sudo kubectl get nodes
sudo kubectl version --short
Despliegue Airgap (Fuera de Línea)
En infraestructuras aisladas sin acceso a internet, es necesario preparar los artefactos de instalación previamente. Tomaremos como referencia la versión v1.23.6+k3s1.
Primero, descargue manualmente el binario k3s, el paquete de imágenes k3s-airgap-images-amd64.tar.zst desde la sección de releases en GitHub, y el script install.sh desde el código fuente.
Prepare el entorno del servidor (asumiendo Docker como motor de contenedores):
# Cargar las imágenes requeridas en el daemon de Docker
sudo docker load -i /opt/k3s-install/k3s-airgap-images-amd64.tar.zst
# Preparar el binario ejecutable
sudo chmod +x /opt/k3s-install/k3s
sudo mv /opt/k3s-install/k3s /usr/local/bin/
Modifique el script de instalación para omitir las descargas y definir el entorno:
export INSTALL_K3S_SKIP_DOWNLOAD=true
export INSTALL_K3S_BIN_DIR="/usr/local/bin"
export INSTALL_K3S_EXEC="server --docker --tls-san 203.0.113.50"
Finalmente, otorgue permisos de ejecución al script modificado e inícielo:
sudo chmod +x install.sh
sudo ./install.sh
Eliminación de Componentes
Si necesita desmantelar el clúster, K3s provee scripts de limpieza específicos según el rol del nodo.
Para purgar un nodo de control (Server):
sudo /usr/local/bin/k3s-uninstall.sh
Para eliminar un nodo trabajador (Agent):
sudo /usr/local/bin/k3s-agent-uninstall.sh
Configuración Avanzada de Certificados TLS
El parámetro --tls-san (Subject Alternative Name) es fundamental al operar en nubes públicas o detrás de un balanceador de carga (LB). Permite agregar IPs o nombres de dominio adicionales al certificado TLS del clúster, evitando errores de autenticación cuando los clientes se conectan desde fuera de la red interna.
A continuación, un ejemplo de despliegue integrando múltiples variables de entorno para configurar el token de unión, la versión específica y la ruta de salida del archivo de configuración:
export LB_IP="198.51.100.20"
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC="--docker --tls-san ${LB_IP}" \
K3S_KUBECONFIG_OUTPUT="/home/admin/.kube/config" \
INSTALL_K3S_VERSION="v1.24.10+k3s1" \
K3S_TOKEN="cluster-token-seguro-2023" \
sh -
Para auditar qué direcciones están siendo reconocidas por el certificado, inspeccione el secreto generado por K3s en el namespace kube-system:
kubectl get secrets -n kube-system k3s-serving -o yaml
En el resultado YAML, busque las anotaciones bajo el formato listener.cattle.io/cn-*. Allí se listarán todas las IPs (como 198.51.100.20 o 10.0.0.5) y hostnames (como kubernetes.default) que han sido inyectados exitosamente en el certificado.
Para administrar este clúster de forma remota desde su estación de trabajo, transfiera el archivo de credenciales generado:
scp admin@198.51.100.20:/home/admin/.kube/config ~/.kube/config
Tras la transferencia, edite el campo server dentro de su archivo ~/.kube/config local para asegurarse de que la URL apunte directamente a la IP pública o al FQDN configurado en el balanceador de carga.