Analysés : README.md, alertmanager-webhook.md, hermes-souls.md, hermes-voice.md, hermes.md À améliorer : 2/5 Co-Authored-By: Hermes <hermes@funk.lab> |
||
|---|---|---|
| admin | ||
| ansible | ||
| docs | ||
| Funk | ||
| hermes-skills | ||
| k8s | ||
| progress | ||
| talos | ||
| tools | ||
| .gitignore | ||
| .sops.yaml | ||
| CLAUDE.md | ||
| LICENSE | ||
| Makefile | ||
| PROGRESS.md | ||
| README.md | ||
| requirements.txt | ||
Funk Lab
Homelab IA — Kubernetes (Talos) + GPU AMD + Agent autonome (Hermes)
Vue d'ensemble
Funk est un homelab orienté IA composé de 5 machines physiques :
- un nœud de stockage/passerelle qui héberge tous les services de données et l'agent IA
- un nœud GPU dédié à l'inférence LLM local (AMD RX 6700XT)
- trois nœuds qui forment un cluster Kubernetes (Talos Linux)
L'ensemble est géré en Infrastructure-as-Code : Ansible pour les hôtes AlmaLinux, talhelper pour Talos, ArgoCD pour les workloads Kubernetes.
Architecture
Internet
│
[ Freebox ]
│
┌────────────────┐
│ storage-01 │ AlmaLinux 9.7
│ 192.168.10.1 │ Gateway + NAT + DNS
│ │ NFS · PostgreSQL
│ │ Qdrant · LiteLLM · Hermes
└───────┬────────┘
│ LAN cluster (192.168.10.0/24)
┌───────────┼───────────┐
│ │ │
[ compute-01 ] [ compute-02 ] [ compute-03 ] Talos Linux
192.168.10.11 192.168.10.12 192.168.10.13 Kubernetes
control-plane worker worker
┌───────────┘
│
[ gpu-01 ] AlmaLinux 9.7
192.168.10.20 llama-server (ROCm)
AMD RX 6700XT 12GB
Stack IA
┌─────────────────────────────────────┐
│ Hermes Agent (storage-01) │
│ │
│ profil funk-ai (Qwen3-8B GPU) │
│ │ ask-agent system/monitor │
│ ▼ │
│ profil system (Qwen3-1.7B CPU) │
│ profil monitor (Qwen3-1.7B CPU) │
│ profil brain (Claude Sonnet API) │
└──────────────┬──────────────────────┘
│
LiteLLM Proxy :4000
│
┌────────────────────┼────────────────────┐
│ │ │
qwen3-8b GPU qwen3-1.7b CPU Claude API
gpu-01 :1234 :1236 system / :1237 monitor Anthropic
| Composant | Rôle | Hôte |
|---|---|---|
| llama-server (×3) | Inférence GPU + 2× CPU isolés (ROCm 7.x) | gpu-01 |
| LiteLLM | Proxy API — routing local/cloud transparent | storage-01 |
| Hermes Agent | Agent IA multi-profils avec mémoire vectorielle | storage-01 |
| ask-agent | Délégation inter-agents (system / monitor / brain) | storage-01 |
| Qdrant | Base vectorielle pour la mémoire sémantique | storage-01 |
| PostgreSQL 16 | Persistance Hermes + LiteLLM | storage-01 |
Profils Hermes
| Profil | Modèle | Usage |
|---|---|---|
funk-ai |
Qwen3-8B GPU (~35 tok/s) | Agent principal — par défaut |
system |
Qwen3-1.7B CPU (~21 tok/s) | Calculs rapides, formatage, résumés |
monitor |
Qwen3-1.7B CPU (~21 tok/s) | Analyse logs, métriques, santé système |
brain |
Claude Sonnet 4.6 (API) | Raisonnement complexe, architecture |
Infrastructure
Machines
| Machine | IP | OS | RAM | Rôle |
|---|---|---|---|---|
| storage-01 | 192.168.10.1 | AlmaLinux 9.7 | 32 GB | Gateway · NFS · Services IA |
| gpu-01 | 192.168.10.20 | AlmaLinux 9.7 | 32 GB | Inférence LLM (RX 6700XT) |
| compute-01 | 192.168.10.11 | Talos v1.13 | 16 GB | k8s control-plane |
| compute-02 | 192.168.10.12 | Talos v1.13 | 8 GB | k8s worker |
| compute-03 | 192.168.10.13 | Talos v1.13 | 8 GB | k8s worker |
Stockage
- NVMe système (
/home/data, ~845 GB XFS) — bind-monté sur/srv/datadepuis 2026-05-29 - RAID5 logiciel (
md0) — 4 × 1 TB SATA, actif mais plus monté (sdb ATA errors + sdd retiré) - Point de montage
/srv/data— héberge modèles LLM, bases de données, données Hermes
Organisation du repo
├── ansible/ # Gestion storage-01 + gpu-01 (AlmaLinux)
│ ├── inventory.yml
│ ├── playbooks/
│ │ ├── storage-01.yml
│ │ └── gpu-01.yml
│ ├── group_vars/ # Variables globales + vault chiffré
│ ├── host_vars/ # Variables par machine
│ └── roles/
│ ├── common # Paquets, sécurité, NTP
│ ├── gateway # nftables + NAT
│ ├── dnsmasq # DNS local (lab.local)
│ ├── nfs_server # Exports NFS (modèles, k8s)
│ ├── nfs_client # Montages NFS sur gpu-01
│ ├── rocm # Stack GPU AMD (ROCm 7.x)
│ ├── llama_server # Inférence LLM + embeddings
│ ├── litellm # Proxy LLM + script ask-agent
│ ├── hermes_agent # Agent IA autonome
│ ├── hermes_user # User hermes + SSH partagé entre hosts
│ ├── rag # RAG : scripts rag-ingest/rag-query + skill Hermes
│ ├── alertmanager_webhook # Pont AlertManager → ask-agent
│ ├── postfix_relay # SMTP sortant via Gmail
│ ├── node_exporter # Métriques Prometheus
│ ├── minio # Stockage objet S3
│ ├── postgresql # Base de données
│ └── qdrant # Base vectorielle
├── hermes-skills/ # Skills Hermes versionnés
│ └── funk/
│ └── agent-delegation/ # Délégation ask-agent (system/monitor/brain)
├── talos/ # Cluster Kubernetes (talhelper)
└── k8s/ # Workloads ArgoCD
├── infra/ # MetalLB, Traefik, cert-manager
└── apps/ # Open WebUI, n8n, monitoring
Démarrage rapide
Pré-requis
pip install ansible
ansible-galaxy collection install ansible.posix community.general community.postgresql
Déployer storage-01
cd ansible/
ansible-playbook -i inventory.yml playbooks/storage-01.yml
Déployer gpu-01
ansible-playbook -i inventory.yml playbooks/gpu-01.yml
Déployer un rôle spécifique
ansible-playbook -i inventory.yml playbooks/storage-01.yml --tags litellm
ansible-playbook -i inventory.yml playbooks/gpu-01.yml --tags llama_server
Gestion du cluster
funk-start # Allume gpu-01 (WOL) + démarre tous les services
funk-start --k8s # Idem + démarre les nœuds k8s
funk-stop # Arrêt propre
funk-stop --k8s # Arrêt propre + éteint k8s avant
funk-status # État de tous les services (13 checks)
Détail complet des procédures : admin/cluster.md
Secrets
Les secrets sont gérés via Ansible Vault (chiffrement AES256).
# Chiffrer le vault
ansible-vault encrypt ansible/group_vars/all/vault.yml
# Editer les secrets
ansible-vault edit ansible/group_vars/all/vault.yml
Variables stockées dans le vault : vault_anthropic_api_key, vault_pg_hermes_password, vault_pg_litellm_password, vault_pg_n8n_password, vault_pg_openwebui_password, vault_postfix_relay_password.
Contrainte GPU
La RX 6700XT (gfx1031) n'est pas officiellement supportée par ROCm. La variable suivante est obligatoire dans tous les services GPU :
HSA_OVERRIDE_GFX_VERSION=10.3.0
Elle est gérée automatiquement par le rôle Ansible llama_server.
Roadmap
- Ansible — storage-01 (gateway, NFS, PostgreSQL, Qdrant, LiteLLM, Hermes, postfix, AlertManager webhook)
- Ansible — gpu-01 (ROCm, llama-server ×3 — GPU + 2× CPU)
- Stack IA opérationnelle (Hermes multi-profils + Qwen3 + Claude API)
- Délégation inter-agents (
ask-agent+ skillagent-delegation) - RAG opérationnel — Qdrant 339 chunks,
rag-query/rag-ingest - User
hermesavec SSH partagé entre storage-01 et gpu-01 - Cluster Kubernetes opérationnel (Talos v1.13 + talhelper)
- MetalLB + Traefik + wildcard DNS
lab.local - Monitoring complet (kube-prometheus-stack + AlertManager → Hermes + n8n)
- Open WebUI (
openwebui.lab.local, namespaceai) - n8n (
n8n.lab.local, namespaceai, 2 workflows actifs) - Email sortant — Postfix relay → Gmail SMTP
- WOL compute nodes (configuration BIOS)
- Route statique Freebox
- Modèle d'embedding dédié (nomic-embed-text ou bge-m3) pour améliorer le RAG
