Hace unas semanas estuve trabajando en un repositorio para automatizar la instalación de un clúster de Kubernetes utilizando Ansible. El objetivo principal es desplegar máquinas virtuales en dos computadoras (una Mac y una Windows) que funcionen como nodos del clúster.
El proyecto incluye todos los archivos, scripts y pasos necesarios para configurar el clúster en un entorno homelab, ideal para practicar, realizar pruebas y experimentar. Gracias a Ansible, se evita ejecutar manualmente cada paso en cada máquina virtual, haciendo el proceso más rápido, eficiente y reproducible.
¿Qué es Ansible?
Ansible es una herramienta de automatización que permite ejecutar comandos y tareas en múltiples servidores de forma simultánea. Es especialmente útil para desplegar clústeres de Kubernetes en entornos bare metal o virtualizados.
¿Qué es Kubernetes?
Kubernetes es un orquestador de contenedores desarrollado originalmente por Google. Permite administrar, escalar y mantener aplicaciones basadas en contenedores de manera eficiente.
Requisitos
Para este proyecto, necesitarás al menos una máquina host capaz de virtualizar sistemas operativos. Para este ejemplo cada nodo requerirá 2 GB de RAM y 2 vCPU.
En mi caso utilicé dos equipos que están en la misma red:
- MacOS (chip Intel): Virtualiza el nodo controlplane con VirtualBox
- Windows: Virtualiza los nodos worker con Hyper-V
En total, se configurarán tres nodos, todos con Debian como sistema operativo.
Pasos:
1. Clonar el repositorio
El repositorio se encuentra disponible en GitHub
git clone https://github.com/dalthonmh/k8s-homelab.git
2. Instalación de virtualizadores
Instala los virtualizadores necesarios y descarga la imagen ISO de Debian:
- VirtualBox: Sigue las instrucciones en
/virtualbox/README.md. - Hyper-V: HabilÃtalo siguiendo
/hyperv/README.md. - Descargar iso de Debian
3. Instalación del primer nodo en macOS
Primero se instalará el nodo donde se alojará el controlplane, para esto ejecutaremos los pasos descritos en el script /virtualbox/create-vm.sh
# Los comandos principales son:
VBoxManage createvm --name "spacex" --ostype "Debian_64" --register
VBoxManage startvm "spacex" --type gui
# Delete the virtual machine
VBoxManage controlvm "spacex" poweroff
VBoxManage unregistervm "spacex" --delete
4. Instalación de nodos en Windows
Instalación de los nodos worker, en Windows ejecutaremos los pasos descritos en /hyperv/create-vm.sh.ps1
# Los comandos principales son:
New-VM -Name "newglenn" `
-MemoryStartupBytes 2GB `
-Generation 2 `
-NewVHDPath "C:\Hyper-V\newglenn.vhdx" `
-NewVHDSizeBytes 20GB `
-SwitchName "Default Switch"
# Delete the virtual machine
Remove-VM -Name "newglenn" -Force
5. Levantar servidor local para el archivo preseed.cfg
El archivo preseed.cfg automatiza la instalación de Debian. Levanta un servidor local con Python para servir este archivo:
cd debian
python3 -m http.server 8090
En el menú de instalación de Debian, seleccionamos:
- Advanced options
- Automated install
- Escribimos la ruta del archivo pressed.cfg.
sudo ./set-static-ip.sh 192.168.0.200 spacex superadmin
6. Instalación de Ansible
Instala Ansible en macOS con el siguiente comando:
# En macOS
brew install ansible
ansible --version
7. Configurar acceso SSH
Configura el acceso SSH sin contraseña desde la máquina host hacia los nodos:
ssh-keygen -t ed25519 -C "ansible@mac"
id_ansible_mac_debian.pub
ssh-copy-id -i ~/.ssh/id_ansible_mac_debian.pub superadmin@192.168.0.200
ssh-copy-id -i ~/.ssh/id_ansible_mac_debian.pub superadmin@192.168.0.201
ssh-copy-id -i ~/.ssh/id_ansible_mac_debian.pub superadmin@192.168.0.202
Configura el archivo ~/.ssh/config:
# ----- Local Virtual Machines -----
Host 192.168.0.200
User superadmin
IdentityFile ~/.ssh/id_ansible_mac_debian
IdentitiesOnly yes
Host 192.168.0.201
User superadmin
IdentityFile ~/.ssh/id_ansible_mac_debian
IdentitiesOnly yes
Host 192.168.0.202
User superadmin
IdentityFile ~/.ssh/id_ansible_mac_debian
IdentitiesOnly yes
8. Configuración de Ansible
Configuramos el hosts.ini
[master]
debian0 ansible_host=192.168.0.200 ansible_user=superadmin
[workers]
debian1 ansible_host=192.168.0.201 ansible_user=superadmin
debian2 ansible_host=192.168.0.202 ansible_user=superadmin
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Ejecuta el playbook para instalar Kubernetes:
ansible-playbook -i hosts.ini kube-play.yml
9. Ejecución de scripts post-instalación
Dentro del controlplane ejecutamos los scripts:
9.1. Script para habilitar acceso ssh desde el controlplane hacia los nodos worker:
./setup-ssh.sh
9.2. Script para iniciar el cluster con kubeadm init:
sudo ./post-install.sh
¡Listo! ya podemos utilizar nuestro cluster.