Desplegar K8S con Kubespray
Last updated
Last updated
Para desplegar un cluster de kubernetes y tambien para resetearlo en caso necesario, de forma automatizada usando Kubespray.
Lo primero sera obtener y configurar el entorno donde vamos a usar kubespray, para ello nos descargamos desde el repo oficial https://github.com/kubernetes-sigs/kubespray/releases
Con el kubespray ya instalado en la maquina desde donde desplegaremos el cluster, no tiene porque ser en el propio cluster!!! Lo que si tienen que tener es visibilidad entre maquinas, para ello deberás tener en el /etc/hosts las IPs de las maquinas que compongan el cluster y las claves ssh compartidas entre si, incluida la maquina que usaras para desplegar todo con kubespray.
Lo primero sera definir los nombres de los nodos e IPs que compondrán el cluster que queremos desplegar, aquí pondremos los nombres de los nodos y sus ips, tantos como vayamos a configurar en el cluster, en este ejemplo son 3 maquinas.
En el ejemplo, hemos definido 3 nodos, cada uno con su IP. Ahora entramos en el directorio de Kubespray, y dentro de el veremos un directorio de nombre “inventory”, entramos, veremos que hay 2 carpetas “local” y “sample”, hacemos una copia de “sample” y le ponemos el nombre que queramos, podremos tener tantos clusters configurados como queramos y organizados por entornos...
Ahora vamos a configurar el inventario para poder despegarlo, sustituiremos el “NOMBRE_DE_TU_CLUSTER” por el que corresponda que tengas definido.
Editamos ahora el fichero .../kubespray/inventory/NOMBRE_DE_TU_CLUSTER/hosts.yaml
Aquí debemos colocar los nodos, cuales serán los master y cuales los workers.
En este fragmento de código, vemos que el “nodo1” corresponde a kube_control_plane, osea el master del cluster, aquí podremos poner los nodos que queramos que sean masters, en kube_node tenemos “nodo2” y “nodo3”, que harán de workers, en el apartado etcd, pondremos todos los nodos que tenga el cluster.
En el ejemplo, nuestro clúster seria: 1 Master 2 Workers
Ahora editamos un yaml para definir unos parámetros
Editamos el fichero .../kubespray/inventory/NOMBRE_DE_TU_CLUSTER/group_vars/k8s_cluster/k8s-cluster.yml
Esta linea definiremos la versión del cluster que vamos a desplegar.
Para consultar las versiones de K8S disponibles: https://kubernetes.io/releases/
kube_version: 1.23.12
Definiremos el nombre del cluster a nivel local
cluster_name: nombre_cluster.local
Este parámetro, nos autorenueva los certificados, lo cambiamos a true
si queremos que los autorenueve, por defecto es false.
auto_renew_certificates: false
Tenemos también la opción de hacerlo por calendario, por defecto seria el primer lunes de cada mes.
Si queremos establecerlo a otra fecha usaremos este parámetro, esta es configuración por defecto.
auto_renew_certificates_systemd_calendar: "Mon *-*-1,2,3,4,5,6,7 03:{{ groups['kube_control_plane'].index(inventory_hostname) }}0:00"
Todas las maquinas que compongan el cluster, deben tener una mínima configuración. Instalamos los siguientes paquetes en TODOS los nodos.
Debemos editar los /etc/hosts y añadir el hostname e IP de cada nodo, en cada nodo. Tambien deben tener acceso entre si, copiando la clave ssh de /root/.ssh/id_rsa.pub de la maquina donde tenemos kubespray a /root/.ssh/authorized_keysde cada nodo, asegúrate que todos los nodos tienen la misma hora, porque da problemas si alguno no esta en el mismo horario. Después de estos cambios, reiniciar los nodos normalmente.
Desde la maquina donde tenemos Kubespray, entramos en el directorio y ejecutamos
Y empezara el despliegue, el tiempo aprox es de unos 30 minutos, a veces se puede extender en función de la versión del Kubernetes a desplegar, numero de nodos, ancho de banda, etc…
Cuando termine, si todo ha salido correctamente, veremos una salida como esta, en este ejemplo, la duración ha sido de 25 minutos
Si entramos en el nodo1 y ejecutamos el kubectl podemos ver que el cluster ya esta levantado
En este caso, debemos tener también los ficheros de configuración con las IPs de los nodos que componen el cluster, del mismo modo que lo hemos desplegado. El comando a usar para eliminar el cluster es
Y lo lanzamos, nada mas lanzarlo y hacer una comprobaciones, nos pedirá confirmación de si estamos seguro de que lo queremos eliminar.
Si le decimos que si “yes”, empezara la eliminación, el tiempo aprox es de unos 6 minutos, dependiendo de cuantas maquinas compongan el cluster, cuando termine debemos reiniciar manualmente cada nodo del cluster.