Kubernetes fácil con MicroK8s
¿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.
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:
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!
Deja un comentario