Funk-lab/admin/ops/cluster.md
ALI YESILKAYA 470c69881c
chore(gpu-01): retire les serveurs llama CPU system/monitor/dev (inutilisés) (#31)
Trois instances llama-server CPU manuelles (hors Ansible) tournaient sur gpu-01
sans servir : déjà orphelines de LiteLLM (alias absents de config.yaml, d'où le
bruit "Invalid model name"). Suppression complète :

gpu-01 (opérationnel, déjà fait) :
- systemctl disable --now + rm des units llama-server-{system,monitor,dev}
- ports firewall 1235/1236/1237 fermés

Repo :
- monitoring : scrape jobs (values.yaml) + alertes LlamaServer{System,Monitor}Down
  (alerts-ai.yaml) retirés → plus de "target down"/alertes fantômes ; panneaux de
  statut dashboard-infrastructure recyclés (system→llama-embed, monitor supprimé).
- docs admin/ + hermes-skills (souls funk-ai/brain, SKILL agent-delegation) mises à
  jour : inventaire modèles, profils Hermès system/monitor sans backend (à repointer
  sur qwen3-8b), litellm, ops, monitoring.

Les profils Hermès system/monitor existent toujours mais sans backend dédié.
Dashboards Grafana dashboard-ai (panneaux graphiques CPU) laissés tels quels
(cosmétique, séries vides, aucune alerte).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 13:25:50 +02:00

5.8 KiB

Gestion du cluster Funk

Script central : /usr/local/bin/funk-cluster sur storage-01. Fonctions bash configurées dans ~/.bashrc du poste perso.


Commandes

# Depuis le poste perso
funk-status          # État complet (storage-01 + gpu-01 + k8s)
funk-start           # Démarre gpu-01 (WOL) + tous les services
funk-start --k8s     # Idem + démarre le cluster k8s (compute-01/02/03)
funk-stop            # Arrête services + gpu-01 + storage-01
funk-stop --k8s      # Idem + éteint le cluster k8s avant

funk-stop éteint storage-01 en dernier — la connexion SSH se coupe, c'est normal.


Procédures d'utilisation

Allumer le homelab (sans k8s)

  1. Allumer storage-01 et gpu-01 manuellement (bouton physique)
  2. Attendre ~30s que storage-01 boot
  3. Depuis le poste perso :
    funk-start
    
  4. Le script démarre les services et attend que gpu-01 soit prêt (~3 min pour les modèles LLM)
  5. Vérifier l'état :
    funk-status
    

Allumer le homelab complet (avec k8s)

  1. Allumer storage-01 et gpu-01 manuellement
  2. Lancer le démarrage :
    funk-start --k8s
    
  3. Le script envoie des paquets WOL aux compute nodes — si WOL non configuré dans le BIOS, allumer compute-01/02/03 manuellement pendant l'attente ping (~30s de fenêtre)
  4. Le script attend automatiquement que les nœuds k8s soient Ready (3 min max)

WOL sur les compute nodes nécessite Wake on LAN activé dans le BIOS (Gigabyte : Advanced → ACPI Settings). Tant que ce n'est pas configuré, allumage manuel requis.

Éteindre le homelab (sans k8s)

funk-stop

La connexion SSH se coupe à la fin (storage-01 s'éteint lui-même). C'est normal.

Éteindre le homelab complet (avec k8s)

funk-stop --k8s

Ordre d'arrêt : hermes-agent + litellm → cordon+drain compute-02/03 → drain compute-01 → vérif NFS → talosctl shutdown → gpu-01 → qdrant + postgresql → storage-01. Ordre de démarrage : storage-01 déjà up → gpu-01 (WOL) → compute-01/02/03 (WOL) → uncordon → ArgoCD up → workloads.


Ce que fait chaque commande

funk-status

Vérifie dans l'ordre :

  • Services storage-01 : postgresql-16, qdrant, litellm, hermes-agent
  • Santé : PostgreSQL (connexion réelle), Qdrant (collections), LiteLLM (modèles), Hermes, NFS export
  • gpu-01 : ping, NFS /mnt/models, llama-server GPU (:1234), embed nomic CPU (:1238)
  • Cluster k8s : ping compute-01/02/03, kubectl get nodes Ready

funk-start [--k8s]

  1. Démarre postgresql-16, qdrant, litellm, hermes-agent sur storage-01
  2. Envoie un paquet Wake-on-LAN à gpu-01 si éteint, attend le ping + SSH
  3. Attend le montage NFS /mnt/models sur gpu-01
  4. Attend le chargement du modèle GPU (jusqu'à 4 min)
  5. Attend les modèles CPU (jusqu'à 2 min)
  6. --k8s :
    • Envoie WOL aux 3 nœuds, attend ping, attend nœuds Ready (3 min max)
    • Uncordon des nœuds s'ils sont SchedulingDisabled (état résiduel après funk-stop --k8s)
    • Attend qu'ArgoCD soit Running (signe que le GitOps redémarre les workloads)

funk-stop [--k8s]

  1. Arrête hermes-agent et litellm sur storage-01 (timeout 10s + SIGKILL si besoin)
  2. --k8s — arrêt propre du cluster en 6 étapes :
    • Cordon des 3 nœuds → plus aucun pod ne peut être replanifié
    • Drain compute-02 → SIGTERM aux pods, 30s grace period, PVCs NFS démontés
    • Drain compute-03 → idem (Prometheus, Grafana flushent leur WAL/SQLite)
    • Drain compute-01 → ArgoCD, kube-state-metrics, etc.
    • Vérification NFS → confirme que plus aucune session NFS active depuis k8s
    • talosctl shutdown → halt propre (plus rien ne tourne, rien n'écrit)
  3. Éteint gpu-01 (shutdown -h now via SSH)
  4. Arrête qdrant et postgresql-16 sur storage-01
  5. Éteint storage-01 (shutdown -h now) — connexion SSH coupée

GitOps

Modifier k8s/git push → ArgoCD applique (~3 min). UI : http://argocd.lab.local — doc complète : k8s/argocd.md


Machines et MACs

Machine IP MAC Rôle
storage-01 192.168.10.1 / 192.168.1.200 Passerelle + services IA
gpu-01 192.168.10.20 a8:a1:59:72:a6:11 LLM GPU + CPU
compute-01 192.168.10.11 6c:4b:90:82:8e:47 k8s control-plane
compute-02 192.168.10.12 6c:4b:90:cf:7f:c5 k8s worker
compute-03 192.168.10.13 6c:4b:90:b6:49:20 k8s worker

Fonctions bash (~/.bashrc poste perso)

funk-start() { ssh storage-01 "sudo /usr/local/bin/funk-cluster start $*"; }
funk-stop()  { ssh storage-01 "sudo /usr/local/bin/funk-cluster stop $*"; }
alias funk-status='ssh storage-01 "sudo /usr/local/bin/funk-cluster status"'
alias funk-pull='ssh storage-01 "sudo -u ansible git -C /srv/data/lab pull"'

Les fonctions bash transmettent les arguments — funk-start --k8s et funk-stop --k8s fonctionnent directement.


Déploiement du script

Le script est versionné dans ansible/roles/litellm/files/funk-cluster. Pour le redéployer sur storage-01 :

scp ansible/roles/litellm/files/funk-cluster s01:/tmp/
ssh s01 "sudo cp /tmp/funk-cluster /usr/local/bin/funk-cluster && sudo chmod +x /usr/local/bin/funk-cluster"

Points d'attention

Sujet Détail
Ordre d'arrêt Hermes/LiteLLM → cordon+drain k8s (optionnel) → gpu-01 → Qdrant/PG → storage-01
Ordre de démarrage storage-01 (toujours déjà up) → gpu-01 → k8s (optionnel)
WOL compute nodes BIOS non configuré → allumer manuellement pendant l'attente ping de funk-start --k8s
LiteLLM bloquant systemctl stop --timeout=10 + SIGKILL automatique si timeout
talosctl path /home/ansible/.config/talos/config requis explicitement (sudo change HOME)
SSH coupée à l'arrêt Normal — storage-01 s'éteint lui-même en fin de funk-stop