Í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.