Home » Kubernetes fácil con MicroK8s
MicroK8s y Kubernetes

Kubernetes fácil con MicroK8s

En mi día a día en el trabajo me veo en necesidad constante de hacer pruebas de configuraciones de Kubernetes, desplegar aplicaciones contenerizadas y hacer demostraciones. Nada mejor que MicroK8s para lograr esos propósitos rápido y simple.

¿Puede realmente ser Kubernetes fácil con MicroK8s? Yo que he trabajado con diferentes formas de instalar y administrar Kubernetes, te digo que sí, es fácil. Pero, primero que nada te haré una introducción de qué cosa es microk8s y por qué deberías animarte a probarlo.

Introducción

En el mundo de la gestión de contenedores, Kubernetes se ha consolidado como la solución predilecta para orquestar y gestionar aplicaciones en contenedores. Sin embargo, su complejidad y los recursos que requiere pueden ser un desafío para entornos de desarrollo, pruebas y pequeñas implementaciones.

Aquí es donde MicroK8s entra en juego.

¿Qué es MicroK8s?

MicroK8s es una versión ligera y simplificada de Kubernetes, creada por Canonical, diseñada para ser fácil de instalar y usar en cualquier entorno, desde una laptop personal hasta un servidor de producción pequeño.

microk8s y kubernetes

Ventajas que ofrece

  • Instalación simple: Despliegue un clúster de Kubernetes en minutos con un solo comando.
  • Recursos mínimos: Ideal para laptops, Raspberry Pi o servidores pequeños.
  • Portabilidad: Funciona en Linux, Windows y macOS.
  • Compatibilidad total: Compatible con las APIs estándar de Kubernetes.
  • Funciones clave: Auto-actualización, soporte para complementos y alta disponibilidad.
  • Personalizable: Habilite o deshabilite funciones adicionales con un solo comando.

Instalación de MicroK8s

MicroK8s, al ser un producto de Canonical, está listo para ser instalado con un único comando en sistemas Ubuntu. Pero, aquí también indicaré cómo instalarlo en plataformas Red Hat o similares.

Si bien MicroK8s sí soporta múltiples nodos, este procedimiento está pensado para instalarse en un único nodo.

1. Requisitos base

Instalar un sistema con Ubuntu o Red Hat en una máquina que tenga por lo menos 40 GB de disco

2. Requisitos para Red Hat o derivados

Si usas un sistema Ubuntu, omite estos pasos y continúa en la sección siguiente.

Importante: Estos pasos deben ser ejecutados como root.

2.1. Deshabilitar SELinux y FirewallD:

systemctl disable --now firewalld.service
sed -ie /^SELINUX=/s/=.*/=disabled/ /etc/selinux/config

2.2. Instala el repositorio de EPEL:

dnf install -y \
  https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

2.3. Instalar snapd y habilitarlo al arranque:

dnf install -y snapd git make
systemctl enable --now snapd.socket

2.4. Crear un enlace para el funcionamiento clásico de snapd:

ln -s /var/lib/snapd/snap /snap

2.5. Reiniciar el sistema para que snapd cargue correctamente luego de la instalación y configuración de rutas.

reboot

3. Instalar MicroK8s

La instalación es súper sencilla con snap:

snap install microk8s --classic

Esto instalará MicroK8s con la versión estable más reciente de Kubernetes. Pero, si deseas instalar una versión específica anterior, puedes modificar el comando como sigue:

snap install microk8s --classic --channel=1.26/stable

Una vez instalado, podemos hacer unas pruebas rápidas de consulta de recursos en el cluster Kubernetes:

microk8s kubectl get namespaces

microk8s kubectl get pods -A

4. Habilitar addons

MicroK8s a través de addons soporta funcionalidades extras, las cuales usualmente implicarían un procedimiento de instalación más largo y algo más tedioso en un cluster Kubernetes convencional.

Para ver el listado de addons habilitados y los disponibles (aún no habilitados), ejecutar esto:

microk8s status

Probaremos 2 addons sencillos: ingress y hostpath-storage

Así es como se habilitan los addons deseados:

microk8s enable ingress
microk8s enable hostpath-storage

5. Prueba de despliegue de recursos

Para probar la funcionalidad de MicroK8s y los dos addons habilitados, vamos a hacer una prueba sencilla que consiste en desplegar nginx. Haremos uso de un Deployment, un Service, un Ingress y un PersistentVolumeClaim. Veamos cómo lo hacemos.

5.1. Crear Deployment

Crear un archivo llamado deployment.yaml con el siguiente contenido:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
          volumeMounts:
            - name: nginx-data
              mountPath: /var/www/html
      volumes:
        - name: nginx-data
          persistentVolumeClaim:
            claimName: nginx-pvc

En este archivo de manifiesto se hace referencia a un PersistentVolumeClaim de nombre «nginx-pvc», el cual lo creamos en el paso siguiente.

5.2. Crear PersistentVolumeClaim

El siguiente archivo de manifiesto, de nombre pvc.yaml crea la solicitud de asignación de un volumen de almacenamiento para nginx. Dado que ya instalamos el addon hostpath-storage ahora será posible que los PersistentVolumes se creen automáticamente en un directorio del sistema de archivos local (por defecto dentro de /var/snap/microk8s/common)

El contenido del archivo debe ser este:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

5.3. Crear Service

Necesitamos exponer dentro del cluster los Pods de nginx a través de un Service. Para ello, creamos el archivo de manifiesto service.yaml con este contenido:

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

5.4. Crear Ingress

Finalmente, exponemos fuera del clúster los Pods de nginx a través de un objeto Ingress con un archivo de manifiesto llamado ingress.yaml que tiene el siguiente contenido:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  rules:
    - host: demo.microk8s.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service
                port:
                  number: 80

Prestar atención que este Ingress está usando un hostname como «demo.microk8s.local» para el nombre del sitio Web. Entonces, es con ese nombre que debemos intentar acceder desde nuestro navegador cuando hagamos las pruebas posteriormente.

5.5. Aplicar cambios

Una vez creados los 4 archivos de manifiesto, debemos indicar a Kubernetes que cree los recursos de este modo:

microk8s kubectl apply -f deployment.yaml
microk8s kubectl apply -f pvc.yaml
microk8s kubectl apply -f service.yaml
microk8s kubectl apply -f ingress.yaml

Ahora debemos verificar que los recursos creados existan:

microk8s kubectl get services
microk8s kubectl get deployments
microk8s kubectl get pods
microk8s kubectl get ingress
microk8s kubectl get pv

5.6. Prueba de acceso

Dado que hemos creado el Ingress con el hostname «demo.microk8s.local», asumo que dicho nombre no existe en nuestro sistema DNS. Por ello, lo más fácil será editar el archivo hosts de nuestro equipo y agregar una entrada como la siguiente:

172.31.45.123  demo.microk8s.local

En este ejemplo asumo que la IP del servidor MicroK8s es 172.31.45.123.

Finalmente, abrimos nuestro navegador con la URL http://demo.microk8s.local y deberíamos ver algo como esto:

Prueba de acceso a demo.microk8s.local

Conclusión

En este artículo revisamos qué es MicroK8s, sus ventajas y por qué es una opción importante cuando se trata de desplegar entornos pequeños o de pruebas de Kubernetes.

Como se ha visto, su instalación y configuración es muy rápida y sencilla. Incluso se pudo hacer una demostración de despliegue de aplicación básica basada en nginx haciendo uso de diferentes recursos de Kubernetes.

Espero que te animes a considerar MicroK8s como una de tus primeras opciones a la hora de desplegar aplicaciones en Kubernetes bajo entornos de Desarrollo o No Producción.

¡Nos encontramos en una próxima oportunidad!

Post navigation

Deja un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *