DIRTY STATIC / DÉPÊCHE Tutoriels07 NOV. 2026 • 11 MIN DE LECTURE
Une salle de serveurs en béton en noir et blanc avec des bandes de danger au sol, des rangées de modules de travail en béton et une capsule d'agent brillante en jaune avertissement soulevée entre les modules.
TutorielsL'INTELLIGENCE POUR L'ÈRE DES MACHINES

Isoler les sessions d'agents avec Google Agent Substrate

Agent Substrate 1.0 sépare une session d'agent de la puissance de calcul qui l'exécute, alors les sessions inactives se figent en instantanés dans le stockage et se réveillent en moins de 500 millisecondes, selon les chiffres de Google. Ce tutoriel installe Substrate 0.0.9 sur un cluster kind local, ajoute kagent et fait fonctionner un agent déclaratif dans un acteur gVisor.

Commencer la lecture ↓

Un agent passe la plus grande partie de sa vie à attendre. Il exécute du code pendant quelques secondes, puis reste inactif pendant qu’un modèle réfléchit, qu’un outil répond ou qu’une personne lit. Dans Kubernetes ordinaire, cette session inactive garde quand même un Pod, avec la mémoire et la puissance de calcul verrouillées sur une conversation qui ne fait rien.

Agent Substrate s’attaque à ce gaspillage. Google l’a construit, il a atteint la version 1.0 cette semaine et Google l’a donné à la Cloud Native Computing Foundation, où il se trouve dans le CNCF Sandbox. Google dit que la forme gérée, Agent Substrate sur GKE, est maintenant offerte en disponibilité générale. Ce tutoriel utilise la version libre que le projet kagent documente : Substrate 0.0.9 sur un cluster kind local, avec un agent qui fonctionne dans un bac à sable gVisor.

Ce que vous allez construire ou apprendre

Vous terminerez avec un cluster kind local qui fait fonctionner Agent Substrate dans l’espace de noms ate-system et kagent avec le lien Substrate activé. Vous créerez un agent déclaratif nommé hello-substrate. Cet agent fonctionne comme un Acteur Substrate dans gVisor, et non comme un Déploiement ordinaire.

Vous apprendrez aussi les trois mots qui expliquent tout le système. Un Acteur garde une session et son état. Un Travailleur fournit la puissance de calcul depuis un bassin partagé. Une Passerelle contrôle le trafic qui entre et qui sort et peut injecter des secrets selon l’identité de l’Acteur, pour que les clés restent hors de l’environnement de l’agent. Google décrit cette division dans son annonce 1.0, et les étapes ci dessous suivent le guide kagent pour Agent Substrate.

Avant de commencer

Lisez la portée avant de taper. C’est un cluster de test local, pas une installation de production. Le guide kagent indique que le graphique Substrate 0.0.9 utilise par défaut une authentification JWT adossée aux jetons ServiceAccount de Kubernetes, alors un cluster kind ordinaire fonctionne sans portes de fonctionnalités et sans configuration kind personnalisée. Les choix de production comme l’isolement avec des microVM Cloud Hypervisor, le stockage et la politique d’accès se trouvent hors de ce parcours.

Une affirmation a besoin d’une étiquette avant le début des étapes. Les chiffres dans la version courte, restauration en moins de 500 millisecondes, densité 10x par rapport aux environnements d’exécution de conteneurs standard et plus de 500 actions de suspension et de reprise par seconde, sont des chiffres de Google pour la version 1.0. Ce tutoriel ne les mesure pas. Un seul travailleur sur un portable peut montrer la forme de la suspension et de la reprise. Il ne peut pas prouver la densité à grande échelle.

Diagramme de Google montrant des Acteurs avec état et des Passerelles de politique séparés d'un bassin chaud de Travailleurs Kubernetes
Diagramme Google de la division Substrate : les Acteurs et les Passerelles gardent l'état et la politique, les Travailleurs fournissent une puissance de calcul réutilisable. Image: Google Cloud Blog

Étape 1 : créer un cluster kind

Action : créez un cluster Kubernetes local nommé kagent-substrate.

Terminal

kind create cluster --name kagent-substrate

Résultat attendu : kind signale le cluster prêt et kubectl pointe vers lui. Aucune configuration personnalisée n’est nécessaire pour Substrate 0.0.9, selon le guide kagent.

Étape 2 : exporter votre clé de modèle et la vérifier

Action : exportez une clé API OpenAI dans le même shell que vous utiliserez pour Helm, puis prouvez que le shell peut la voir. Utilisez un espace réservé dans toutes les notes que vous gardez.

Terminal

export OPENAI_API_KEY="your-key-here"
[[ -n "${OPENAI_API_KEY:-}" ]] && echo "key is set (len=${#OPENAI_API_KEY})" || echo "OPENAI_API_KEY is empty, export it first"

Résultat attendu : la vérification affiche la longueur de la clé et n’affiche jamais la clé. Le guide met en garde contre le fait de mettre l’exportation et la commande Helm sur une même ligne, parce que le shell peut développer la variable avant que l’affectation s’exécute et passer une chaîne vide.

Étape 3 : installer Agent Substrate 0.0.9

Action : installez d’abord les ressources personnalisées Substrate, puis le plan de contrôle et le plan de données Substrate, les deux dans ate-system.

Terminal

helm upgrade --install substrate-crds oci://ghcr.io/kagent-dev/substrate/helm/substrate-crds --version 0.0.9 --namespace ate-system --create-namespace --wait

helm upgrade --install substrate oci://ghcr.io/kagent-dev/substrate/helm/substrate --version 0.0.9 --namespace ate-system --wait --timeout 10m

kubectl get pods -n ate-system

Résultat attendu : la liste des pods montre les pods ate-api-server, ate-controller, atelet, atenet-router, les pods valkey-cluster et rustfs à l’état Running, plus quelques tâches d’initialisation à l’état Completed. Les noms varient en suffixe. C’est l’état qui compte ici.

Étape 4 : installer kagent avec Substrate activé

Action : installez les ressources personnalisées kagent, puis kagent lui même avec les drapeaux Substrate du guide. Épinglez les graphiques. Les versions avant v0.9.7 n’ont pas les valeurs que cette étape règle, et Helm ignore les valeurs inconnues en silence, alors un vieux graphique démarre sans lien Substrate et sans erreur.

Terminal

helm upgrade --install kagent-crds oci://ghcr.io/kagent-dev/kagent/helm/kagent-crds --version 0.10.6 --namespace kagent --create-namespace --wait

helm upgrade --install kagent oci://ghcr.io/kagent-dev/kagent/helm/kagent --version 0.10.6 --namespace kagent --timeout 10m --wait --set providers.openAI.apiKey="$OPENAI_API_KEY" --set providers.default=openAI --set controller.substrate.enabled=true --set controller.substrate.ateApiEndpoint=dns:///api.ate-system.svc:443 --set controller.substrate.ateApiInsecure=true --set substrateWorkerPool.create=true --set substrateWorkerPool.replicas=1 --set substrateWorkerPool.ateomImage=ghcr.io/kagent-dev/substrate/ateom-gvisor:v0.0.9

kubectl get secret kagent-openai -n kagent
kubectl get workerpools.ate.dev -A

Résultat attendu : le secret existe avec une entrée de données, et un WorkerPool nommé kagent-default existe. Un travailleur suffit pour ce parcours. Le guide note que les Acteurs de session libèrent leur emplacement quand ils retournent en instantané dans le stockage, alors un seul Travailleur peut servir beaucoup de sessions en séquence. Ajoutez des travailleurs plus tard si vous voulez des sessions qui se chevauchent dans le temps.

Si Helm expire pendant que les pods démarrent, attendez le contrôleur à la main puis continuez :

Terminal

kubectl wait deploy/kagent-controller -n kagent --for=condition=Available --timeout=10m

Une capsule jaune brillante tenue au dessus d’une plateforme de travail en béton en noir et blanc, avec d’autres capsules rangées dans des voûtes en béton et des bandes de danger au sol

Étape 5 : ouvrir l’interface kagent

Action : transférez l’interface kagent vers votre machine et ouvrez la dans un navigateur.

Terminal

kubectl port-forward -n kagent svc/kagent-ui 8001:8080

Résultat attendu : l’interface se charge à http://localhost:8001. Sautez l’assistant de premier lancement s’il apparaît. Laissez le transfert en marche dans ce terminal et utilisez un deuxième terminal pour l’étape suivante.

Étape 6 : créer un agent sur Substrate

Action : appliquez un manifeste SandboxAgent. Le bloc substrate pointe l’agent vers le WorkerPool kagent-default. L’environnement d’exécution doit être Go. Le guide indique que l’ADK Python n’est pas pris en charge sur Substrate aujourd’hui.

Terminal

kubectl apply -f - <<EOF
apiVersion: kagent.dev/v1alpha2
kind: SandboxAgent
metadata:
  name: hello-substrate
  namespace: kagent
spec:
  type: Declarative
  description: Tiny declarative agent running inside a substrate actor
  declarative:
    runtime: go
    modelConfig: default-model-config
    systemMessage: |
      You are a friendly assistant living inside an Agent Substrate sandbox.
      When asked who you are, say "I am hello-substrate, a Go ADK declarative agent running inside a gVisor actor."
  substrate:
    workerPoolRef:
      name: kagent-default
EOF

kubectl wait sandboxagent/hello-substrate -n kagent --for=condition=Ready --timeout=5m

Résultat attendu : l’agent atteint Ready. Le guide place le premier instantané doré à environ 60 à 90 secondes. Un instantané doré est l’état de départ enregistré à partir duquel les nouveaux Acteurs se restaurent, pour que les sessions suivantes démarrent vite au lieu de construire à partir de zéro.

Étape 7 : clavarder et regarder l’Acteur se suspendre

Action : dans l’interface à http://localhost:8001, ouvrez la liste des agents, choisissez kagent/hello-substrate et envoyez cette invite : What are you, and where are you running? Answer in one sentence.

Résultat attendu : l’agent répond avec la phrase de son message système, se nommant comme un agent déclaratif Go ADK dans un Acteur gVisor. Derrière cette réponse, un Acteur de session s’est restauré depuis l’instantané doré, a exécuté l’appel au modèle et est retourné en instantané dans le stockage. Ouvrez View, puis Substrate, dans l’interface pour voir l’Acteur dans l’inventaire. Entre les demandes, il devrait rester à l’état Suspended. Ce seul mot est tout l’objet du système, rendu visible.

Vérification

Parcourez cette liste de contrôle avant de déclarer l’installation terminée :

  1. kubectl get pods -n ate-system montre les pods Substrate à Running, avec seulement des tâches d’initialisation à Completed.
  2. kubectl get secret kagent-openai -n kagent montre un secret avec une entrée de données.
  3. kubectl get workerpools.ate.dev -A montre kagent-default.
  4. L’agent hello-substrate atteint Ready et répond à l’invite de test dans l’interface.
  5. La vue Substrate montre l’Acteur de session comme Suspended entre les demandes.

Si les cinq points tiennent, vous avez la boucle centrale qui fonctionne : l’état dans l’Acteur, la puissance de calcul dans le Travailleur et aucun Pod pris en otage par un clavardage inactif.

Dépannage

ProblèmeCause probableCorrectif
Les pods d’agent montrent CreateContainerConfigErrorLa clé OpenAI était vide au moment de l’installation, alors aucun secret n’a été crééLancez la commande Helm de kagent de nouveau avec –reuse-values et réglez providers.openAI.apiKey de nouveau, selon le guide. Les déploiements passent à de nouveaux pods d’eux mêmes.
Le contrôleur démarre sans lien SubstrateLe graphique kagent est plus vieux que v0.9.7, alors les valeurs Substrate ont été ignoréesRéinstallez avec les graphiques 0.10.6 épinglés à l’étape 4.
Helm expire à la première installationUne course de démarrage à froid pendant que le contrôleur attend sa base de données, selon le guideAttendez le contrôleur avec la commande kubectl wait à l’étape 4, puis vérifiez les pods avant de réessayer quoi que ce soit.
L’agent n’atteint jamais ReadyLe premier instantané doré est encore en construction, ou un pod a échoué plus tôt dans la chaîneAttendez au delà de 90 secondes d’abord. Vérifiez ensuite les pods dans kagent et dans ate-system et corrigez le premier échec que vous trouvez.
Un Travailleur semble trop petit pour les testsUn Acteur partagé pour un harnais de longue durée épingle un emplacement pendant qu’il reste actifMettez le bassin à l’échelle avec kubectl scale workerpool kagent-default -n kagent –replicas=3 pour un test rapide, ou réglez substrateWorkerPool.replicas dans Helm pour un changement durable.
Vous voulez que le cluster disparaisseLe parcours est terminé et le cluster kind garde un secret de clé de modèleLancez kind delete cluster –name kagent-substrate et toute l’installation de test part avec lui.

Prochaines étapes

Lisez la page de concepts Agent Substrate liée depuis le guide kagent pour le compte rendu complet des instantanés, des Acteurs et des WorkerPools. Regardez ensuite la voie AgentHarness dans la même documentation, qui place des agents de codage de longue durée sur Substrate. Les lecteurs qui font fonctionner Hermes se soucieront de cette voie en particulier, et notre tutoriel d’installation de Hermes Agent couvre le côté agent de ce jumelage.

Pour une lecture de production, comparez cette voie locale avec Agent Substrate sur GKE dans la documentation Google Cloud, et pesez gVisor contre les microVM Cloud Hypervisor comme frontière d’isolement. Google dit que Substrate accepte les conteneurs OCI standard et fonctionne avec les agents ADK et les installations de codage avec état. Testez cette affirmation avec un petit agent à vous avant de déplacer toute une flotte dessus.

Commencez petit, regardez l’état Suspended faire son travail et mettez le WorkerPool à l’échelle seulement quand vos sessions se chevauchent vraiment. La densité est une affirmation jusqu’à ce que votre propre trafic la prouve.

Étapes, versions et commandes vérifiés par rapport au guide Agent Substrate de kagent et à l’annonce 1.0 de Google Cloud le 2026-11-07. Cette procédure a été vérifiée par rapport à ces documents; elle n’a pas été exécutée de bout en bout sur une machine de test pour cet article.

Sources

  • Agent Substrate guide and install commands: kagent documentation, Agent Substrate example
  • 1.0, CNCF donation, Actors, Workers, Gateways and Google performance figures: Google Cloud Blog, Open infrastructure for autonomous agents comes to CNCF, 2026-11-05
  • Diagram: Google Cloud Blog
■

FIN DE LA TRANSMISSION

Restez curieux. Remettez tout en question.

CONTINUEZ LA DESCENTE

PLUS DE DIRTY STATIC ↘