Instalación de Kubernetes en Centos 7

La Wikipedida define Kubernetes como (referido en inglés comúnmente como “K8s”) un sistema de código libre para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores .

A esta clase de software se la conoce como orquestadores, existen varios y cada uno tienen sus propias características

Vamos a crear un cluster con almenos tres nodos , 1 manager y 2 workers (utilizar siempre un número impar de nodos) con unos requisitos mínimos de 2vCPUs y 2 GB de memoria por cada nodo.

Además necesitaremos conectividad de red entre todos los nodos

Pasos previos

Vamos a realizar los siguientes pasos tanto en el manager como en el resto de nodos Lo primero será deshabilitar la swap

temporalmente (hasta que reiniciemos )con el comando swapoff -a

Definitivamente editando el fichero /etc/fstab y comentando la línea de la partición del swap

Permitimos a iptable ver el trafico en modo bridge . Para ello tenemos que cargar el módulo y activarlo al arrancar con o bien creamos un fichero de configuración para que se cargue en /etc/sysctl.d incluido el manager

y aplicamos los cambios con

deshabilitamos SElinux

Instalamos Docker

instalamos los requisitos para instalar docker

añadimos el repositorio e instalamos docker

A día de este tutorial estas son las versiones de docker-ce soportadas por kubernetes

Creamos el directorio /etc/docker

Declaramos el demonio para docker

creamos el directorio del servicio

Recargamos

Lo ponemos para que arranque al inicio

debemos comprobar con el comando docker info | grep -i cgroup que el docker está bajo systemd

Instalación de Kubernetes

Pasos a realizar en todos los nodos (incluido el manager)

Instalamos los paquetes

Ojo al ser el um update y que no instale versiones más nuevas de Docker

Lo ponemos para que arranque al inicio

Comprobamos que kubernetes y docker están en el mismo grupo de control ( cgroup)

Para verificar el cgroup de docker

Para añadir kubernetes al mismo cgroup

según la versión de kubernetes y/o SO el fichero de configuración se ha cambiado a /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

Reiniciamos los servicios

Pasos a realizar sólo en el Manager

Como el Firewalld está habilitado en CentOS de manera predeterminada, tenemos que abrir los siguientes puertos para permitir la comunicación con los nodos

Iniciamos el cluster

hay varias opciones que podemos usar para definir el interfaz que da servicio o la red para los pods.
flannel por defecto usa el CIDR 10.244.0.0/16 . Calico por defecto usa el CIDR 192.168.0.0/16 el pod-network-cidr va acorde a esto. Aunque se puede cambiar para usar otros valores

Cuando este comando termina nos aparecerá un comando con el token y el hash para unir los nodos. Este comando deberemos de guardarlos para añadir los nodos.

Antes de usar Kubernetes deberemos de ejecutar los siguientes comandos para terminar la configuración.

Si kubernetes lo vamos a lanzar como root sólo debemos ejecutar el siguiente comando

Si lo vamos a lanzar como otro usuario deberemos de crear un directorio para la configuración, copiar los archivos necesarios y darle permisos sobre dichos archivos

Ahora debemos de definir el modelo de red que queremos usar en kubernetes , hay varias aproximaciones cada una con distitas características (https://kubernetes.io/docs/concepts/cluster-administration/networking/)

Si por ejemplo vamos a usar flannel ejecutariamos en el manager

Si usamos weave el comando sería

Si queremos comprobar si se ha instalado correctamente podemos ejecutar nos deberías aparecer un pods llamada weave-net-wvlbx con el estado running

Paso final en los nodos

Abrimos los puertos para la comunicación con el resto de nodos

Como último punto tenemos que añadir los nodos al manager. Para ello usaremos el comando que habiamos guardado cuando iniciamos el cluster y lo ejecutamos en los nodos que vamos a unir al cluster

MITOKEN y MIDISCOVERY_TOKEN son los que nos dio el manager al iniciarlo

Funcionamiento

Para ver que todo está funcionando y los nodos están registrados ejecutamos en el manager

Problemas

Cambiar el cgroup driver de Docker a systemd

Editar el fichero /usr/lib/systemd/system/docker.service y cambiar la línea

kube-flannel-ds in CrashLoopBackoff

https://github.com/flannel-io/flannel/blob/master/Documentation/troubleshooting.md

Si tenemos este problema con el driver kube-flannel es debido a que al ejecutar kubeadm init no especificamos la opción –pod-network-cidr=<red para pods>. Para comprobar si está definida ejecutamos para cada nodo

Para definir el PodCIDR en un nodo

Por ejemplo

Referencias

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

https://www.techrepublic.com/article/how-to-deploy-nginx-on-a-kubernetes-cluster/

https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-on-centos-7/

https://computingforgeeks.com/install-kubernetes-cluster-on-centos-with-kubeadm/

https://www.doblefactor.com/devops/como-instalar-un-cluster-de-kubernetes-en-centos-7/

https://phoenixnap.com/kb/how-to-install-kubernetes-on-centos

https://medium.com/liveness-y-readiness-probe/instalaci%C3%B3n-de-kubernetes-onpremise-638609f2bb1e

https://blog.mauriciovillagran.uy/2019/Kubernetes-Lab/

https://rescalante.com/blog/view/f08ff837-5fcf-4b3c-81ac-0592014c6631