Kubernetes – montándonos un entorno de pruebas y producción – homeLAB – Parte2
Hace unos meses escribí como iniciaba un entorno k8s en casa para hacer pruebas y entender las ventajas de esta nueva plataforma que está revolucionando la forma en que manejamos contenedores.
En mi primer intento me auxilie de varios Raspberry Pi los cuales son excelentes para pequeños procesos y pruebas, lamentablemente en mi caso no me gustó mucho el resultado. En un segundo intento, use la distribución de Rancher junto a su plataforma de administración que permite provisionar un cluster ya sea en premisa o en la nube, en todos mis intentos lo hice en premisa ya que no cuento con un presupuesto para pagar horas en Amazon o Google.
En esta “segunda parte” he llegado mucho más lejos y con mejores resultados, digamos que ahora me he tomado más tiempo para entender cómo se conectan las partes y he decidido administrar k8s sin ningún front-end. Esta vez no he usado RPi, todo se ha instalado en Ubuntu 16.04 con la distribución de Rancher llamada RKE (Rancher Kubernetes Engine). https://github.com/rancher/rke
Rancher Kubernetes Engine, an extremely simple, lightning fast Kubernetes installer that works everywhere.
Esta es la descripción del Proyecto en Github, se puede decir que es una de las maneras más rápidas de tener un cluster de k8s, al menos que yo he probado hasta el momento.
BOM:
- 3 Ubuntu Servers 16.04 – en mi caso, estos son tres máquinas virtuales.
- 1 Management server – Otra VM con Ubuntu, no necesariamente debe ser la misma versión que los nodos del cluster.
- Un rango de direcciones IP para MetalLB.
Instalando RKE:
Primero debemos revisar cumplimos con el Node Requriments. Rancher tiene una tabla con las recomendaciones de OS, hardware y Networking.
https://rancher.com/docs/rancher/v2.x/en/installation/requirements/
Luego procederemos a preparar el equipo que usaremos para levantar el cluster de RKE.
https://rancher.com/docs/rke/v0.1.x/en/installation/
En mi caso fue descargar el binario para Linux y colocarlo en mi PATH, crear un cluster configuration file, este archivo puede tener cualquier nombre, para simplificar los pasos le pondremos cluster.yml igual que la documentación de Rancher.
En este archivo [cluster.yml] colocaremos la información de los nodos que usaremos para formar el cluster, antes de poder lanzar este proceso debemos cumplir con algunos pasos.
- En la maquina usada para administración necesitamos contar con SSH keys, desplegar este key en los nodos del cluster, RKE no envía password para hacer login a estos nodos, por esta razón debemos tener ssh-passwordless.
- Docker ya instalado y el usuario que cuenta con los keys de SSH en el grupo de Docker.
La forma más rápida de cumplir con este paso es usando un script ya preparado para realizar esta tarea, este script es oficialmente soportado por Rancher.
https://rancher.com/docs/rke/v0.1.x/en/os/
curl https://releases.rancher.com/install-docker/17.03.sh | sh
- Tener las herramientas necesarias en la máquina de administración, una de ellas es kubelet. En el caso de Ubuntu se instala como cualquier otro paquete usando APT.
En la siguiente imagen se puede apreciar el mensaje final del script para instalar Docker versión 17.03.
Ya podemos continuar con la preparación del cluster.yaml. Yo he usado uno bastante sencillo:
Ejecutando RKE para inicializar el cluster.
rke up –config rancher-cluster.yml
Al finalizar este proceso, tendremos un mensaje como:
Para probar que nuestros nodos responden y que tenemos un cluster de k8s, copiamos el archivo resultante de la operación anterior [kube_config_rancher-cluster.yml] a la ubicación por defecto usada por kubectl.
cp kube_config_rancher-cluster.yml ~./kube/config
Una alternativa cargarlo en la variable KUBECONFIG:
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
Hacemos un kubectl get nodes:
… Houston, we have a cluster.
Alguien preguntara: ¿Ya témenos un cluster, ahora que hacemos con él?
En el estado actual, se pueden desplegar aplicaciones que no hagan uso de almacenamiento persistente (no me gusta el hostPath) y que hagan uso del host IP ya que no tenemos un LoadBalacer instalado. Para el próximo articulo estaré desplegando dos soluciones para que nuestro cluster se parezca más a un GKE o un EKS.