Contenedor: nova_container (Local Distribuido en Redes Xubuntu)

 

nova_container: Manual 


1. Introducción

Este manual detalla paso a paso cómo configurar un sistema distribuido en Xubuntu utilizando Docker y contenedores LXC. Se explicará cómo compartir CPU y GPU entre varias máquinas, configurar redes internas, y administrar aplicaciones dentro del contenedor.


2. Instalación de Docker y Dependencias

En todas las máquinas de la red:

  1. Actualizar paquetes:
    sudo apt update && sudo apt upgrade -y
    
  2. Instalar dependencias necesarias:
    sudo apt install -y curl ca-certificates gnupg lsb-release
    
  3. Agregar clave GPG y repositorio oficial de Docker:
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  4. Instalar Docker y sus componentes:
    sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
  5. Añadir el usuario al grupo Docker para evitar usar sudo constantemente:
    sudo usermod -aG docker $USER
    newgrp docker
    
  6. Verificar que Docker funciona:
    docker run hello-world
    

3. Configuración de la Red Distribuida

Docker crea automáticamente redes internas, pero configuraremos una personalizada para interconectar las máquinas:

  1. En la máquina principal, crear una red Docker:
    docker network create \
        --driver=overlay \
        --attachable \
        --subnet=192.168.100.0/24 \
        nova_network
    
  2. Verificar la red:
    docker network ls
    
  3. En las demás máquinas, unirse a la red:
    docker network connect nova_network $(hostname)
    

4. Configuración del Contenedor Principal

Crear y ejecutar un contenedor con acceso a la GPU y CPU compartida

  1. En la máquina principal, descargar la imagen base:
    docker pull nvidia/cuda:12.1.1-runtime-ubuntu20.04
    
  2. Ejecutar un contenedor con acceso a la GPU:
    docker run -dit --name nova_container --network=nova_network \
        --gpus all -v /dev:/dev --privileged \
        -p 8888:8888 -p 5000:5000 \
        nvidia/cuda:12.1.1-runtime-ubuntu20.04 bash
    
  3. Acceder al contenedor:
    docker exec -it nova_container bash
    

5. Compartir Recursos de Otras Máquinas

a) Compartir CPU con otras máquinas

  1. En las máquinas esclavas, instalar Docker y habilitar SSH:
    sudo apt install -y openssh-server
    sudo systemctl enable --now ssh
    
  2. Agregar cada nodo como Worker en el Swarm:
    docker swarm join --token <TOKEN_GENERADO> <IP_PRINCIPAL>:2377
    
  3. Verificar los nodos activos:
    docker node ls
    

b) Compartir GPU de otros nodos (Si tienen GPU Nvidia)

  1. Instalar drivers Nvidia y el runtime en los nodos esclavos:
    sudo apt install -y nvidia-driver nvidia-container-toolkit
    
  2. Ejecutar en cada nodo esclavo para verificar la GPU:
    nvidia-smi
    
  3. Agregar la GPU compartida a un contenedor desde otro nodo:
    docker run --rm --gpus all nvidia/cuda:12.1.1-runtime-ubuntu20.04 nvidia-smi
    

6. Administración de Contenedores y Aplicaciones

a) Ejecutar una aplicación en el contenedor

Ejemplo: Levantar Jupyter Notebook dentro del contenedor con acceso a GPU y CPU distribuida.

docker exec -it nova_container bash -c "pip install jupyter && jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root"

Acceder desde el navegador: http://<IP_DEL_CONTENEDOR>:8888

b) Guardar cambios en una imagen nueva

Para no perder configuraciones dentro del contenedor:

docker commit nova_container nova_image:v1

c) Iniciar y detener el contenedor

docker start nova_container
docker stop nova_container

d) Eliminar contenedor e imagen

docker rm nova_container
docker rmi nova_image:v1

7. Interfaz Gráfica para Docker (Opcional)

Se puede usar Portainer para administrar los contenedores desde un navegador:

  1. Instalar Portainer:
    docker volume create portainer_data
    docker run -d -p 9000:9000 -p 8000:8000 --name=portainer --restart=always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v portainer_data:/data portainer/portainer-ce
    
  2. Acceder desde el navegador: http://<IP_DEL_SERVIDOR>:9000

8. Conclusión

Con este manual, hemos configurado un entorno distribuido en Xubuntu donde los recursos de CPU y GPU pueden ser compartidos entre varias máquinas mediante Docker y Swarm. Además, hemos aprendido a administrar contenedores y ejecutar aplicaciones dentro de ellos. Ahora puedes correr modelos y aplicaciones en un entorno distribuido y escalable.

Comentarios

Entradas populares