Kubernetes en local con microk8s

0
6427

Índice de contenidos


1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
  • Sistema Operativo: LUbuntu 18.04
  • LXD 3.4
  • microk8s v1.11.2


2. Introducción

De todos ya es sabido que Kubernetes es ahora mismo el estándar de facto para el despliegue de aplicaciones, y aquí ya hemos hablado muchas veces de él y de las necesidades de máquina que hacen que la mejor solución sea llevarlo al cloud.

Esto hace que sea muy costoso poder hacer pruebas en desarrollo de nuestros manifestos de Kubernetes y se hace prohibitivo para empresas que realmente por su negocio no necesitan un clúster de alta disponibilidad.

Entonces la solución pasa por poder ejecutar Kubernetes de forma local y esto es lo que podemos hacer con microk8s, que a diferencia de Minikube no requiere de una máquina virtual sino que podemos instalarlo directamente en Ubuntu como un paquete de snap para tener Kubernetes corriendo en nuestra máquina en segundos y consumiendo muchos menos recursos que si levantamos un clúster como hicimos en este tutorial.


3. Vamos al lío

La instalación en Ubuntu es tan sencilla como ejecutar:

$> sudo snap install microk8s --edge --classic

¡Y ya está! En segundos tendremos disponible el API de Kubernetes corriendo en la URL «http://localhost:8080»

Podemos probar que responde a los comandos típicos de kubectl ejecutando:

$> microk8s.kubectl get nodes

Si nos queremos ahorrar el anteponer microk8s podemos crear un alias de kubectl con el siguiente comando:

$> snap alias microk8s.kubectl kubectl

Además podemos añadirle una serie de «addons» con el comando:

$> microk8s.enable addon1 addon2

Entre los addons disponibles destacamos:

  • dns: para desplegar kube dns, es requerido por otros addons así que siempre se aconseja habilitarlo.
  • dashboard: con este addon tenemos disponible el típico dashboard de Kubernetes y los gráficos con Grafana.
  • storage: para permitir la creación de volúmenes persistentes.
  • ingress: para poder hacer redirecciones y balanceos en local.
  • istio: para desplegar los servicios de Istio. Todo el manejo de los comandos de Istio se hace con microk8s.istioctl
  • registry: para habilitar un registro privado de Docker al que poder acceder desde localhost:32000 que se maneja con el comando microk8s.docker

En caso de querer empezar de cero con la instancia de Kubernetes podemos resetearlo con el comando:

$> microk8s.reset

En caso de querer utilizar un docker privado no seguro, creado por ejemplo con una instancia de Nexus 3, podemos habilitar el acceso editando el fichero /var/snap/microk8s/current/args/docker-daemon.json con el siguiente contenido:

{
  "insecure-registries": [
    "local.nexus.com:8083"
    "localhost:32000"
  ],
  "disable-legacy-registry": true
}

Y reiniciando el servicio con el comando:

$> sudo systemctl restart snap.microk8s.daemon-docker.service

En caso de querer hacer la instalación en un contenedor de LXD tenemos que crear un perfil especifico. Para ello vamos a crear un fichero llamado microk8s.profile con el siguiente contenido:

name: microk8s
config:
  boot.autostart: "true"
  linux.kernel_modules: ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh,nf_conntrack_ipv4,ip_tables,ip6_tables,netlink_diag,nf_nat,overlay
  raw.lxc: |
    lxc.apparmor.profile=unconfined
    lxc.mount.auto=proc:rw sys:rw
    lxc.cgroup.devices.allow=a
    lxc.cap.drop=
  security.nesting: "true"
  security.privileged: "true"
description: ""
devices:
  aadisable:
    path: /sys/module/nf_conntrack/parameters/hashsize
    source: /sys/module/nf_conntrack/parameters/hashsize
    type: disk
  aadisable1:
    path: /sys/module/apparmor/parameters/enabled
    source: /dev/null
    type: disk
  aadisable2:
    path: /dev/zfs
    source: /dev/zfs
    type: disk

Ahora creamos el perfil «microk8s» como copia del perfil por defecto:

$> lxc profile copy default microk8s

Y le asignamos el contenido del fichero microk8s.profile con el siguiente comando:

$> cat ./microk8s.profile | lxc profile edit microk8s

Ahora solo tenemos que crear el contenedor aplicándole el perfil por defecto y el perfil «microk8s» de esta forma:

$> lxc launch -p default -p microk8s ubuntu:18.04 microk8s

Una vez creado el contenedor «microk8s» podemos acceder dentro de él con el comando:

$> lxc exec microk8s -- bash

Una vez dentro instalamos el paquete zfsutils con el comando:

$> apt install zfsutils-linux

Y ya podemos instalar el paquete de snap con el comando visto anteriormente.

$> snap install microk8s --edge --classic

Y ya todo lo visto anteriormente aplica exactamente igual que la instalación en local.


4. Conclusiones

Aunque solo sea para «jugar» con Kubernetes en local merece la pena instalar microk8s ya que se va a comportar igual que un clúster de Kubernetes «real». Pero ahora imagina que lo instalas en un contenedor de LXD o en una instancia de AWS consumiendo muchos menos recursos podrías tener Kubernetes en producción, muy útil cuando tu negocio no requiere de alta disponibilidad y no tiene que manejar un gran número de contenedores.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad