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.
Kubernetes le ofrece amplia funcionalidad, a saber:
Figura 1. Evolución histórica de la virtualización
Figura 2. Componentes de un cluster Kubernetes
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
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
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
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
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.
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.