# 2026-05-12 — Kubernetes (Flannel fix, MetalLB, Traefik, DNS) + Architecture multi-modèles ## Résumé Cluster Kubernetes opérationnel : correction du crash Flannel, déploiement MetalLB L2 + Traefik + wildcard DNS `*.lab.local`. Mise en place de l'architecture multi-modèles sur gpu-01 : 1 instance GPU + 2 instances CPU avec isolation CPUAffinity/MemoryMax. Création des 5 profils Hermes. Documentation complète admin/install/. --- ## Flannel CrashLoopBackOff **Symptôme** : 2 pods flannel en `CrashLoopBackOff` dans kube-system. **Cause** : Le `ClusterRoleBinding flannel` pointait vers le namespace `kube-flannel` (supprimé) au lieu de `kube-system`. **Fix** : ```bash kubectl patch clusterrolebinding flannel --type='json' \ -p='[{"op":"replace","path":"/subjects/0/namespace","value":"kube-system"}]' ``` --- ## MetalLB + Traefik + DNS wildcard - MetalLB L2 mode : pool `192.168.10.200-230` - Traefik : `loadBalancerIP: 192.168.10.200`, helm `logs.general.level=INFO` (pas `log.level` — paramètre invalide → rollback helm) - dnsmasq wildcard : `address=/.lab.local/192.168.10.200` → toutes les entrées `*.lab.local` résolvent vers Traefik --- ## Architecture multi-modèles gpu-01 ### Instances llama-server | Service | Port | Modèle | Infra | Isolation | |---|---|---|---|---| | `llama-server` | 1234 | Qwen3-8B Q4_K_M | GPU RX 6700XT | ROCm | | `llama-server-system` | 1236 | Qwen3-1.7B Q4_K_M | CPUs 0-6,16-22 | 6G RAM | | `llama-server-monitor` | 1237 | Qwen3-1.7B Q4_K_M | CPUs 7-13,23-29 | 6G RAM | GPU = RX 6700XT 12 GB VRAM, CPU = Ryzen 9 5950X 16c/32t (32 GB RAM) ### Masquage GPU pour les instances CPU Les instances CPU crashaient en SEGV car ROCm tentait d'initialiser le GPU même avec `--n-gpu-layers 0` : ```ini Environment=ROCR_VISIBLE_DEVICES= Environment=HIP_VISIBLE_DEVICES=-1 ``` ### Ouverture firewall ```bash firewall-cmd --permanent --add-port=1235/tcp --add-port=1236/tcp --add-port=1237/tcp firewall-cmd --reload ``` --- ## 5 profils Hermes Créés avec `HERMES_HOME=/srv/data/hermes hermes profile create ` puis configurés dans `/srv/data/hermes/profiles//config.yaml`. | Profil | Modèle LiteLLM | Rôle | |---|---|---| | `funk-ai` | `qwen3-8b` (GPU) | Principal — par défaut | | `brain` | `claude-sonnet-4-6` (API) | Analyse complexe | | `dev` | `qwen2.5-7b-dev` (CPU) | Développement (supprimé en session suivante) | | `system` | `qwen3-1.7b-system` (CPU) | Tâches système rapides | | `monitor` | `qwen3-1.7b-monitor` (CPU) | Monitoring rapide | Tous pointent vers LiteLLM (`http://127.0.0.1:4000/v1`) qui route selon le modèle. ### Problème HERMES_HOME vs HOME Les profils créés sans `HERMES_HOME` explicite étaient créés dans `/opt/hermes/.hermes/` (HOME du compte hermes) au lieu de `/srv/data/hermes/` (HERMES_HOME). **Fix** : Toujours préfixer avec `HERMES_HOME=/srv/data/hermes` pour toutes les commandes hermes. ### Problème contexte 64k minimum Hermes exige un contexte ≥ 64 000 tokens pour tout modèle. Override via config.yaml : ```yaml model: context_length: 65536 # override le check Hermes — llama-server peut rester à 32768 ``` ### Profil par défaut ```bash HERMES_HOME=/srv/data/hermes hermes profile use funk-ai ``` --- ## Documentation créée | Fichier | Contenu | |---|---| | `admin/install/storage-01.md` | Guide complet installation AlmaLinux → RAID5 → 8 phases Ansible | | `admin/install/gpu-01.md` | AlmaLinux → ROCm → NFS → llama-server | | `admin/install/kubernetes.md` | Talos → talhelper → MetalLB → Traefik → DNS wildcard | | `admin/install/README.md` | Index + ordre d'installation | | `admin/README.md` | Refonte — 2 sections : guides install vs référence opérationnelle | --- ## État final - Cluster k8s : Flannel OK, MetalLB OK, Traefik OK, DNS wildcard OK - gpu-01 : 3 instances llama-server (GPU + 2 CPU) - LiteLLM : 5 modèles routés (qwen3-8b, qwen3-1.7b-system/monitor, claude-sonnet/opus) - Hermes : 5 profils créés, `funk-ai` par défaut