Dimensionnement des VMs
Ce document détaille l'allocation des ressources pour chaque VM du homelab.
Capacité mémoire par nœud
Les trois nœuds ne sont pas symétriques en RAM — pve01 est volontairement moins doté :
| Nœud | RAM physique | Rôle | Budget VMs | Réserve Proxmox |
|---|---|---|---|---|
| pve01 | 16 Go | Control Plane | 12 Go | 4 Go (25 %) |
| pve02 | 32 Go | Data / Security / Observability | 16 Go | 16 Go (50 %) |
| pve03 | 32 Go | Kubernetes Platform | 16 Go | 16 Go (50 %) |
| Total | 80 Go | 44 Go | 36 Go (45 %) |
La réserve importante sur pve02 et pve03 (50 %) permet d'absorber les pics mémoire sans swap et de provisionner des VMs supplémentaires pour les expérimentations.
pve01 — Control Plane (16 Go RAM)
| ID | VM | vCPU | RAM | Stockage | IP |
|---|---|---|---|---|---|
| 101 | traefik |
1 | 2 Go | 20 Go | 192.168.1.20 |
| 102 | gitlab |
4 | 8 Go | 200 Go | 192.168.1.21 |
| 103 | vault |
1 | 2 Go | 20 Go | 192.168.1.22 |
| Alloué | 6/16 | 12 Go | 240 Go / 1 To |
Justification : GitLab CE avec runners a besoin de 8 Go pour être stable. Traefik et Vault tiennent dans 2 Go chacun. 12 Go alloués sur 16, il reste 4 Go pour Proxmox — suffisant.
Stockage : 200 Go pour GitLab incluent les artefacts de pipeline, le registry container intégré et les logs. 20 Go pour Traefik et Vault sont confortables (OS + logs).
pve02 — Data / Security / Observability (32 Go RAM)
| ID | VM | vCPU | RAM | Stockage | IP |
|---|---|---|---|---|---|
| 201 | harbor |
2 | 4 Go | 80 Go | 192.168.1.30 |
| 202 | monitoring |
2 | 4 Go | 100 Go | 192.168.1.31 |
| 203 | keycloak |
2 | 4 Go | 40 Go | 192.168.1.32 |
| 204 | defectdojo |
2 | 4 Go | 50 Go | 192.168.1.33 |
| Alloué | 8/16 | 16 Go | 270 Go / 1 To |
Justification : Avec 32 Go de RAM physique, chaque VM peut avoir 4 Go sans contrainte. Harbor héberge PostgreSQL + Redis, Monitoring cumule Prometheus/Grafana/Loki, Keycloak fait tourner une JVM, DefectDojo empile Django + Celery + PostgreSQL + Redis. 4 Go par VM est le minimum confortable pour l'ensemble.
Stockage : Harbor 80 Go (quelques images Python suffisent), Monitoring 100 Go (métriques 30 jours + logs 2 jours), Keycloak 40 Go (base utilisateurs légère), DefectDojo 50 Go (rapports SAST/DAST).
pve03 — Kubernetes Platform (32 Go RAM)
| ID | VM | vCPU | RAM | Stockage | IP |
|---|---|---|---|---|---|
| 301 | k3s-master |
2 | 4 Go | 40 Go | 192.168.1.40 |
| 302 | k3s-worker01 |
3 | 6 Go | 100 Go | 192.168.1.41 |
| 303 | k3s-worker02 |
3 | 6 Go | 100 Go | 192.168.1.42 |
| Alloué | 8/16 | 16 Go | 240 Go / 1 To |
Justification : Le master k3s avec SQLite tient dans 4 Go (le surdimensionnement volontaire permet d'ajouter etcd si besoin d'évoluer). Les workers à 6 Go absorbent les builds Docker du GitLab Runner (worker01) et les applications Python avec leurs dépendances (worker02).
Stockage : 100 Go par worker pour images Docker, caches de build et données applicatives. Le master n'a besoin que de ses manifests et logs (40 Go).
Ratios d'overcommit
| Ressource | Ratio | Calcul |
|---|---|---|
| vCPU | ~1:1 | 22 vCPU alloués pour 48 threads physiques. Aucune contention. |
| RAM | 1:1 | Pas d'overcommit. La réserve de 36 Go est là pour les pics. |
| Stockage | — | Thin provisioning (allocation croissante). L'espace réel consommé sera très inférieur au provisionné. |
Swap
Désactivé sur toutes les VMs. Une VM en swap devient inutilisable (I/O bloquée sur le SSD). Le OOM killer est préférable — il tue le processus problématique, et Prometheus + alerting prévient l'administrateur.
Provisionnement
Les VMs sont créées par OpenTofu (provider telmate/proxmox) avec :
- Stockage en thin provisioning (fichier .qcow2)
- Configuration réseau et clé SSH injectées via cloud-init
- Template Debian 13 préconfiguré (créé une fois via Packer ou manuellement)