Post-Image

Desplegando un cluster de Kubernetes con Kubespray

La mejor forma de aprender todos los componentes de una herramienta es instalar a mano toda la herramienta, sin embargo, esto puede convertirse en una tarea muy tediosa si hablamos de Kubernetes, cabe mencionar que antes de llegar a este punto probé diferentes formas de instalación.

La primera instalación de un cluster de Kubernetes que probé hace ya algunos años fue una instalación a mano y aprovechando los pasos fui preparando mi propio playbook de ansible que permitía luego una instalación automatizada. Me permitía así la posibilidad de escalar el cluster sin problemas, además dado que ya tenía todos los pasos lo adapté para que funcionara tanto en distribuciones basadas en Debian como en Centos.

En segundo lugar decidí probar el sistema de despliegue ofrecido por SUSE con su producto CaaSP v3, ya que tras haber asistido al SUSE Containers Day en Madrid de 2018 y me pareció muy interesante desplegarlo en 6 instancias de mi plataforma Openstack, dado que además facilitaban el despliegue mediante Heat, lo que hacía muy sencillo el mantenimiento. Cabe mencionar que la solución me pareció muy buena ya que facilita mucho el despliegue de un cluster, sin embargo, en la nueva versión cambiaron prácticamente todo el funcionamiento. Y he aquí donde tras 6 meses decidí redesplegar el cluster pero re-haciendolo desde cero ya que había cambiado mucho y me gusta conocer el funcionamiento de base de los productos. En este modelo, CaaSP v4, se cambió la forma de desplegarlo y se utilizar una herramienta desarrollada por la gente de SUSE llamada Skuba que ayuda con el despliegue de nodos, si queréis más información sobre el tema aquí os dejo articulo sobre ello que escribí hace algún tiempo.

En las últimas semanas he decidido, tas mucho tiempo pensándolo, probar el despliegue con la herramienta Kubespray, y para ello me propuse hacer un despliegue híbrido, me explico, actualmente tengo 2 servidores dedicados y un tercer servidor en mi casa, todo se encuentra conectado por túneles IPSEC. En los dos dedicados uso hipervisores KVM (Proxmox) y el de casa es un nodo Nova (Openstack), cada servidor tiene sus máquinas con su red interna, lo que significa que en la red interna de mi plataforma, aunque con subredes diferentes, se ven entre si. Pues decidí que el despliegue de Kubernetes iba a tener 1 master y 1 worker en cada hipervisor un total de 6 nodos (si seguís leyendo veréis que problemas me encontré con esto).

Arquitectura Alefnode

Comienzo montando los servidores todo ellos Centos, 6 nodos y nos ponemos a configurar las opciones de kubespray:

1
2
3
4
5
6
7
8
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
sudo mkdir /opt/kube
sudo chown centos:centos -R /opt/kube/
python -m venv /opt/kube/
source /opt/kube/bin/activate
pip install -r requeriments
cp -rfp inventory/sample inventory/alefnodecluster

Tras esto hacemos los cambios en nuestro inventario, he mio ha quedado tal que así:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[all]
node1 ansible_host=10.10.1.16 ansible_user=centos etcd_member_name=etcd1                # ip=10.3.0.1
node2 ansible_host=10.10.1.18 ansible_user=centos                                       # ip=10.3.0.2
#node3 ansible_host=10.10.1.102 ansible_user=centos access_ip=10.10.1.102                       # ip=10.3.0.3
node4 ansible_host=10.10.0.12  ansible_user=centos etcd_member_name=etcd2               # ip=10.3.0.4
node5 ansible_host=10.10.1.106 ansible_user=centos etcd_member_name=etcd3 access_ip=10.10.1.106
node6 ansible_host=10.10.0.13 ansible_user=centos

[kube-master]
node1
node4

[etcd]
node1
node4
node5

[kube-node]
node2
node6

[calico-rr]

[k8s-cluster:children]
kube-master
kube-node
calico-rr

Como veis tengo 2 nodos master, 2 nodos worker y 3 nodos para etcd, ejecuto el depliegue:

1
ansible-playbook -i inventory/alefnodecluster/inventory.ini  --become --become-user=root cluster.yml

Y ya tendríamos nuestro cluster de Kubernetes funcionando, sin embargo, cabe mencionar que existen diversos problemas que me he encontrado tras hacer diversos despliegues que tengo actualmente, el principal fue que al hacer un despliegue con replica 3 y caer en el nodo de nova que tengo en casa, como las latencias son más elevadas me suponía muchos problemas en tiempos de respuesta, por ello tuve que eliminar un nodo.

Kubernetes Cluster Alefnode

Tras dos semanas con este despliegue estoy empezando con las pruebas de disaster recovery y caída de nodos para ver como se comporta ante este tiempo de situaciones, así como también actualizaciones a versiones más recientes, pero para esta parte escribiré un nuevo articulo con los detalles.