En nuestro tutorial de Kubernetes anterior hemos aprendido lo básico de esta tecnología, qué es exactamente y para qué nos sirve. Además de que también hemos visto cuales son sus principales características y arquitectura, lo cual nos ayuda a entender el porqué hoy en día es tan popular y los motivos por los cuales podríamos llegar a necesitarlo.
En el día de hoy, seguiremos aprendiendo más sobre Kubernetes pero desde el punto de vista práctico. Es decir que, veremos cómo podemos realizar la instalación, así como también crear, configurar y agregar los nodos que contendrán nuestros pods.
Configurando Kubernetes
Para poder realizar nuestro setup de Kubernetes, vamos a, primero que nada, instalarnos tres máquinas virtuales, por ejemplo con VirtualBox, utilizando el Sistema Operativo Ubuntu 16.04 LTS, las cuales serán nuestro nodo master y dos nodos más que serán los encargados de gestionar nuestros Pods.
Algo que si hay que tener en cuenta para que nos funcione nuestra configuración, es lo siguiente:
- Nuestro modo master debemos configurarlo con al menos 2GB de RAM.
- Configurar las 3 máquinas virtuales con adaptador puente (bridge). Eso es más bien por comodidad, para poder acceder a ellas vía SSH y copiar y pegar sin problemas.
- Las tres máquinas deben de tener un hostname diferente: por ejemplo ubuntunode1, ubuntunode2 y ubuntumaster
- En todas las máquinas debemos deshabilitar la Swap, ya que en la versión de Kubernetes (1.8) que estaremos utilizando, no es soportada.
[wp-svg-icons icon=»loop-2″ wrap=»i»] Actualizando nuestras máquinas virtuales
Una vez que tenemos nuestras máquinas virtuales, no nos podemos olvidar de actualizarlas, ya que como todo equipo y más allá de que sean de prueba, conviene tener todo en su última versión. Recordemos que es uno de los puntos más importantes, no solamente en cuanto a seguridad sino también en performance.
Para ello corremos lo siguiente en las tres máquinas:
apt-get update; apt-get -y upgrade; apt-get -y dist-upgrade; apt -y autoremove
Una vez realizado, vamos a reiniciar nuestras máquinas para asegurarnos de que han tomado los cambios.
[wp-svg-icons icon=»cogs» wrap=»i»] Instalando y configurando Kubernetes
Ahora sí, ya que contamos con todas las máquinas actualizadas, es hora de ponernos manos a la obra y comenzar a instalar Kubernetes.
- El primer paso sería descargarnos los paquetes, las keys e instalarlos.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list apt-get update && apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni
- Luego, tal como hemos comentado anteriormente, debemos deshabilitar la swap
swapoff -a
- Una vez realizado esto, también la deshabilitamos desde nuestro archivo /etc/fstab
nano -w /etc/fstab
- Allí comentamos la línea de la swap, nos debería quedar algo como lo siguiente:
- Por otro lado, en nuestros tres equipos, agregamos la siguiente línea en el siguiente fichero
nano -w /etc/systemd/system/kubelet.service.d/10-kubeadm.conf Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
- Ahora procedemos a reiniciar los servicios
systemctl daemon-reload && systemctl restart kubelet systemctl status kubelet
- Y luego, desde un usuario que no sea root, corremos el siguiente comando
sudo kubeadm init --pod-network-cidr=192.168.1.0/24
- Al realizar esto, nos tendría que aparecer el siguiente mensaje. Es importante guardar el comando y el token, ya que lo necesitaremos más tarde para agregar los demás nodos.
- Después, tal y como dice allí, debemos correr los comandos que se nos indica para copiar las configuraciones al directorio correcto.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Y por último, lo que nos falta es instalar el sistema de Networking. Para ello corremos el siguiente comando:
Desde la siguiente URL puedes ver más información sobre los Sistemas de Networking de Kubernetes así como también ver o elegir otras opciones, además de la que nosotros utilizaremos. En este caso hemos utilizado Calico, pero siempre puedes elegir el que más te convenga.
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
- Una vez que realizamos esto, ya podemos ver el estado de nuestro servidor con el siguiente comando
[wp-svg-icons icon=»settings» wrap=»i»] Agregando Nodos
Ahora que ya tenemos a nuestro nodo master funcionando, podemos agregar los demás nodos. Para ello corremos el comando que anteriormente nos indicaba en nuestros nodos.
kubeadm join 192.168.1.158:6443 --token [TOKEN] --discovery-token-ca-cert-hash sha256:[HASH]
- Si anteriormente no hemos guardado el token, entonces con el siguiente comando podemos volver a obtenerlo
sudo kubeadm token list
[wp-svg-icons icon=»thumbs-up» wrap=»i»] Verificando el estado de los Nodos
- Al añadir nuestros nodos, podemos ver a través del siguiente comando si están funcionando correctamente así como también saber su estado.
root@ubuntumaster:/home/sabrina# kubectl get nodes NAME STATUS ROLES AGE VERSION ubuntumaster Ready master 13m v1.11.2 ubuntunode NotReady 12s v1.11.2
Si vemos que nuestro nodo aparece como NotReady, simplemente debemos esperar uno minutos. Si aún así, luego de un tiempo no se encuentra listo, debemos asegurarnos de que todos los nodos cuentan con un hostname diferente.
También, en caso de que nos siga dando problemas, podemos añadir los hostnames a nuestro archivo /etc/hosts para que nuestro nodo master no tenga problemas al intentar localizarlo.
nano -w /etc/hosts 192.168.1.162 ubuntunode
Allí, tal como se ve en el ejemplo anterior, debemos colocar la IP de nuestra máquina virtual, un espacio y el hostname.
Luego de ello, ya debería de aparecer nuestro nodo como ready. Esto no se da siempre, pero en algunas ocasiones puede suceder.
Conclusión
Como vemos, realizar el setup de Kubernetes en un ambiente de desarrollo con máquinas virtuales, no es algo muy complejo. Puede que algunos puntos aún nos parezcan complicados o que no sepamos aún para qué los realizamos totalmente, pero poco a poco y a medida que nos familiaricemos con la nueva tecnología nos irá pareciendo mucho más sencilla.
Además también debemos de tener en cuenta que Kuberntes es una tecnología que se está utilizando mucho hoy día, que además fue desarrollada por una gran empresa como es Google, y que sin lugar a dudas nos conviene conocer, más allá de que realmente la utilicemos o necesitemos para nuestros proyectos.
¿Estás listo para la Parte 3? Sigue este enlace: Tutorial de Kubernetes – Parte 03: Dashboard y Rollouts