Cómo construir y gestionar un clúster de Kubernetes de Raspberry Pi con fines educativos

nullxx

NULLX

Posted on May 5, 2024

Cómo construir y gestionar un clúster de Kubernetes de Raspberry Pi con fines educativos

Introducción

Esta guía está dirigida a estudiantes de ingeniería informática que tienen la intención de aprender a construir y gestionar un sistema de computación descentralizado como Kubernetes, con un ejemplo práctico de cómo crear un cluster utilizando dispositivos Raspberry Pi.

¿Qué es Kubernetes?

Kubernetes es una plataforma de código abierto que automatiza las operaciones de contenedores Linux. Elimina muchos de los procesos manuales involucrados en el despliegue y la escalabilidad de aplicaciones contenerizadas.

Objetivo

Al final de este tutorial, podrás:

  • Configurar varios Raspberry Pis para formar un cluster.
  • Instalar y configurar Kubernetes usando una herramienta ligera llamada k3s.
  • Desplegar y gestionar aplicaciones contenerizadas en el cluster.

Configuración del Hardware

Nuestro cluster, llamado clusperry, consiste en 6 unidades de Raspberry Pi 4B, cada una con 4GB de RAM.

Vista del Cluster

Configuración Inicial

  1. Crear Imágenes Linux:

    • Usaremos una herramienta GUI desarrollada para generar imágenes de Linux, las cuales luego serán grabadas en tarjetas microSD.
    • Herramienta disponible en: clusperry-installer.
  2. Descargar y Configurar:

    • Obtén la herramienta desde la página de lanzamientos.
    • Elige el sistema operativo para los nodos y configura los ajustes de red y las llaves SSH.

Configurar Nodos

  1. Escribir y Cargar Imágenes del SO:
    • Escribe las imágenes del SO descargadas en tarjetas microSD.
    • Carga estas imágenes en tus Raspberry Pis.

Configuración del Software

Instalación de Kubernetes con k3s

k3s es una versión ligera de Kubernetes ideal para entornos de edge, IoT y CI que requieren un menor consumo de recursos, como en nuestro caso.

  1. Preparación para la Instalación:

    • Utiliza Ansible para la automatización.
    • Clona el repositorio Ansible de k3s:
     git clone https://github.com/k3s-io/k3s-ansible.git
     cd k3s-ansible
     cp -R inventory/sample inventory/my-cluster
     nano inventory/my-cluster/hosts.ini
    
  2. Configuración:

    • Configura inventory/my-cluster/hosts.ini y inventory/my-cluster/group_vars/all.yml con detalles como la versión de Kubernetes, el usuario del sistema y la IP del nodo maestro.
  3. Despliegue:

    • Ejecuta el playbook de Ansible para instalar k3s en tus nodos:
     ansible-playbook site.yml -i inventory/my-cluster/hosts.ini
    
  4. Instalar kubectl:

    • Instala kubectl en tu máquina local para interactuar con el cluster.
     brew install kubectl
     scp ubuntu@192.168.1.100:~/.kube/config ~/.kube/config
    

Verificación de la Instalación

Asegúrate de que todos los nodos estén listos ejecutando:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

Despliegue de Aplicaciones

Desplegando una Aplicación de Prueba

  1. Configurar DNS Local:
    • Añade una entrada DNS a /etc/hosts para el dominio de prueba.
sudo echo "192.168.1.100 test.com" >> /etc/hosts
Enter fullscreen mode Exit fullscreen mode
  1. Desplegar una Aplicación:
    • Crea un despliegue, servicio e ingreso para el servidor web Nginx.

YAML de Despliegue

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # indica al despliegue ejecutar 2 pods replicados
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    name: nginx-service
spec:
  ports:
    - port: 80
      name: http
  selector:
    name: nginx-deployment
--------

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: "test.com"
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
Enter fullscreen mode Exit fullscreen mode
  1. Verifica el despliegue:
kubectl get pods
curl http://test.com
Enter fullscreen mode Exit fullscreen mode

Limpieza y Aprendizaje Adicional

  • Recuerda eliminar cualquier configuración temporal como las entradas DNS.
  • Para soluciones de almacenamiento persistente, consulta esta guía.

Conclusión

Este ejercicio práctico introduce los conceptos básicos y los pasos para configurar un cluster de Kubernetes en Raspberry Pi. Esta configuración fomenta el aprendizaje mediante la experiencia práctica y es ideal para fines educativos en currículos de ingeniería informática.

💖 💪 🙅 🚩
nullxx
NULLX

Posted on May 5, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related