Tabla de Contenidos

Kubernetes

Introducción

Kubernetes, también conocido como K8s, es una herramienta de código abierto para la orquestación de contenedores, y que se utiliza para desplegar aplicaciones en ellos.

Desarrollada por Google, permite orquestar contenedores en múltiples hosts. Con Kubernetes, se puede configurar el balanceo de carga entre contenedores y ejecutar varios contenedores en múltiples sistemas.

Es compatible con servidores físicos locales, OpenStack, nubes públicas como Google, Azure, AWS, etc.

Características

Kubernetes le ofrece amplia funcionalidad, a saber:

Figura 1. Evolución histórica de la virtualización

Figura 2. Componentes de un cluster Kubernetes

Empezando la configuración

En esta guía, explicaremos cómo configurar un cluster de Kubernetes en Debian 12.

Empezaremos con cuatro servidores virtuales, todos instalados de manera mínima y sin swap, y preconfigurados con lo que necesitemos, incluyendo contraseñas y los utilitarios que precisemos:

apt install mc screen rsync iptraf ccze zsh htop gnupg2 curl apt-transport-https ca-certificates software-properties-common ufw

La primer VM será el nodo Master, y las otras tres serán nodos Worker.

Para empezar Kubernetes necesita el swap desactivado, y si el nodo fue instalado sin prever eso, se debe desactivar. Para ello, editar el archivo /etc/fstab y comentar las líneas similares a la siguiente:

# UUID=18b43798-486f-499d-9edf-2c551b34b5a1 none swap sw 0 0

Y desactivarlo con el siguiente comando:

swapoff -a

A continuación, también deberá activar el reenvío de IP y otros parámetros editando el archivo /etc/sysctl.conf o bien agregarlos en un archivo específico de configuración:

cat <<EOF | tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 
net.bridge.bridge-nf-call-ip6tables = 1 
EOF

e informar al kernel del cambio:

sysctl --system

Permitir los puertos requeridos, si usan ufw tal como fue instalado:

ufw allow 6443/tcp
ufw allow 2379/tcp
ufw allow 2380/tcp
ufw allow 10250/tcp
ufw allow 10251/tcp
ufw allow 10252/tcp
ufw allow 10255/tcp
ufw reload

Containerd

Configurar la carga automática en el reinicio de los módulos del kernel necesarios para containerd:

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf 
overlay 
br_netfilter
EOF

Y cargar dichos módulos:

modprobe overlay 
modprobe br_netfilter

Instalar containder:

apt install containerd

Y configurarlo para Kubernetes:

containerd config default | tee /etc/containerd/config.toml > /dev/null 2>&1

Editar el archivo /etc/containerd/config.toml:

nano /etc/containerd/config.toml

Buscar la sección [plugins.“io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options] y cambiar a true la variable SystemdCgroup:

"SystemdCgroup = true"

Reiniciar el demonio y activarlo en SystemD:

systemctl restart containerd
systemctl enable containerd

Kubernetes

Agregar los repositorios de Kubernetes:

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Instalar las herramientas de Kubernetes:

apt update
apt install kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
systemctl enable --now kubelet

En el nodo master crear el archivo kubeadm-config.yaml:

nano kubeadm-config.yaml

Y agregar el siguiente contenido:

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: "v1.30.0"
controlPlaneEndpoint: "kmaster1:6443"
networking:
  podSubnet: "10.244.0.0/16"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

REVISAR HACIA ABAJO

Instalar Docker CE en los nodos master y worker

Para ello, agregue el repositorio de Docker CE con los siguientes comandos:

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list

A continuación, actualice el listado de paquetes e instale Docker CE:

apt update && apt install docker-ce docker-ce-cli containerd.io

Una vez instalado Docker CE, verifique la versión instalada:

docker -v

Instalar los componentes de Kubernetes en los nodos master y worker

A continuación, deberá instalar el componente de Kubernetes en los nodos. Primero, agregue el repositorio de Kubernetes:

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

A continuación, actualice el repositorio e instale todos los componentes necesarios:

apt update && apt install kubelet kubeadm kubectl

Una vez instalados todos los paquetes de Kubernetes, puede continuar con el siguiente paso.

Inicializar el cluster Kubernetes

A continuación, deberá inicializar el clúster de Kubernetes en el nodo maestro:

kubeadm init

Obtendrá el siguiente resultado:

¡Su plano de control de Kubernetes se ha inicializado correctamente! Para empezar a usar el clúster, debe ejecutar lo siguiente como usuario normal: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternativamente, si es el usuario root, puede ejecutar: export KUBECONFIG=/etc/kubernetes/admin.conf Ahora debería implementar una red de pods en el clúster. Ejecute “kubectl apply -f [podnetwork].yaml” con una de las opciones que se indican en: https://kubernetes.io/docs/concepts/cluster-administration/addons/. A continuación, puede unir cualquier número de nodos de trabajo ejecutando lo siguiente en cada uno como usuario root: kubeadm join 69.28.91.245:6443 –token 3kwruw.iz4wiwbnr1l31o6t \ –discovery-token-ca-cert-hash sha256:c199b45b1abffe99f8ec539d5c6681a8857aac51b423a4e4efebf9ad86b86705

A continuación, ejecute el siguiente comando para activar la configuración de Kubernetes:

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

Nota: Recuerde el comando “kubeadm join” del resultado anterior. Deberá ejecutarlo en el nodo de trabajo para unirse al clúster.

Bibliografía