Ressources
Exigences CPU, mémoire, disque et GPU pour les déploiements Scrydon
Utilisez ces exigences pour dimensionner le cluster avant d'exécuter helm install.
Elles découlent de ce que les valeurs par défaut du chart réservent réellement,
service par service ci-dessous. Un test du chart rend les valeurs par défaut et
échoue dès que ces tableaux ne leur correspondent plus : une version qui fait
grossir un service met donc aussi cette page à jour.
Minimum (évaluation / petites équipes)
| Ressource | Exigence |
|---|---|
| CPU | 8 vCPU |
| RAM | 40 Go |
| Disque | 160 Go pour les volumes persistants, plus la place des images sur chaque nœud |
| Nœuds | 2 ou plus |
| GPU | Non requis |
D'où viennent ces chiffres : les services de la pile par défaut demandent ensemble environ 24 Gio de mémoire, et chacun des 14 sidecars Dapr ajoute 128 Mio et 50m de CPU — soit environ 26 Gio et 4,4 vCPU que le scheduler doit placer avant que quoi que ce soit ne démarre. Une première installation demande un peu plus pendant quelques minutes. Les 6 Jobs d'amorçage des schémas demandent ensemble 0,5 vCPU et 1,25 Gio, et ils tournent pendant que les workloads démarrent : le pic est donc d'environ 4,8 vCPU et 27,5 Gio. Ajoutez environ 30 % pour kube-system, le plan de contrôle Dapr, Traefik, la réservation propre du kubelet et les pics de rollout : 8 vCPU et 40 Go de mémoire de nœud sont le plancher qui planifie proprement. Les volumes persistants réclament 125 Gio par défaut (tableau ci-dessous).
Remarque : dimensionnez pour le pic de la première installation, pas pour le régime établi. Si les nœuds ne peuvent pas accueillir à la fois les workloads et les Jobs d'amorçage, le scheduler place les pods qu'il atteint en premier. Si c'est
dbqui reste en attente, les Jobs qui en ont besoin atteignent leur délai de 10 minutes et l'installation ne converge pas. La page Dépannage décrit la reprise.
Ces chiffres supposent la pile complète par défaut. Pour tourner plus petit, désactivez les composants dont vous n'avez pas besoin — voir Helm → Réduction pour les installations à faibles ressources.
Recommandé (production)
| Ressource | Exigence |
|---|---|
| CPU | 16 vCPU |
| RAM | 64 Go |
| Disque | 250 Go SSD |
| Nœuds | 3 ou plus |
| GPU | Facultatif. Requis uniquement pour l'inférence de modèles IA locaux, par exemple Ollama dans le cluster. |
Remarque : les ressources GPU sont sous licence contractuelle (votre JWT de licence reflète vos droits), mais Scrydon n'applique pas les limites GPU au runtime. Les nœuds GPU ne sont nécessaires que si vous prévoyez d'exécuter des modèles d'inférence locaux dans votre cluster.
Mémoire par service
Le chart définit une request et une limit mémoire sur chaque workload Scrydon. La request est ce que le scheduler réserve : la somme des requests (multipliées par les réplicas) est donc votre plancher, et les pods ne sont pas planifiés tant que le pool de nœuds ne peut pas la contenir. La limit est le plafond de burst avant qu'un pod soit OOM-killed.
| Workload | Réplicas | Request mémoire | Limit mémoire | Notes |
|---|---|---|---|---|
platform | 1 | 1 GiB | 2 GiB | Interface Plateforme : shell SSR et routes du plan de contrôle |
api-platform | 1 | 2 GiB | 4 GiB | Auth, API de la plateforme et AI Gateway |
agentic | 1 | 1 GiB | 2 GiB | Interface des workflows |
api-agentic | 1 | 3 GiB | 4 GiB | Runtime de workflow headless (Dapr Workflow). L'application la plus lourde |
agentic-realtime | 1 | 256 MiB | 512 MiB | Fan-out WebSocket |
horizon | 1 | 256 MiB | 1 GiB | Interface d'accueil opérateur |
analytics | 2 | 1.5 GiB | 2 GiB | SSR et rendu de graphiques |
cortex | 1 | 1 GiB | 3 GiB | Interface de chat et proxy de streaming LLM |
api-ontology | 1 | 256 MiB | 512 MiB | API d'ontologie |
api-table | 1 | 512 MiB | 2 GiB | Managed Tables. La limit couvre le pic du balayage de maintenance Iceberg |
api-ingestion | 2 | 256 MiB | 1 GiB | Là où s'exécute toute source de données qui récupère ou reçoit des données. Stream et push exigent aussi le tampon d'ingestion |
marimo-document | 1 | 128 MiB | 512 MiB | Moteur de rendu de documents de notebook sans état |
managed-execution-actor-host | 2 | 512 MiB | 4 GiB | Backend d'exécution en processus géré. executionFabric.managedProcess.enabled: false le supprime |
db | 1 | 3 GiB | 6 GiB | PostgreSQL 18 + pgvector intégré. infra.db.enabled: false pour un Postgres géré |
starrocks-fe | 1 | 5 GiB | 8 GiB | StarRocks mono-pod derrière Managed Tables. infra.starrocks.enabled: false le supprime |
seaweedfs | 1 | 1.5 GiB | 3 GiB | Stockage objet compatible S3 intégré |
lakekeeper | 1 | 512 MiB | 1 GiB | Catalogue REST Iceberg |
scrydon-opa | 2 | 128 MiB | 512 MiB | Point de décision de politique |
event-backbone-valkey | 1 | 128 MiB | 512 MiB | Flux de l'event backbone |
Chaque pod d'application Scrydon porte aussi un sidecar Dapr qui demande 128 MiB et 50m de CPU. Le plan de contrôle Dapr et Traefik ne définissent aucune request ; la marge de 30 % ci-dessus les couvre.
api-platform inclut le modèle local ONNX d'embeddings. Le modèle et le tokenizer
occupent environ 23 MiB sur disque (environ 48 MiB avec les fichiers du runtime
ONNX WASM), mais l'inférence demande davantage de
mémoire résidente : un essai isolé du binaire Linux arm64 compilé atteignait 866 MiB
après un lot de 100 textes. La request de 2 GiB et la limite de 4 GiB existantes
laissent de la place pour le modèle et l'API ; mesurez le pic RSS avec votre trafic.
Le calcul isolé des notebooks s'ajoute à ces ressources et est planifié dans
runtimePlane.workloadNamespace. Chaque runtime interactif actif réserve 4 GiB pour Marimo,
1 GiB pour le contrôle de source, 512 MiB pour son broker et 128 MiB pour l'enforcer de sortie
(5,625 GiB au total). Un job de notebook réserve 4 GiB pour son runner, plus 128 MiB pour le
broker et 128 MiB pour l'enforcer (4,25 GiB au total). Dimensionnez le pool de nœuds Kata/KVM
pour le nombre prévu de sessions et de jobs simultanés ; l'ouverture des documents ne consomme
pas cette capacité. Un pool d'exécution préchauffé (runtimePlane.execPool, désactivé par défaut)
ajoute une réservation permanente : 1,1 CPU et 2,125 GiB par pod d'Agent du pool et 1,35 CPU et
1,375 GiB par pod de Function du pool, plus le surcoût du RuntimeClass Kata, qu'ils servent ou non.
Volumes persistants
Chaque volume est en ReadWriteOnce et utilise global.storageClass, ou la
StorageClass par défaut du cluster lorsque cette valeur est vide.
| Volume | Taille | Défini par |
|---|---|---|
seaweedfs-data | 50 GiB | infra.seaweedfs.storage.size |
starrocks-data | 20 GiB | infra.starrocks.storage.size |
db-pvc | 5 GiB | infra.db.storage.size |
event-backbone-valkey | 2 GiB | eventBackbone.valkey.storage.size |
dapr-scheduler-server | 3 × 16 GiB | dapr.dapr_scheduler.cluster.storageSize (valeur par défaut de Dapr, un volume par réplica du scheduler) |
Soit 125 GiB au total. Le volume Postgres est dimensionné pour l'évaluation ;
augmentez infra.db.storage.size avant d'y placer des données de production.
AI Gateway
L’AI Gateway s'exécute à l'intérieur du pod api-platform :
son coût pèse donc sur le CPU de ce Deployment et non sur un service dédié. Le
chart livre auth.resources avec une request de 500m et une limit de 2000m.
Cette valeur par défaut couvre le trafic de plan de contrôle qu'api-platform sert
déjà ; le trafic du router s'y ajoute, et c'est la seule charge de cette page
qui évolue avec la façon dont vos équipes travaillent plutôt qu'avec le nombre de
services activés.
Coût d'un tour
Le coût CPU d'un tour se compose d'une petite part fixe et d'une part proportionnelle au nombre d'événements diffusés, et non au nombre d'octets. Votre posture DLP modifie le terme événementiel : il y a donc trois courbes plutôt qu'une seule.
| Mode DLP | CPU par tour |
|---|---|
disabled | 0,017 vCPU-s + 0,14 ms × événements |
audit | 0,025 vCPU-s + 0,18 ms × événements |
enforce | 0,026 vCPU-s + 0,20 ms × événements |
C'est le terme événementiel qui compte. Un agent de code diffuse environ un événement par token généré : un tour qui écrit 600 tokens coûte donc à peu près cinq fois un tour qui en écrit 100, même si les deux réponses restent courtes. Notez que le DLP est presque entièrement un coût par événement, et non un coût fixe : il inspecte le flux au fil de son passage, donc une réponse plus longue paie davantage.
| Longueur de réponse | Événements diffusés | disabled | audit | enforce |
|---|---|---|---|---|
| ~200 tokens (réponse courte, appel d'outil) | ~200 | 0,05 vCPU-s | 0,06 vCPU-s | 0,07 vCPU-s |
| ~600 tokens (tour d'agent typique) | ~600 | 0,10 vCPU-s | 0,13 vCPU-s | 0,15 vCPU-s |
| ~1 000 tokens | ~1 000 | 0,16 vCPU-s | 0,20 vCPU-s | 0,23 vCPU-s |
| ~2 000 tokens (écriture de code longue) | ~2 000 | 0,30 vCPU-s | 0,38 vCPU-s | 0,43 vCPU-s |
La taille du prompt est en comparaison quasi gratuite : un prompt de 150 Ko coûte à peu près autant qu'un prompt de 16 Ko, car le router analyse une requête une seule fois et ne la relit pas.
enforce ajoute par ailleurs environ 11 ms au temps de premier token, de
façon constante : le flux est libéré par fenêtres gouvernées de 512 caractères,
avec une retenue de 256 caractères pour qu'une détection à cheval sur une
frontière soit tout de même prise. Ce coût est plat : il n'augmente pas avec la
longueur de la réponse. audit n'ajoute aucun TTFT mesurable, car il inspecte
sans rien retenir.
Dimensionner pour une population de développeurs
Dimensionnez à partir des tours par seconde, et non du nombre de développeurs disposant d'un compte. Un développeur ayant un agent ouvert ne diffuse pas en continu : il lit, édite et réfléchit entre deux tours. La fraction de temps pendant laquelle son outil diffuse réellement est le cycle d'activité, et c'est ce chiffre qui détermine votre CPU.
Pour 1 000 développeurs émettant des tours typiques de 600 tokens d'environ 15 secondes chacun :
Les vCPU provisionnés ci-dessous visent un taux d'utilisation de 65 %, pour les trois modes DLP :
| Cycle d'activité | Flux simultanés | Tours/s | disabled | audit | enforce | Réplicas |
|---|---|---|---|---|---|---|
| 10 % — usage occasionnel | 100 | 6,7 | 1,1 vCPU | 1,3 vCPU | 1,5 vCPU | 2 |
| 25 % — usage régulier d'agent de code | 250 | 16,7 | 2,6 vCPU | 3,3 vCPU | 3,8 vCPU | 4 |
| 50 % — usage intensif, piloté par agents | 500 | 33,3 | 5,3 vCPU | 6,7 vCPU | 7,5 vCPU | 8 |
| 100 % — tous les développeurs diffusent en même temps | 1 000 | 66,7 | 10,5 vCPU | 13,4 vCPU | 15,1 vCPU | 16 |
Activer le DLP coûte environ 25 % de CPU en plus par tour en audit et
50 % en enforce, sur un tour d'agent typique. C'est un coût réel, mais
rarement décisif : c'est le nombre de réplicas ci-dessous qui contraint d'abord.
C'est en général le nombre de réplicas qui contraint, pas le total de vCPU.
Chaque pod accepte auth.maxInFlight appels ouverts (64 par défaut ; tours du
routeur, appels à l'API de la plateforme et appels d'outils MCP le partagent —
l'ancien auth.llmRouter.maxInFlight reste accepté en repli) :
le nombre minimal de réplicas vaut donc flux simultanés ÷ 64, quelle que soit
la marge CPU d'un pod. À 250 flux simultanés cela fait 4 réplicas qui se
partagent environ 3,5 vCPU — bien en dessous de la limit de 2000m autorisée à
chacun. Augmentez maxInFlight et la limit CPU ensemble, ou ajoutez des
réplicas ; n'augmentez pas l'un sans l'autre.
Valider vos propres chiffres
Les valeurs ci-dessus sont un point de départ, pas un substitut à la mesure de votre trafic réel. La longueur des tours, la posture DLP et le degré d'automatisation par agents déplacent le résultat davantage que l'erreur de modélisation. Une fois le trafic réel, les métriques décrites dans la section capacité de l’AI Gateway indiquent où vous vous situez :
scrydon_llm_router_streams_in_flightcomparé à votremaxInFlight— à quelle distance un pod se trouve du délestage.scrydon_llm_router_admission_rejections_total— durablement non nul en régime établi signifie qu'il faut ajouter un réplica, pas des retries côté client.scrydon_llm_router_overhead_msface àscrydon_llm_router_provider_ttfb_ms— sépare le temps passé dans votre plateforme du temps passé chez le fournisseur, ce qui distingue un problème de capacité d'un modèle lent.
Une organisation unique connaît un second plafond, indépendant du CPU.
Chaque tour écrit une preuve d'audit chaînée par hachage, et cette preuve est
ordonnée par organisation : le débit de tours soutenu d'un même locataire est
donc borné par la vitesse de commit de sa chaîne d'audit, et ajouter des
réplicas ne déplace pas cette limite. Deux écritures d'audit par tour, ou
quatre lorsque le DLP s'exécute en enforce.
Notre suite de capacité mesure ce commit entre 3 et 10 ms, ce qui situe une
organisation entre environ 100 et 380 écritures d'audit par seconde — largement
au-dessus de chaque ligne du tableau ci-dessus, sauf la dernière en enforce.
Si vous placez les 1 000 développeurs dans une seule organisation et que
vous exécutez le DLP en enforce et que vous attendez une diffusion
simultanée, validez cette combinaison avant de vous y engager. Un trafic
réparti sur plusieurs organisations ne partage pas cet ordonnancement et n'est
pas concerné.