Probando Kubespray

por | marzo 5, 2019

Después de probar Minikube toca echar un vistazo a un clúster de Kubernetes con más de un nodo y que se asemeje más a un entorno real de producción. Tenemos un playbook de Ansible llamado Kubespray que nos facilita la puesta en marcha nuestro entorno.

Para instalar el clúster tengo 4 nodos CentOS 7 virtualizados con KVM:

El primer paso es clonar el repo de GitHub en mi host:

git clone https://github.com/kubernetes-sigs/kubespray

Instalamos dependencias de Python necesarias:

pip install -r requirements.txt

Creamos nuestro directorio de inventario:

cp -rfp inventory/sample inventory/jota-k8s-cluster

En mi caso no he utilizado el inventory builder de Python y he modificado el fichero de hosts.ini a mano en inventory/jota-k8s-cluster/hosts.ini:

[all]
 node1 ansible_host=192.168.1.135  ip=192.168.1.135 etcd_member_name=etcd1
 node2 ansible_host=192.168.1.136  ip=192.168.1.136 etcd_member_name=etcd2
 node3 ansible_host=192.168.1.137  ip=192.168.1.137 etcd_member_name=etcd3
 node4 ansible_host=192.168.1.138  ip=192.168.1.138 etcd_member_name=etcd4

[kube-master]
 node1
 node2

[etcd]
 node1
 node2
 node3
 node4

[kube-node]
 node1
 node2
 node3
 node4

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

En el fichero inventory/jota-k8s-cluster/group_vars/k8s-cluster/k8s-cluster.yml podemos ajustar configuración de diversos aspectos del clúster como la red (plugin, subred, etc…), versión de Kubernetes, nombre del clúster… También en el fichero inventory/jota-k8s-cluster/group_vars/all/all.yml podemos ajustar el puerto del API Server, configuración DNS, etc…

Una vez lo tengamos todo listo lanzamos el playbook:

ansible-playbook -i inventory/jota-k8s-cluster/hosts.ini --become --become-user=root cluster.yml --flush-cache

Si todo va bien veremos al final del proceso:

Hacemos login en node1 que es master y lanzamos un kubectl get nodes para comprobar que los nodos están levantados:

Si el playbook ha fallado en algún nodo, podemos relanzarlo sólo para ese nodo con la opción --limit NODE_NAME. Por ejemplo si falla node4:

ansible-playbook -i inventory/jota-k8s-cluster/hosts.ini --become --become-user=root cluster.yml --flush-cache --limit node4

Ahora queda configurar el acceso al dashboard, algunos servicios, resetear el clúster y seguir probando K8S…