---
titulo: "Práctica P3c: Laboratorio de despliegue en clúster y gestor Slurm"
modulo: M3
ec: EC3
contenido: "3.6, 3.7"
semanas: "9"
horas: 4
tipo: "Laboratorio de infraestructura"
asignatura: "Sistemas Paralelos"
sigla: TEL-420
docente: "Ing. Elias Cassal Baldiviezo"
institucion: "Universidad Autónoma Juan Misael Saracho — Facultad de Ciencias Integradas de Yacuiba / F.I.R.N.T."
---

# P3c · Laboratorio de despliegue de clúster virtualizado y orquestación con Slurm

**Contenido del programa:** §20.3 · contenidos 3.6 y 3.7  
**Horas de laboratorio:** 4 · **Modalidad:** equipos de 2 a 3 estudiantes  

---

## 1. Objetivo

Configurar, desplegar y validar un entorno de clúster de cómputo paralelo virtualizado o contenerizado sobre las estaciones de trabajo Dell OptiPlex 7010 (32 GB RAM) del laboratorio, integrando el gestor de colas y recursos Slurm (`slurmctld` y `slurmd`), almacenamiento compartido mediante NFS y el entorno de ejecución OpenMPI, ejecutando y monitorizando trabajos por lotes a través de scripts `sbatch`.

---

## 2. Requisitos previos y arquitectura a desplegar

- Docker y Docker Compose instalados en el equipo anfitrión.
- Conocimientos básicos de administración Linux (usuarios, permisos, claves SSH).
- La topología a levantar consiste en:
  - 1 contenedor **Maestro (`slurm-master`)**: Ejecuta `slurmctld`, servidor NFS, y SSH server.
  - 2 o 3 contenedores **Nodos de cómputo (`slurm-worker-1`, `slurm-worker-2`)**: Ejecutan `slurmd`, cliente NFS montado en `/shared/hpc`, y entorno OpenMPI.

---

## 3. Guía paso a paso

### Paso 1: Configuración de Docker Compose y red interna
Crear el archivo `docker-compose.yml` que declare la subred `172.20.0.0/16`, asigne nombres fijos y configure volúmenes persistentes:

```yaml
version: '3.8'
services:
  master:
    image: hpc-cluster-base:latest
    hostname: slurm-master
    container_name: slurm-master
    networks:
      hpc_net:
        ipv4_address: 172.20.0.10
    volumes:
      - shared_data:/shared/hpc
    command: ["/usr/sbin/slurmctld", "-D"]

  worker1:
    image: hpc-cluster-base:latest
    hostname: worker1
    container_name: worker1
    networks:
      hpc_net:
        ipv4_address: 172.20.0.11
    volumes:
      - shared_data:/shared/hpc
    command: ["/usr/sbin/slurmd", "-D"]

networks:
  hpc_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

volumes:
  shared_data:
```

### Paso 2: Configuración de Slurm (`slurm.conf`)
Verificar los parámetros esenciales de partición:
- `ClusterName=cluster_uajms`
- `ControlMachine=slurm-master`
- `NodeName=worker[1-2] CPUs=4 State=UNKNOWN`
- `PartitionName=normal Nodes=worker[1-2] Default=YES MaxTime=INFINITE State=UP`

### Paso 3: Validación del clúster
1. Iniciar el clúster con `docker compose up -d`.
2. Ingresar al nodo maestro: `docker exec -it slurm-master bash`.
3. Consultar el estado de los nodos con `sinfo`. Ambos trabajadores deben figurar en estado `idle`.
4. Compilar un programa MPI en `/shared/hpc`: `mpicc /shared/hpc/montecarlo_mpi.c -o /shared/hpc/montecarlo_mpi`.
5. Crear y enviar un script de prueba `sbatch`:
   ```bash
   sbatch --nodes=2 --ntasks-per-node=2 /shared/hpc/job_prueba.sh
   ```
6. Supervisar la cola con `squeue` y verificar que la salida se genera en el log compartido.

---

## 4. Entregable
Informe técnico en PDF según la [Rúbrica de Informe de Clúster](file:///home/eliasdev/sistemas_paralelos/10-modulos/M3-mpi-custeres/rubrica-informe-cluster.md) con capturas de `sinfo`, `squeue` y salida de `srun` distribuida.
