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:
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:~$ 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 cloneAl 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