Commit graph

94 commits

Author SHA1 Message Date
alkatrazz
d23d464372 fix: monitoring — Ingress Prometheus/AlertManager, paths + pathType requis
Le chart kube-prometheus-stack nécessite paths:[/] et pathType:Prefix
contrairement au sous-chart Grafana qui a des defaults.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:27:01 +02:00
alkatrazz
7fa790c8d3 feat: monitoring — Ingress Prometheus et AlertManager (traefik, lab.local)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:23:31 +02:00
alkatrazz
c9fd0d2812 feat: funk-cluster start --k8s — uncordon + attente ArgoCD
Après funk-stop --k8s, les nœuds reviennent Ready mais SchedulingDisabled
(cordon stocké dans etcd). Sans uncordon, tous les pods restent Pending.

Ajouts dans funk-start --k8s :
- kubectl uncordon sur les nœuds SchedulingDisabled uniquement (idempotent)
- Attente ArgoCD Running (jusqu'à 3 min) — confirme que le GitOps est opérationnel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:22:12 +02:00
alkatrazz
a631a4ab6c feat: funk-cluster — arrêt k8s propre avec drain + vérification NFS
Remplace le talosctl shutdown immédiat par une séquence en 6 étapes :
1. kubectl cordon tous les nœuds (empêche rescheduling)
2. kubectl drain compute-02/03 (SIGTERM pods, 30s grace, PVCs NFS libérés)
3. kubectl drain compute-01 (ArgoCD, system pods)
4. Vérification NFS : ss confirme plus de sessions :2049 actives
5. talosctl shutdown (halt propre, plus rien ne tourne)
6. Attente extinction ping

Prometheus et Grafana ont 30s pour flusher WAL/SQLite avant terminaison.
storage-01 (NFS server) est éteint en dernier une fois la vérification passée.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:20:14 +02:00
alkatrazz
8b6f906a89 docs: kubernetes — section NFS provisioner complète (install, usage, admin, pièges)
Ajout section 16 (NFS provisioner) dans le guide d'installation k8s :
- Architecture du provisionnement dynamique (StorageClass → NFS RAID5)
- Prérequis storage-01, fichiers de config, pattern App-of-Apps
- Utilisation dans les pods (PVC, Deployment, Grafana, Prometheus)
- Section admin : diagnostics, PVC manuels, cleanup, re-sync ArgoCD

Ajout dans section admin courante : commandes de gestion NFS, tableau
diagnostics PVC Pending, procédure test PVC manuel.

Ajout dans pièges : StorageClass not found, SharedResourceWarning (boucle
nom ArgoCD), StatefulSet volumeClaimTemplate immutable, PodSecurity baseline.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:10:26 +02:00
alkatrazz
f42c6c17dc fix: nfs-provisioner helmrelease — renommer Application interne pour éviter boucle ArgoCD
helmrelease.yaml avait le même nom que l'Application parente (nfs-provisioner).
ArgoCD gérait la ressource en double → SharedResourceWarning + OutOfSync.
Renommé en nfs-subdir-external-provisioner, identique au pattern monitoring.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:04:23 +02:00
alkatrazz
f5073081ef docs: monitoring — persistance NFS active (Prometheus 20Gi + Grafana 2Gi)
Mise à jour admin/monitoring.md : section persistance ajoutée avec
répertoires NFS réels sur RAID5, avertissement "désactivée" retiré.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:58:28 +02:00
alkatrazz
b7dde7c5ee fix: monitoring namespace — PodSecurity privileged pour node-exporter
node-exporter requiert hostNetwork, hostPID et hostPath — bloqué par
la policy baseline:latest de Talos. Label privileged appliqué.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:46:54 +02:00
alkatrazz
655ca4dc8c feat: NFS provisioner + persistance Prometheus et Grafana
- k8s/infra/nfs-provisioner/ : nfs-subdir-external-provisioner v4.0.18
  StorageClass "nfs" (default), ReclaimPolicy=Retain, server=192.168.10.1
  path=/srv/data/nfs/k8s (export RAID5 déjà existant)
- k8s/apps-of-apps/apps/nfs-provisioner.yaml : Application ArgoCD
- monitoring/values.yaml : persistance activée
  Prometheus: 20Gi sur nfs, Grafana: 2Gi sur nfs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:22:05 +02:00
alkatrazz
727d7351eb docs: ArgoCD + monitoring — documentation complète
- admin/argocd.md (NEW) : installation bootstrap, principe GitOps, structure
  k8s/, pattern App of Apps, déployer une app/chart Helm, commandes utiles,
  dépannage (OutOfSync, SSH key, field schema, StatefulSet PVC)
- admin/monitoring.md (NEW) : accès+comptes Grafana/Prometheus/AlertManager,
  architecture scrape, node_exporter storage-01+gpu-01, ROCm sysfs collector,
  llama-server /metrics, webhook AlertManager→Hermes, admin Grafana+Prometheus,
  dashboards recommandés, points d'attention (persistence, RAM, Talos)
- admin/cluster.md : section GitOps ArgoCD ajoutée
- admin/README.md : index mis à jour avec argocd.md et monitoring.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:04:39 +02:00
alkatrazz
92a882aa94 feat: monitoring — node_exporter + ROCm sysfs collector + alertmanager webhook
Ansible roles:
- node_exporter : déploie node_exporter v1.9.1 sur storage-01 et gpu-01
  avec textfile collector + services systemd. ROCm activé sur gpu-01 uniquement
  via group_vars. Collecte métriques GPU via sysfs (temp, VRAM, utilisation)
  — pas de dépendance rocm-smi (remplacé dans ROCm 7.x)
- alertmanager_webhook : service Python sur storage-01 (:9093/webhook)
  reçoit alertes AlertManager et les route vers ask-agent monitor → Hermes

Playbooks: node_exporter + alertmanager_webhook ajoutés à storage-01 et gpu-01

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:01:03 +02:00
alkatrazz
857351bcf9 fix: monitoring — supprimer storageSpec (emptyDir implicite)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:39:55 +02:00
alkatrazz
36ca8f0179 fix: monitoring — emptyDir pour Prometheus (pas de StorageClass)
Longhorn à installer ensuite pour la persistance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:37:33 +02:00
alkatrazz
7887341ad7 fix: helmrelease monitoring — multi-source correct (sources uniquement, valueFiles)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:34:11 +02:00
alkatrazz
7409c6fa1c fix: ArgoCD — SSH URL repo + clé SSH pour auth GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:31:00 +02:00
alkatrazz
d7b33bb34a feat: bootstrap ArgoCD + structure GitOps k8s
- k8s/argocd-bootstrap/values.yaml : ArgoCD Helm values (ingress Traefik,
  resources limités, dex désactivé)
- k8s/apps-of-apps/ : root Application + monitoring Application
- k8s/infra/monitoring/ : kube-prometheus-stack v85.0.2 (Grafana, Prometheus,
  AlertManager, node-exporter daemonset)
  - Scrape additionnels : storage-01:9100, gpu-01:9100 (node), :9101 (ROCm),
    llama-server :1234/:1236/:1237
  - AlertManager webhook → http://192.168.10.1:9093/webhook (Hermes monitor)
  - Ressources dimensionnées pour compute 8GB
  - kubeEtcd/Scheduler/ControllerManager/Proxy désactivés (Talos)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:26:49 +02:00
alkatrazz
00d10234f9 feat: amélioration routing ask-agent + identité SOUL.md profils
- SOUL.md funk-ai : tableaux détaillés system vs monitor (quand appeler
  chaque agent avec exemples concrets), section delegate_task vs ask-agent
- SOUL.md system : rôle clarifié (traitement texte, PAS analyse santé),
  format de réponse explicite (verdict direct, pas de préambule)
- hermes-agent.service : SupplementaryGroups=systemd-journal pour que
  journalctl fonctionne sans sudo depuis le Terminal de Hermes
- Ansible common : admin_user (alkatrazz) ajouté au groupe systemd-journal
- admin/hermes.md : section SOUL.md complète (déploiement, contenu, profils)
- admin/ask-agent.md : distinction system vs monitor documentée avec
  tableau et exemples, note /no_think, monitor réservé supervision

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:59:48 +02:00
alkatrazz
ed963180f2 fix: SOUL.md funk-ai — journalctl --output=cat + no sudo + no skill_manage
3 corrections suite à la session TUI :
- Interdire sudo journalctl (hermes a accès direct, sudo = timeout + ANSI)
- Forcer --output=cat sur journalctl pour éviter les codes couleur ANSI
- Clarifier que ask-agent s'appelle via Terminal, jamais via skill_manage
- Règle absolue : ask-agent reçoit du texte, jamais des commandes shell

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:05:34 +02:00
alkatrazz
37a2afe66e feat: SOUL.md pour les 4 profils Hermes (funk-ai, system, monitor, brain)
- funk-ai : identité complète — environnement cluster, machines, services,
  SSH hermes@gpu-01, kubectl, outils ask-agent avec règles d'usage et
  erreurs interdites, style concis/technique
- system : agent utilitaire rapide, réponses directes sans reasoning
- monitor : agent surveillance logs/métriques, orienté détection d'anomalies
- brain : agent analyse avancée Claude Sonnet, contexte cluster Funk

Corrige aussi system/monitor dont les SOUL.md étaient corrompus
(séquelles de l'incident EXT4 du 2026-05-13).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 17:59:16 +02:00
alkatrazz
2b84a8c357 fix: SKILL.md v1.2.0 — section erreurs interdites + pattern 2 étapes
Le modèle passait des commandes shell comme argument à ask-agent
(ask-agent monitor journalctl ...) au lieu de passer du texte.

Ajout section "Erreurs INTERDITES" avec exemples / explicites,
et reformulation du pattern obligatoire en 2 étapes clairement séparées.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 17:41:59 +02:00
alkatrazz
5e93c1d3d7 fix: ask-agent /no_think + SKILL.md renforcé + tests 10/10
- ask-agent : ajout /no_think pour agents system et monitor
  (Qwen3-1.7B en mode thinking consommait tous les tokens sur
  le raisonnement interne, laissant content: "" vide)
- SKILL.md v1.1.0 : règles OBLIGATOIRES de délégation, distinction
  ask-agent vs delegate_task, exemples concrets, syntaxe exacte
- test.sh : suite 10 tests end-to-end — CLI disponible, LiteLLM,
  system/monitor/brain, données réelles, skill présence/activation,
  Hermes funk-ai appelle Terminal: ask-agent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 17:26:25 +02:00
alkatrazz
bd7181b8db docs: mise à jour README principal — état cluster + stack IA complète
- Stack IA : diagramme multi-agents (funk-ai/system/monitor/brain),
  tableau profils Hermes, ask-agent délégation inter-agents
- Organisation repo : hermes_user, hermes-skills/, talos/, k8s/
- Gestion cluster : funk-start/stop --k8s, lien admin/cluster.md
- Roadmap : cluster k8s , MetalLB+Traefik , ask-agent ,
  hermes_user , WOL et ArgoCD restants

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 16:43:53 +02:00
alkatrazz
9f027cb833 docs: ask-agent + skills Hermes — documentation complète
- admin/ask-agent.md (nouveau) : doc détaillée ask-agent CLI,
  architecture 4 agents, skill agent-delegation, gestion skills
  dans les profils Hermes, dépannage, points d'attention
- admin/hermes.md : section Skills avec point d'attention double
  emplacement (skills/ + profiles/<profil>/skills/), tableau skills
  custom Funk, restart obligatoire après modif skill
- admin/litellm.md : flux et modèles mis à jour (qwen3-8b,
  qwen3-1.7b-system/monitor), lien vers ask-agent.md
- admin/README.md : entrée ask-agent.md ajoutée

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 16:37:36 +02:00
alkatrazz
515933c949 docs: suppression LM Studio — cluster utilise llama-server ROCm
- CLAUDE.md : état mis à jour (2026-05-13), gpu-01 → llama-server,
  setup IA → endpoints réels (llama-server + LiteLLM), rôles Ansible
  à jour, suppression CLI LM Studio
- admin/lm_studio.md : marqué supprimé du cluster, lms CLI conservée
  pour téléchargement modèles uniquement, /opt/lmstudio disparu
- admin/nfs.md : section modèles mise à jour (plus de symlink lmstudio)
- admin/rocm.md : debug section → llama-server, section Vulkan supprimée
- admin/README.md : description lm_studio.md mise à jour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 16:21:51 +02:00
alkatrazz
6be2a89480 feat: rôle hermes_user + ask-agent + skills délégation
- Nouveau rôle hermes_user : création user/group UID 1002 sur storage-01
  et gpu-01, sudoers limités par host, clé SSH ed25519 générée sur
  storage-01 et distribuée vers gpu-01, ssh_config + known_hosts
- Kubeconfig copié depuis ansible vers hermes sur storage-01
- ask-agent : script bash LiteLLM pour déléguer aux agents
  system/monitor/brain/funk-ai
- hermes-skills/funk/agent-delegation : skill Hermes pour les
  inter-profile calls avec pattern Terminal: ask-agent
- Playbooks storage-01 et gpu-01 : ajout du rôle hermes_user

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 16:03:43 +02:00
alkatrazz
0c89d262d1 docs: cluster.md — procédures allumage/extinction détaillées
Ajout des procédures pas-à-pas pour démarrer/éteindre avec et sans k8s.
Note sur WOL compute nodes (BIOS non configuré → allumage manuel).
Mise à jour section aliases → fonctions bash avec support --k8s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:11:47 +02:00
alkatrazz
763b29495e docs: incident EXT4 2026-05-13 + hermes-agent nouvelle archi SSD
- incidents.md : incident corruption EXT4 après arrêt brutal (655 erreurs,
  e2fsck, réinstall hermes-agent, nouveau chemin /opt/hermes/.hermes/)
- hermes.md : arborescence mise à jour (code SSD vs données RAID5),
  chemins pip/venv/frontend corrigés
- Ansible role hermes_agent : venv path et wrapper mis à jour
  (hermes_home/.hermes/hermes-agent/venv/ au lieu de hermes_data_dir/)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 14:49:53 +02:00
alkatrazz
a1826fe339 docs: gestion cluster + script funk-cluster mis à jour
- admin/cluster.md : nouveau guide démarrage/arrêt (funk-start/stop/--k8s)
- admin/README.md : lien vers cluster.md
- admin/systeme.md : services llama-server mis à jour (GPU + 2 CPU)
- ansible/roles/litellm/files/funk-cluster : script versionné
  (talosctl fix, storage-01 shutdown, --k8s optionnel, stop timeout)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 02:11:21 +02:00
alkatrazz
07b94fe8a8 docs: profils Hermes multi-modèles + progression 12-13 mai
- admin/hermes.md : section profils complète (funk-ai/brain/system/monitor),
  architecture multi-modèles gpu-01, arborescence profiles/
- PROGRESS.md : entrées 2026-05-12 et 2026-05-13

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 01:52:58 +02:00
alkatrazz
0ce6be04bb docs: réorganisation install/ — guides séparés par machine
- admin/install/README.md        — index + ordre d'installation recommandé
- admin/install/storage-01.md   — AlmaLinux + RAID5 + Ansible + stack IA (Hermes/LiteLLM/Qdrant/PostgreSQL)
- admin/install/gpu-01.md       — AlmaLinux + ROCm + llama-server (RX 6700XT, HSA_OVERRIDE)
- admin/install/kubernetes.md   — ex admin/installe.md (Talos + MetalLB + Traefik)
- admin/README.md               — séparation install/ vs référence opérationnelle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 23:03:05 +02:00
alkatrazz
0bdfe49d75 docs: guide d'installation complet cluster Talos/k8s
Couvre de A à Z : outils, SOPS/age, talconfig, installation des 3 nœuds,
bootstrap etcd, MetalLB, Traefik, DNS wildcard. Section pièges documentant
toutes les erreurs rencontrées lors de l'installation réelle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 22:51:03 +02:00
alkatrazz
c8a1faa632 feat: MetalLB + Traefik + wildcard DNS lab.local
- MetalLB pool 192.168.10.200-230 (L2 mode)
- Traefik LoadBalancer sur 192.168.10.200 (HTTP/HTTPS)
- dnsmasq wildcard *.lab.local → 192.168.10.200
- Fix Flannel CrashLoopBackOff : ClusterRoleBinding corrigée (kube-flannel → kube-system)
- Doc talos.md : procédure complète MetalLB + Traefik + pièges Flannel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 22:45:06 +02:00
alkatrazz
bb72145365 feat(talos): bootstrap Kubernetes cluster funk (3 nodes, v1.33.1)
- Add talconfig.yaml with compute-01/02/03 (nvme0n1, Flannel CNI)
- Add SOPS/age encryption for talsecret.sops.yaml
- Add patches: NTP/DNS → storage-01, kubelet reserved for 8GB workers
- Fix nftables: open DHCP port 67 for cluster LAN
- Add dnsmasq DHCP with static leases for all 3 compute nodes
- Add admin/talos.md: full install procedure + admin commands
- Install kubectl + talosctl on storage-01

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 22:11:38 +02:00
alkatrazz
a87d1baf76 docs(hermes): add update procedure and post-update checks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 20:28:27 +02:00
alkatrazz
6d375da7b2 docs: add Funk/ reference docs and update hermes TUI instructions
- Remove Funk/ from .gitignore (repo is private)
- Add HOMELAB.md and agent configs for Hermes context
- Update hermes TUI doc: must run as hermes user from /srv/data/hermes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 19:51:42 +02:00
alkatrazz
dca71144d6 docs(admin): add ops documentation and fix hermes dashboard service
- Remove admin/ from .gitignore (repo is now private)
- Add --tui flag to hermes-dashboard.service template
- Document hermes-tui wrapper, dashboard access, TUI usage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 18:50:43 +02:00
alkatrazz
1544a2fc6d Merge branch 'main' of github.com:Alkatrazz24/Funk-lab 2026-05-12 18:02:12 +02:00
alkatrazz
572e949ce4 ajout de linterface hermes + route 2026-05-12 18:01:50 +02:00
21ff95f4b4
Update README.md
add image
2026-05-12 17:33:14 +02:00
alkatrazz
5615ead566 Ajout de l'image cluster 2026-05-12 17:32:10 +02:00
alkatrazz
bcd134a091 docs: add README with cluster overview and architecture 2026-05-12 17:22:26 +02:00
alkatrazz
a2dee9fe1c Merge branch 'main' of github.com:Alkatrazz24/Funk-lab 2026-05-12 17:19:06 +02:00
alkatrazz
b3fce8af5d feat: initial commit — Ansible roles storage-01/gpu-01 opérationnels 2026-05-12 17:17:03 +02:00
5b68f332b1
Initial commit 2026-05-12 17:02:24 +02:00