Google Kubernetes Engine (GKE) Agent Substrate est une plate-forme d'infrastructure qui gère le cycle de vie des bacs à sable d'agents d'IA avec état. Le sous-système d'agent permet aux plates-formes de suspendre les charges de travail des agents inactifs pour réduire les coûts de calcul et de les reprendre en moins d'une seconde lorsque de nouvelles requêtes ou tâches arrivent.
Les volumes de l'agent Filestore fournissent la couche de stockage persistant pour Agent Substrate, en conservant les fichiers de l'espace de travail, les dépôts de code et les artefacts du bloc-notes lors des cycles de suspension et de reprise du bac à sable.
Comment Agent Substrate utilise les volumes d'agents
Les étapes suivantes décrivent comment les volumes d'agent Agent Substrate et Filestore prennent en charge un agent de codage interactif qui aide les développeurs à créer des fonctionnalités, à exécuter des tests et à déboguer du code :
- Initialisation de la session : lorsqu'un développeur envoie une tâche, Agent Substrate crée un environnement de bac à sable sur GKE et monte un volume Filestore dédié. L'agent clone le dépôt du projet, installe les dépendances et prépare l'espace de travail.
- Suspension inactive économique : pendant que le développeur examine les différences de code ou élabore la prochaine invite, Agent Substrate démonte le volume et met fin à l'environnement de calcul. L'utilisation des ressources de calcul tombe à zéro, tandis que tous les fichiers de l'espace de travail, l'historique Git et les caches de compilation restent persistants dans le volume.
- Reprise instantanée : lorsque le développeur envoie une nouvelle invite, Agent Substrate revendique un bac à sable préchauffé et rattache le volume existant en moins de 100 ms. L'agent reprend immédiatement la charge de travail avec le contexte complet du système de fichiers intact, ce qui évite les re-clones de dépôt ou les réinstallations de dépendances qui prennent du temps.
Pour en savoir plus, consultez la documentation sur le substrat de l'agent.
Pour exécuter des charges de travail d'agent avec état sur GKE Agent Substrate avec des volumes d'agent Filestore, vous devez installer Agent Substrate, configurer l'intégration du pilote CSI Filestore et définir vos charges de travail d'agent pour qu'elles utilisent des volumes CSI dynamiques.
Installer Agent Substrate
Pour préparer votre projet Google Cloud et installer Agent Substrate sur un cluster GKE Standard, suivez les instructions de la section Installer Agent Substrate sur GKE.
Installer et configurer le pilote CSI Filestore
Pour utiliser les volumes d'agent Filestore avec Agent Substrate, vous devez sélectionner l'étape facultative Pilote CSI Filestore lorsque vous exécutez le programme d'installation interactif Agent Substrate.
Le plan de contrôle du sous-ensemble d'agents (ateapi) communique directement avec le contrôleur du pilote CSI Filestore via le réseau gRPC. Le pilote CSI provisionne, attache et détache dynamiquement les volumes par acteur de votre pool de volumes Filestore en synchronisation avec le cycle de vie de chaque acteur.
Créer des charges de travail qui utilisent des volumes Filestore
Dans Agent Substrate, vous définissez les volumes Filestore externes de manière déclarative dans une ressource ActorTemplate au lieu de créer des objets PersistentVolumeClaim Kubernetes distincts.
Les étapes suivantes vous guident dans la configuration d'un StorageClass et d'un CSIDriverConfig Filestore, le déploiement d'un WorkerPool et d'un ActorTemplate qui installent un volume Filestore externe, et la gestion du cycle de vie de l'acteur.
Créer le StorageClass
Créez un fichier nommé storageclass.yaml pour provisionner des volumes dynamiques à partir de votre pool de volumes Filestore :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: substrate-volumepool-sc
provisioner: filestore.csi.storage.gke.io
parameters:
volume-pool: "projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_NAME"
allowVolumeExpansion: false
reclaimPolicy: Delete
volumeBindingMode: Immediate
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .LOCATION: région où réside votre pool de volumes, par exempleus-central1.VOLUME_POOL_NAME: nom de votre pool de volumes Filestore.
Appliquez la fonctionStorageClass :
kubectl apply -f storageclass.yaml
Enregistrer le CSIDriverConfig
La ressource CSIDriverConfig relie le provisionneur StorageClass Kubernetes (filestore.csi.storage.gke.io) au point de terminaison gRPC réseau du service de contrôleur CSI Filestore et au chemin d'accès au socket de domaine Unix local du plug-in de nœud CSI.
Créez un fichier nommé csi-driver-config.yaml :
apiVersion: ate.dev/v1alpha1
kind: CSIDriverConfig
metadata:
name: filestore.csi.storage.gke.io
spec:
driverName: filestore.csi.storage.gke.io
controllerEndpoint: tcp://csi-filestore-controller.gcp-filestore-csi-driver.svc:10000
nodeSocketOverride: unix:///var/lib/kubelet/plugins/filestore.csi.storage.gke.io/csi.sock
tls:
enabled: true
usePodIdentity: true
serverName: csi-filestore-controller.gcp-filestore-csi-driver.svc
Appliquez la fonctionCSIDriverConfig :
kubectl apply -f csi-driver-config.yaml
Définir WorkerPool et ActorTemplate
Créez l'espace de noms
ate-demoet Kubernetes qui servira de limite d'isolation pour votre pool de nœuds de calcul, votre modèle d'acteur et vos acteurs :kubectl ate create atespace ate-demo kubectl create namespace ate-demo
Créez une ressource
WorkerPoolpour que les charges de travail de secours physique soient prêtes à héberger des bacs à sable d'acteurs. Enregistrez le manifeste suivant sous le nomworker-pool.yaml:apiVersion: ate.dev/v1alpha1 kind: WorkerPool metadata: name: agent-pool namespace: ate-demo labels: workload: stateful-agent spec: replicas: 5 workerImage: ko://github.com/agent-substrate/substrate/cmd/ateom-gvisorAppliquez le fichier manifeste
WorkerPool:kubectl apply -f worker-pool.yaml
Créez un fichier nommé
actor-template.yamldéfinissant leActorTemplatequi monte un volume de 5 Gio à partir desubstrate-volumepool-sc:metadata: atespace: ate-demo name: stateful-agent-template workerSelector: matchLabels: workload: stateful-agent containers: - name: agent image: CONTAINER_IMAGE volumeMounts: - name: shared-storage mountPath: /mnt/shared readyz: httpGet: path: /readyz port: 8080 sandboxConfig: sandboxClass: SANDBOX_CLASS_GVISOR configName: gvisor-default snapshotsConfig: storageLocation: gs://SNAPSHOT_BUCKET/stateful-agent volumes: - name: shared-storage externalVolumeTemplate: capacity: 5Gi storageClassName: substrate-volumepool-scRemplacez les éléments suivants :
CONTAINER_IMAGE: image de conteneur pour la charge de travail de votre agent, par exemplegcr.io/my-project/agent-app@sha256:7f28ab0....SNAPSHOT_BUCKET: bucket Cloud Storage utilisé par Agent Substrate pour stocker les instantanés d'acteur.
Dans ce fichier manifeste,
volumes[].externalVolumeTemplatespécifie la capacité de volume demandée (5Gi) et leStorageClass(substrate-volumepool-sc) dont l'approvisionneur correspond à votreCSIDriverConfig, tandis quecontainers[].volumeMountsinstalle ce volume sur/mnt/shared. Chaque volume déclaré dansvolumesdoit être monté par au moins un conteneur.Créez
ActorTemplatevia l'API Agent Substrate à l'aide de la CLIkubectl ate:kubectl ate create actor-template -f actor-template.yaml
Créer, suspendre et reprendre un acteur
Une fois le ActorTemplate créé et son instantané de référence prêt, vous pouvez créer une instance d'acteur et gérer son état d'exécution :
Créez un acteur à partir de
stateful-agent-template:kubectl ate create actor ACTOR_NAME \ --template=stateful-agent-template \ -a ate-demoRemplacez
ACTOR_NAMEpar un nom de libellé DNS-1123 pour votre acteur, tel quemy-agent-1.Lorsque vous créez l'acteur, Agent Substrate provisionne dynamiquement un volume Filestore dédié à partir de
substrate-volumepool-scet le monte sur/mnt/shared.Suspendre l'acteur lorsqu'il devient inactif :
kubectl ate suspend actor ACTOR_NAME \ -a ate-demoLa suspension de l'acteur vérifie l'état de sa mémoire dans Cloud Storage, démonte et détache le volume Filestore tout en conservant tous les fichiers de l'espace de travail sur le volume, et libère la charge de travail.
Reprenez l'acteur lorsqu'une nouvelle requête ou tâche arrive :
kubectl ate resume actor ACTOR_NAME \ -a ate-demoLa reprise de l'acteur l'attribue à une charge de travail disponible, restaure son instantané mémoire et rattache le volume Filestore existant à
/mnt/sharedavec tous les fichiers intacts.
Étapes suivantes
- Configurez l'environnement pour GKE.
- Configurez des bacs à sable préchauffés avec Agent Sandbox.
- Découvrez le stockage dynamique avec la liaison tardive du bac à sable de l'agent.