SPB Git
3.9 KB

# maclustr-dispatch — mld

Orchestrateur de déploiement du cluster MacLustr. Il tourne sur la passerelle M1M32 et déploie chaque application sur le nœud le plus efficient du cluster, via le LAN (192.168.2.x, clé SSH maclustr-m1m32 autorisée sur tous les nœuds).

text
laptop ──ssh──▶ M1M32 (passerelle : spbgit + mld + staging ~/dispatch/stage)
                  │  scan live (RAM libre, charge, disque, ports, runtimes)
                  │  choix du nœud (score) → rsync LAN → PM2/launchd → ngrok → healthcheck → registre
                  ▼
        M3U96a · M3U96b · M2U64 · M4M64a · M4M64b · M4M36 · M2M32 · …

# Depuis le laptop

~/Desktop/cluster-skill/mld <commande> relaie à la passerelle et rapatrie le registre (cluster-skill/cluster-registry.json).

Commande Effet
mld scan / mld nodes sonde (ou relit) ressources + runtimes des nœuds
mld apps / mld show <app> manifestes et emplacement courant
mld pick <app> · mld pick --ram 4 --runtime node classement des nœuds pour une app / un besoin
mld plan [apps…] plan de placement global (glouton, projection des ressources)
mld stage <dir-local> <app> pousse un dossier du laptop dans le staging de la passerelle
mld deploy <app> [--node X] staging → nœud choisi (auto sans --node), démarrage, santé, registre
mld move <app> [--to X] [--from Y] migration : pré-copie à chaud, arrêt, delta final, déploiement, santé, retrait (rollback auto)
mld stop/start/restart <app> · mld logs <app> · mld health <app> cycle de vie
mld status [--live] · mld registry registre (~/dispatch/registry.json sur M1M32)
mld retire <app> arrête et efface la copie du nœud
mld prepare <nœud> [--ka-helpers] installe node/pnpm/pm2/ngrok/python via Homebrew, config ngrok, pm2 startup, marqueur ; --ka-helpers = pousseur Ka + alias gitsrv + clé autorisée sur la passerelle
mld bootstrap <nœud> Xcode CLT + Homebrew sur un Mac vierge (sudo NOPASSWD temporaire)
mld import <nœud> brouillons de manifestes depuis les PM2 vivants d'un nœud (~/dispatch/apps/_drafts/)

# Manifestes (~/dispatch/apps/<app>.json, mode 600)

Un manifeste décrit comment tourne une app : dir (même chemin absolu sur tous les nœuds), processes (PM2 : script, args, interpreter, cwd, env, cron_restart…), ngrok (domaine réservé → processus <app>-ngrok), launchd (plists générés), requires (runtimes, RAM, ports), placement (pin, prefer, avoid + raison), sync_excludes, extra_paths, env_overrides (réécriture de .env au déploiement), hooks.post_sync / post_start, ka_repo (inscription au pousseur). Gabarits : {{HOME}}, {{NODE}}, {{LAN_IP}}, {{IP:<alias>}}.

# Scoring

0.45·RAM libre après placement + 0.25·cœurs idle + 0.10·disque + 0.15·cœurs − 0.04·apps hébergées (+0.15 prefer, +0.05 si déjà sur ce nœud). Inéligible : hors ligne, rôle gateway (sauf épingle), runtime manquant, RAM libre < besoin + 2 Go, disque, port occupé (hors nœud d'origine).

# Ajouter un nœud

  1. Activer Session à distance sur le Mac, autoriser la clé de la passerelle (~/.ssh/id_ed25519.pub de M1M32) et celle du laptop dans ~/.ssh/authorized_keys.
  2. echo <alias> > ~/.maclustr-node sur le nœud ; ajouter l'alias dans mld/config.py (NODES).
  3. mld discover → mld bootstrap <alias> (si Mac vierge) → mld prepare <alias>.

# Fichiers

  • mld/config.py inventaire statique, rôles, chemins, détection des runtimes
  • mld/nodes.py découverte LAN, sonde · mld/picker.py score/plan · mld/deploy.py fetch/deploy/move/health
  • mld/render.py ecosystem PM2 + plists · mld/prepare.py runtimes/bootstrap/ka-helpers · mld/importer.py
  • assets/ pousseur Ka (script + plist)

Pas de dépendance : Python 3 système (3.9) + ssh/rsync (GNU rsync via Homebrew sur la passerelle).

Files · 29a50362078452d2dd01b6b79868199cb58a3d0f
Menu

Theme