Kubernetes, creación del clúster

junio 21st, 2016 Posted by Tecnología 0 thoughts on “Kubernetes, creación del clúster”

Kubernetes es un sistema de código abierto para automatización de despliegues, operaciones y escalado de aplicaciones encapsuladas. Agrupa aplicaciones en contenedores lógicos fáciles de manejar. Basado en la experiencia de Google con Borg durante más de una década, se ha mejorado con la experiencia de la comunidad.

Kubernetes es escalable sin necesidad de aumentar el equipo de operaciones, es flexible en el despliegue de tus aplicaciones de forma sencilla y consistente sin importar lo complicada que sean tus aplicaciones. Siendo open-source, puede correr en múltiples sistemas y balanceando la carga entre donde tu decidas.

Las principales características de Kubernetes son:

  • Escalado horizontal
  • Actualizaciones y rollbacks automáticos
  • Reinicio de servicios, en caso de fallo
  • Auto-balanceo y detector de nuevos servicios
  • Ejecución batch
  • Auto-ajuste, en función de las especificaciones

En información, Kubernetes es una capa de cebolla sobre Docker, que nos ayudará en el futuro cuando hablemos de OpenShift ;).

Algunos conceptos básicos sobre Kubernetes:

  • Cluster, conjunto de máquinas(virtuales o físicas) y otros recursos usados por Kubernetes para desplegar aplicaciones
  • Nodo, máquina física o virtual donde corre Kubernetes y sobre la que se pueden desplegar pods
  • Pod, conjunto de contenedores y volumenes
  • Replication Controller, gestor de pods para asegurar tener levantadas las replicas indicadas, permite el escalado sencillo y previene contra reboots o fallos
  • Volumen, directorio con datos accesible por el contenedor como parte del sistema de archivos
  • Servicio, define como acceder a un conjunto de pods

En Overtus, teníamos muchas ganas de probar esta tecnología y nos hemos puesto manos a la obra. Existen varias aproximaciones, como crear un clúster de máquinas virtuales Ubuntu, e instalar ahí el clúster de servicios, pero hemos optado por montar un clúster de Raspberry Pi 3, con un nodo master y tres nodos esclavos. Los binarios para procesadores son escasos y, veréis en la serie de entradas, en algunos casos hemos tenido que recompilar algunos elementos o usar la imaginación. Como aclaración, si las instrucciones de instalación o uso están claras en el sitio web del desarrollador/oficial/otros, no las detallaremos, sólo daremos las instrucciones especiales o detalles ayudaros.

Empecemos, los primero es visitar el blog de Hypriot, para este tutorial hemos usado la versión 0.7.0, Berry:

Version 0.7.0 Berry (beta)	hypriot-rpi-20160306-192317.img.zip	Checksum	06.03.2016

Hemos usado la utilidad flash, creada por Hypriot, para instalar la imagen anterior en cada tarjeta flash, una para cada nodo. Hemos usado la opción para dar un hostname especial. En nuestro caso, cronos será el master, y los nodos hijo, serán zeus, poseidón y hades.

$ flash --hostname cronos hypriot-rpi-20160306-192317.img

Una vez instalada la imagen de Hypriot, las insertamos en las RP3 y las conectamos a la corriente.

Una vez iniciados los cuatro nodos, vamos a visitar la web de Luxas, que ha creado un .deb  para ayudarnos en la instalación de Kubernetes en procesadores ARM.

En la parte de la instalación del .deb , tenemos las siguientes instrucciones:

# The OS have to be systemd based, e. g. HypriotOS, Debian Jessie, Arch Linux ARM, Ubuntu 15.04

# Download the latest package
curl -sSL https://github.com/luxas/kubernetes-on-arm/releases/download/v0.7.0/kube-systemd.deb > kube-systemd.deb
# or
wget https://github.com/luxas/kubernetes-on-arm/releases/download/v0.7.0/kube-systemd.deb

# Requires dpkg, which is preinstalled in at least all Debian/Ubuntu OSes
sudo dpkg -i kube-systemd.deb

# Setup the enviroinment
# It will ask which board it's running on and which OS
# If your OS is Hypriot or Arch Linux, choose that. Otherwise, choose systemd, which is generic
# It will download prebuilt binaries
# And make a swap file if you plan to compile things
# A reboot is required for it to function properly
kube-config install

## ----- REBOOT -----

# Start the master or worker
#
# Overtus
# Antes de realizar el enable master, realizar lo que indicamos a continuación
#
kube-config enable-master
kube-config enable-worker [master ip]

# Get some info about the node
kube-config info

Los pasos son bastante sencillos y consisten, básicamente, descargar el paquete .deb , instalarlo, configurar el sistema, activar el master, y los worker, en cronos, el master, y en el resto, la instrucción de workers.

La instrucción kube-config install  pide una serie de datos como la placa donde se instala (rpi2, a pesar de ser rp3), el tipo de sistema empleado (hypriotos) y un par de cuestiones más.

Esta instrucción, en uno de sus pasos, descarga los binarios de las imágenes a instalar cuando realizas el kub-config enable-master , o enable-worker . En dichos binarios, hay un problema que nos hemos encontrado, y es que no tienen soporte para NFS y, no se pueden montar volúmenes vía NFS. Por ejemplo, para almacenar centralizadamente bases de datos, o el registro de imágenes privado. La solución es compilar la imagen de hypercube (núcleo de Kubernetes), modificando el Dokerfile para incluir la instalación del paquete nfs-common  en dicho contenedor.

FROM resin/rpi-raspbian:jessie

# Install required packages
RUN apt-get update && apt-get install -y -q \
        iptables \
        ca-certificates \
        file \
        util-linux \
        socat \
        curl \
        ethtool \
        nfs-common \
        && rm -rf /var/cache/apt/* /var/lib/apt/lists/*

# Copy files
COPY hyperkube \
    setup-files.sh \
    make-ca-cert.sh \

    # Copy to rootfs
    /

COPY master.json /etc/kubernetes/manifests/master.json
COPY master-multi.json /etc/kubernetes/manifests-multi/master.json
COPY safe_format_and_mount /usr/share/google/safe_format_and_mount

# Since the official binary is built for armel, we need this symlink.
RUN ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3 \
    && chmod +x /hyperkube

Siguiendo las instrucciones de Luxas, para realizar cambios, debemos cambiar el fichero indicado arriba, y luego hacer un build-images o build kyperkube, si queremos reconstruir todas las imágenes o solo la de hypercube.

$ kube-config build kubernetesonarm/hyperkube

La primera instrucción, termina con errores pero no es preocupante puesto que el comando de enable-master  (enable-worker) si no encuentra la imagen en la carpeta generada, busca los binarios por defecto. Pero si es importante generar la nueva imagen de hyperkube, con el nfs-common instalado.

Esto debe hacerse en todos los nodos. Luego seguir las instrucciones para habilitar el master o el worker, evidentemente, el master debe terminar primero para luego hacer los worker con la ip del master. Una vez hecho esto tenemos ya en marcha un clúster preparado para lo que ha de venir.

¿Qué os ha parecido? Muchas gracias a Diego Barrio (@guilu) con el que hemos atravesado los senderos tenebrosos del despliegue automático.

 

Tags: , , ,

Deja un comentario

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

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies