Kubernetes Segunda Parte - Instalacion y configuracion de cluster Kubernetes

Continuamos con la instalacion de Kubernetes, para eso debemos realizar los pasos descritos en la primera parte de este tutorial, si no lo haz hecho puedes dar click aqui:

Kubernetes Primera Parte

Nos conectamos a nuestro Master y nuestro Slave Template y vamos a añadir el repositorio de Kubernetes en ambos para eso vamos a escribir los comandos :

xymox18@k8s-master:~$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

xymox18@k8s-master:~$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main
 

Aqui he puesto los comandos del master pero son los mismos comandos para el Slave.


Muy pocos se habran dado cuenta pero en el segundo comando estamos usando el repositorio para xenial que es Ubuntu 16.04 pero en nuestras VMs estamos usando Ubuntu 22.04.2 LTS (Jammy Jellyfish), esto no es ningun problema ya que no existen repositorios para la version de Ubuntu que estamos usando en este momento, talvez en un futuro los habra pero eso no causa ningun inconveniente.

Ahora en ambas VMs actualizamos nuestros repositorios e instalamos los paquetes necesarios para kubernetes para eso usamos el comando siguiente:

sudo apt update && sudo apt install kubeadm kubelet kubectl kubernetes-cni -y

CREATION DE TEMPLATE SLAVE:

Ahora vamos crear nuestro template de Slave, como lo dijimos en el capitulo anterior queremos crear 1 Master y 3 Slaves(o podrian ser mas si lo deseamos), para realizar esto de forma optima y no tener que crear 1 Slave a la vez y configurar todo de cero, vamos a convertir nuestra VM Slave en template para eso vamos a tener que realiza algunas operaciones mas solo en la VM Slave asi que ahi vamos con los comandos :

xymox18@k8s-slave:~$ sudo cloud-init clean

xymox18@k8s-slave:~$ sudo rm -rf /var/lib/cloud/instances

Normalmente el primer comando deberia borrar la machine-id pero por alguna razon no lo hace asi que para solucionar este problema escribimos los siguientes comandos ya que esto seria muy problematico, porque cada vez que clonemos el template que vamos a generar a partir de esta VM para añadir Slaves a nuestro cluster todos tendrian la misma machine-id y eso crearia problemas en el cluster :

xymox18@k8s-slave:~$ sudo truncate -s 0 /etc/machine-id

xymox18@k8s-slave:~$ cat /etc/machine-id 

xymox18@k8s-slave:~$ sudo rm /var/lib/dbus/machine-id  

xymox18@k8s-slave:~$ sudo ln -s /etc/machine-id /var/lib/dbus/machine-id 

xymox18@k8s-slave:~$ ls -ls /var/lib/dbus/machine-id
0 lrwxrwxrwx 1 root root 15 Mar  9 20:19 /var/lib/dbus/machine-id -> /etc/machine-id

Verificamos que la machine-id este vacia y luego apagamos :

xymox18@k8s-slave:~$ cat /etc/machine-id

xymox18@k8s-slave:~$ sudo poweroff


Ahora que hemos vaciado toda la informacion de identificacion de nuestra VM ahora podemos crear nuestro template, para eso, una vez que la VM esta apagada, desde la interfaz grafica de Promox damos click derecho en nuestra VM Slave y selecionamos la opcion "Convert to template", verifiquen que han seguido correctamente todos los pasos, porque una vez que convertamos nuestra VM en un Template, ya no hay vuelta atras, tendrian que comenzar de cero.


Ahora a partir de nuestro template vamos a crear 3 Slaves, para eso click derecho en nuestro template, luego ingresamos los valores que deseemos, en mi caso para que sea comprensible:

Slave 1:

VM ID: 752

name: k8s-slave-1

Mode: Full clone

Slave 2:

VM ID: 753

name: k8s-slave-2

Mode: Full clone

Slave 3:

VM ID: 754

name: k8s-slave-3

Mode: Full clone

Al final nos deberia quedar asi:


Ahi vemos que hemos creado nustros 3 Slaves, ahora vamos a verificar los recursos asignados a cada uno de nuestras VMs, asi que las apagamos todas incluida el Master(Para apagar click derecho desde la interfaz de Promox sobre la VM y luego Shutdown).

Para el MASTER debemos asignar mas recursos que para los Slaves porque este es el que controla todo el resto en nuestro caso le vamos a dar 4Gb(4096 es el valor a ingresar) de Ram y 2 procesadores(2 cores) :

E iniciamos nuestro MASTER.

Ahora verificamos nuestros Slaves y vemos que cada uno tiene asignado 1gb de ram y 1 core, yo les voy a dar 2Gb de Ram y 1 core, esta operacion la deben realizar en cada uno de los Slaves:


Si no tenemos muchos recursos con 1 Gb para realizar pruebas es suficiente, mi servidor tiene 32Gb de Ram y 4 cores asi que por eso le asigno 2Gb de ram y 1 solo core a cada VM e iniciamos todas los Slaves.

Ahora vamos a ver las IPs de nuestros Slaves, como a mi no me gusta que utilizen IP al azar(en este momento 1 tiene 14, la otra 20 y la otra 58), yo voy a asignarles las IP en mi router.


Ahi vemos las ips que he asignado a cada uno de mis Slaves y mi Master.

Iniciando nuestro Cluster Kubernetes

Nos contectamos a nuestro Master y vamos a escribir el siguiente comando:

xymox18@k8s-master:~$ sudo kubeadm init --control-plane-endpoint=192.168.1.120 --node-name k8s-master --pod-network-cidr=10.244.0.0/16

Explicacion:

192.168.1.120 corresponde a la IP de nuestro Master

k8s-master es la machine-id que le dimos a nuestro master

10.244.0.0 es la red en la que van a trabajar nuestros PODs(asi se llaman los containers dentro de Kubernetes) dentro de Kubernetes, no es recomendable cambiar este valor si estan iniciando en Kubernetes, porque podrian crear conflictos entre vuestra red y la de los PODs

Si todo va bien, al final de ejecutar el comando anterior dentro de nuestro Master, obtendremos algo como esto :


Si nos fijames bien en la consola vemos que Kubernetes nos dice que tenemos que ejecutar los siguientes comandos :

xymox18@k8s-master:~$ mkdir -p $HOME/.kube
xymox18@k8s-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
xymox18@k8s-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

En la salida de la consola encontramos el siguiente comando que debremos guardar en algun lugar porque lo vamos a utilisar mas adelante:

kubeadm join 192.168.1.120:6443 --token vdggph.fg77x5vcqlft5806 \
    --discovery-token-ca-cert-hash sha256:a9c91bcc95a97da44b75448e45c2164d3b5b6f6d7287b66733f888465f7956e4

Este comando nos a permitir añadir nuestros slaves a nuestro cluster.

Ahora vamos a ver los PODs que estamos corriendo dentro de nuestro cluster para eso usamos el comando:

kubectl get pods --all-namespaces


Ahi vemos que coredns esta en status Pending, esta esperando el Overlay Network sobre el cual va a trabajar, para esto vamos a pasarle un archivo de configuracion, para eso vamos a usar el archivo de flannel con esl siguiente comando :

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml

Esperamos unos segundos y volvermos a verficar si nuestros pods estan todos en status Running:


ahora vamos a ver los slaves que integran nuestro cluster para eso usamos el comando

kubectl get nodes

Y veremos que solo tenemos nuestro Master:


Ahora vamos a añadir nuestros Slaves a nuestro cluster para eso vamos a utilizar el comando que les dije que guardaramos arriba:

kubeadm join 192.168.1.120:6443 --token vdggph.fg77x5vcqlft5806 \
    --discovery-token-ca-cert-hash sha256:a9c91bcc95a97da44b75448e45c2164d3b5b6f6d7287b66733f888465f7956e4

este comando lo vamos a ejecutar en cada uno de nuestros slaves

Ejecutando el comando nos encontramos con el siguiente error:


 Esto es debido a que el token tiene un tiempo de duracion, asi que lo que tenemos que hacer es generar uno nuevo para eso vamos a nuestro master y escribimos

xymox18@k8s-master:~$ kubeadm token create --print-join-command

Y este comando nos va a mostrar lo que tenemos que ejecutar en nuestros slaves en modo sudo para integrar nuestro cluster:


kubeadm join 192.168.1.120:6443 --token nw4dmy.xd7zphmg8me3aea9 --discovery-token-ca-cert-hash sha256:a9c91bcc95a97da44b75448e45c2164d3b5b6f6d7287b66733f888465f7956e4


Ahora vamos a nuestros slaves y ejecutamos en modo sudo lo mas rapido que podamos antes de que expire el token :

sudo kubeadm join 192.168.1.120:6443 --token nw4dmy.xd7zphmg8me3aea9 --discovery-token-ca-cert-hash sha256:a9c91bcc95a97da44b75448e45c2164d3b5b6f6d7287b66733f888465f7956e4


Y esperamos a que termine, en la imagen vemos que los 2 primeros ya terminaron pero el tercero recien se esta conectando al cluster.

Una vez que esto ha terminado del lado de los Slaves, ahora vamos a nuestro Master y ejecutamos 

kubectl get nodes

para ver cuantos nodos integran nuestro cluster, ahora vemos que nuestro cluster esta integrado por 1 Master y 3 Slaves:


 

Con esto terminamos la configuracion de nuestro cluster Kubernets completamente funcional, en el siguiente capitulo vamos a desplegar un contenedor(POD) dentro de nuestro cluster.

Comentarios