Instalar un cluster kubernetes mediante la herramienta kubeadm es relativamente sencillo y está perfectamente documentado en la guía oficial. El problema es que la guía oficial es muy extensa y llena de matices que a la hora de la verdad pueden hacernos tirar atrás nuestras aspiraciones de acabar teniendo un cluster propio con el que evolucionar nuestra infraestructura.
A lo largo de una serie de 4 posts, vamos a ver cómo tener listo un cluster kubernetes formado por 3 nodos con persistencia para nuestros despliegues, con nuestro propio segmento de red y autenticación.
Curso Administración de Kubernetes: De 0 a 100
Este post es parte de uno de los ejercicios del módulo 2 de nuestro curso de Administración de Kubernetes. Conviértete en un experto y aprende a gestionar cargas de trabajo en kubernetes, configurar tu propio clúster kubernetes con buenas prácticas, contruir aplicaciones extensibles, ¡y mucho más!
Voy a echar un vistazoPreparación
Al finalizar esta serie de posts, tendrás un cluster funcional con las siguientes especificaciones:
NOTA: Por facilidad de despliegue, vamos a desplegar este cluster sobre una máquina virtual Hyper-V desplegada en Azure, pero téngase en cuenta que esta guía es perfectamente válida para entornos full OnPrem.
Configuración del HOST
Como hemos mencionado anteriormente, vamos a desplegar nuestro cluster kubernetes sobre un entorno virtual, que en este caso hemos elegido que sea Windows Server 2019 desplegado sobre entorno Azure.
En nuestro caso hemos optado por montar una Máquina de tipo “Standard D8s v4” (8vCpus, 32GiB), para que dentro de ella montemos nuestro cluster virtualizado y la hemos configurado de la siguiente manera:
- Dentro de esta máquina, vamos a instalar 4 máquinas virtuales que harán las funciones de master, node1, node2 y nfs tal como queremos montar, sobre las que instalaremos Ubuntu 20.04
- Crearemos un virtual switch al que llamaremos VmNAT de tipo internal.
3. Asignaremos una nueva red a las máquinas, tomando esta nueva tarjeta.
4. Asignaremos al host, la IP 192.168.100.1/24.
De esta forma una vez levantadas las máquinas virtuales e instalados los Ubuntu veremos esto:
Prerequisitos
Prerequisitos HOST
En este punto vamos a ver los pre-requisitos que necesitaremos cumplir en nuestra máquina de HOST Windows Server 2019 para la instalación.
Chocolatey
Vamos a instalar algún que otro software para ayudarnos en la instalación y para poder automatizar mejor las tareas vamos a optar por Chocolatey.
Aplicaciones de apoyo para el despliegue
Puesto que hemos optado por utilizar un host Windows Server para desplegar y kubernetes es un entorno Linux, para facilidad de manejo podemos optar por:
- Instalamos WSL y sobre él una distribución
- Instalamos las apps que utilizaremos únicamente
El método A es el más efectivo, pero algo más laborioso puesto que no está bien integrado todavía con Windows Server por lo que utilizaremos el método B
NOTA: Durante el curso, vamos a ver ambos métodos
Una vez instalado chocolatey, vamos a instalar las siguientes herramientas de apoyo
choco install awk
choco install grep
choco install sed
Prerequisitos máquinas del cluster kubernetes
Aquí vamos a ver los pre-requisitos que tendremos que instalar en nuestras máquinas del cluster kubernetes.
SSH
Vamos a hacer uso intensivo de ssh por lo que es buena idea instalar ssh en todos nuestros nodos kubernetes.
sudo apt-get install openssh-server
NOTA: haremos uso de Visual Studio code, es buen momento para que leas sobre “remote development using SSH”
IP y Fichero de host
Nuestro cluster kubernetes va a tener IP fija y lo vamos a montar sobre la subred 192.68.100.x/24, de forma que todos nuestros nodos deban tener su propia IP fija y una vez asignadas sus IP, tengan el siguiente contenido en el fichero /etc/hosts
Contenido que debemos tener en /etc/hosts en todos nuestros nodos
# nodes in k8s
192.168.100.1 host
192.168.100.2 master
192.168.100.3 node1
192.168.100.4 node2
192.168.100.5 nfs
CIDR de nuestros pods
Quiero hacer notar en este momento, que la red donde nuestros servicios y pods van a escuchar y trabajar será totalmente diferente a esta red. Hago mención a esto ahora para que se tenga en cuenta que llegado el momento configuraremos nuestro cluster para trabajar sobre otro segmento de red diferente
Instalación
Una vez cumplidos los prerrequisitos, ya podemos continuar con la instalación de nuestros componentes.
Master Node
Desabilitar swap
Para que funcione correctamente kubernetes, sigue siendo necesario deshabilitar swap:
sudo swapoff -a
sudo nano /etc/fstab
IMPORTANTE: Asegurate que en /etc/fstab está comentada la línea relativa a swapping para que al reiniciar no tengas problemas. Deberías ver algo parecido a esto (comentado)
#/dev/mapper/ubuntu–vg-swap_1 none swap sw 0 0
Instalación de paquetes kubernetes
Ahora es el turno de instalación de los componentes principales:
- Docker
- Este se puede obviar ya, puesto que containerd es ya suficiente
- Kubelet
- Kubeadm
- Kubectl
#Add Google’s apt repository gpg key
sudo apt-get install curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
#Add the Kubernetes apt repository
sudo bash -c ‘cat </etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF’
# Let ip tables see bridged traffic
# load module
sudo modprobe br_netfilter
# check is on
lsmod | grep br_netfilter
# As a requirement for your Linux Node’s iptables to correctly see bridged traffic, you should ensure net.bridge.bridge-nf-call-iptables is set to 1 in your sysctl config, e.g.
cat <
br_netfilter
EOF
cat <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl –system
#Update the package list and use apt-cache to inspect versions available in the repository
sudo apt-get update
apt-cache policy kubelet | head -n 20
apt-cache policy docker.io | head -n 20
#Install the required packages, if needed we can request a specific version
sudo apt-get install -y docker.io kubelet kubeadm kubectl
# Mark the following packages not automatically upgradable. This must be done by kubernetes itelf as a protection
sudo apt-mark hold docker.io kubelet kubeadm kubectl
En este punto deberías ver algo así:
NOTA: Es normal el crash porque kubernetes todavía no tiene nada en este momento funcionando y el proceso main saldrá con estado 255
Pero, por otro lado, Docker debería estar funcionando
Configuración de auto-arranque para kubernetes y Docker
El último paso ya es simplemente indicar a los servicios kubelet y Docker que se arranquen siempre con nuestro sistema operativo:
#Ensure both are set to start when the system starts up.
sudo systemctl enable kubelet.service
sudo systemctl enable docker.service
# Setup Docker daemon.
sudo bash -c ‘cat > /etc/docker/daemon.json <<EOF
{
“exec-opts”: [“native.cgroupdriver=cgroupfs”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
EOF’
#Restart reload the systemd config and docker
sudo systemctl daemon-reload
sudo systemctl restart docker
Conclusión
En este post hemos comenzado las bases para el despliegue de nuestro propio cluster kubernetes. En un siguiente post vamos a estar hablando de cómo hacer el boostrap al nodo master.
Si quieres avanzar en esta serie de post, clica aquí para ir a la siguiente parte.
¡Has llegado al final... pero no acaba aquí! Tenemos un webinar sobre Kubernetes para ti.
Si quieres seguir formándote en Kubernetes, te invitamos a nuestro webinar "Qué es Kubernetes y Azure Arc", donde comentaremos por qué se ha convertido en tan poco tiempo en el ecosistema de aplicaciones a gran escala.
Quiero asistir al webinarEnrique Catalá
Soy Technical Leader en Verne TECH, MVP de Microsoft y Microsoft Certified Trainer (MCT). Estoy focalizado en motores relacionales de SQL Server y me encanta resolver problemas de rendimiento y escalabilidad en sistemas OLTP. He liderado más de 100 proyectos, no sólo en España, sino también en otros países como USA, Holanda, México, etc. siendo el principal arquitecto de soluciones como HealthCheck, QueryAnalytics y DatabaseObfuscator.