Si vous utilisez des volumes d'agent Filestore avec votre propre plate-forme d'orchestration, des bacs à sable basés sur des VM ou des environnements de conteneurs non Google Kubernetes Engine (GKE), vous pouvez provisionner et gérer des volumes individuels dans un pool de volumes directement à l'aide de l'API REST Filestore.
Avant de commencer
- Effectuez la configuration initiale du projet et de la mise en réseau Private Service Connect (PSC) dans Configurer des volumes d'agent Filestore.
- Créez un pool de volumes régional dans Créer et gérer des pools de volumes.
Créer un volume
API REST
Pour provisionner un volume individuel dans un pool de volumes, envoyez une requête HTTP POST au point de terminaison volumes.create :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes?volumeId=VOLUME_ID" \
-d '{
"description": "Dynamic tool scratchpad for Agent Worker 12",
"labels": {
"agent_id": "worker-12",
"workflow": "code_eval"
}
}'
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .LOCATION: région contenant le pool de volumes parent, par exempleus-central1.VOLUME_POOL_ID: identifiant du pool de volumes parent.VOLUME_ID: identifiant du volume, correspondant à^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$.
Le provisionnement du volume s'effectue en une à deux secondes. L'API renvoie directement la ressource Volume. Vous pouvez également spécifier un quota de volume personnalisé (quotaMib) et des options d'exportation NFS dynamiques (ipAcls) lors de la création du volume :
{
"name": "projects/my-project/locations/us-central1/volumePools/my-volume-pool/volumes/my-volume",
"description": "Dynamic tool scratchpad for Agent Worker 12",
"mountPoint": {
"ipAddress": "10.128.0.45",
"mountName": "my_volume"
}
}
Notez les valeurs renvoyées dans mountPoint :
ipAddress: adresse IP interne du point de terminaison d'installation NFS dans votre réseau VPC.mountName: composant du chemin d'exportation NFS à installer.
Installer un volume
Après avoir provisionné un volume, votre orchestrateur peut installer l'exportation NFSv3 du volume directement sur n'importe quelle VM cliente ou hôte de conteneur connecté au même réseau VPC :
- Assurez-vous que les utilitaires client NFS sont installés sur l'hôte (par exemple,
nfs-commonsur Debian ou Ubuntu). Créez un répertoire d'installation et installez le volume à l'aide des valeurs
ipAddressetmountNamerenvoyées dans lemountPointdu volume :sudo mkdir -p MOUNT_DIR sudo mount -t nfs -o vers=3,proto=tcp,mountproto=tcp,port=2049,mountport=2050 \ IP_ADDRESS:/MOUNT_NAME MOUNT_DIRRemplacez les éléments suivants :
MOUNT_DIR: chemin d'accès au répertoire local où le volume est installé, par exemple/workspace.IP_ADDRESS: valeurmountPoint.ipAddressrenvoyée lors de la création ou de la récupération du volume.MOUNT_NAME: valeurmountPoint.mountNamerenvoyée lors de la création ou de la récupération du volume.
Gérer les volumes
API REST
Dans chacune des requêtes suivantes, remplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .LOCATION: région contenant le pool de volumes parent.VOLUME_POOL_ID: identifiant du pool de volumes parent.VOLUME_ID: identifiant du volume.
Obtenir les détails d'un volume
Pour afficher les détails d'un volume existant, y compris son mountPoint et son state de cycle de vie actuel :
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID"
Lister les volumes d'un pool
Pour lister tous les volumes provisionnés dans un pool de volumes :
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes"
Mettre à jour le quota de volume
Pour augmenter le quota de stockage d'un volume actif, envoyez une requête HTTP PATCH en spécifiant updateMask=quotaMib. Le quota de volume ne peut être qu'augmenté. Il n'est pas possible de le réduire :
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"quotaMib": 4096
}' \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID?updateMask=quotaMib"
Mettre à jour les LCA d'adresses IP du volume
Pour limiter l'accès NFS à une adresse IP client de bac à sable spécifique ou mettre à jour les règles d'exportation d'adresses IP, envoyez une requête HTTP PATCH en spécifiant updateMask=ipAcls :
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"ipAcls": [
{
"ipRanges": ["10.128.0.50/32"],
"accessMode": "READ_WRITE"
}
]
}' \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID?updateMask=ipAcls"
Supprimer un volume
Lorsqu'une session d'agent se termine ou qu'un bac à sable éphémère s'arrête, supprimez le volume pour récupérer le quota dans le pool :
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID"
Cloner l'espace de travail avec un instantané de volume
Si vous disposez déjà d'un pool de volumes à l'état READY et d'un volume source existant à l'état HOT, vous pouvez créer un instantané de volume pour capturer l'état d'un volume d'agent à un moment précis, afin de pouvoir cloner ou créer des branches d'espaces de travail ultérieurement.
API REST
Créer un instantané de volume
Envoyez une requête HTTP
POSTau point de terminaisonbackups.create, en spécifiant le nom complet de la ressource du volume dans le champsourceVolumeet en remplaçantSNAPSHOT_IDpar un identifiant unique pour l'instantané :curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "sourceVolume": "projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID", "description": "Baseline workspace snapshot" }' \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/backups?backupId=SNAPSHOT_ID"La requête renvoie une opération de longue durée (LRO). Interrogez l'opération ou la ressource d'instantané jusqu'à ce que son
statesoitREADYavant de cloner des volumes à partir de celle-ci :curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/backups/SNAPSHOT_ID"
Cloner un volume à partir d'un instantané
Pour cloner un volume à partir d'un instantané, l'instantané source doit provenir d'un volume du même pool de volumes.
Envoyez une requête HTTP
POSTau point de terminaisonvolumes:createFromSource. TransmettezipAclsdans le corps de la requête pour configurer les autorisations d'exportation et activer le volume cloné dans le niveauHOT:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "backup": "projects/PROJECT_ID/locations/LOCATION/backups/SNAPSHOT_ID", "volumeId": "CLONED_VOLUME_ID", "ipAcls": [ { "ipRanges": ["10.128.0.0/24"], "accessMode": "READ_WRITE", "squashMode": "NO_ROOT_SQUASH" } ] }' \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes:createFromSource"Remplacez les éléments suivants :
SNAPSHOT_ID: ID de l'instantané source dans le même pool de volumes.CLONED_VOLUME_ID: ID du nouveau volume cloné.
La requête renvoie une opération de longue durée. Interrogez l'opération jusqu'à ce que
donesoit défini surtrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
Une fois l'opération terminée, appelez
volumes.get(ou inspectez la réponse de l'opération terminée) pour récupérer lemountPoint(ipAddressetmountName) du nouveau volume avant de l'installer :curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/CLONED_VOLUME_ID"
Le clonage de volume à partir d'instantanés s'effectue en trois secondes par Go ou en 1,5 seconde pour 10 000 fichiers.
Définir le niveau d'un volume sur COLD
API REST
Pour transférer un espace de travail inactif vers un stockage à froid, envoyez une requête HTTP PATCH mettant à jour l'état du volume sur COLD et effaçant ipAcls :
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"state": "COLD",
"ipAcls": []
}' \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID?updateMask=state,ipAcls"
Pour restaurer un volume du niveau COLD vers le niveau HOT lorsqu'une session d'agent reprend :
Appelez la méthode personnalisée
unfreezeen transmettantipAclsdans le corps de la requête pour configurer l'accès client et activer le point d'installation du volume dans le niveauHOT:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "ipAcls": [ { "ipRanges": ["10.128.0.0/24"], "accessMode": "READ_WRITE", "squashMode": "NO_ROOT_SQUASH" } ] }' \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID:unfreeze"La requête renvoie une opération de longue durée. Interrogez l'opération jusqu'à ce que
donesoit défini surtrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
Lorsqu'un volume est restauré à partir du niveau
COLD, Filestore attribue un nouveau point de terminaison d'installation NFS à partir du pool de volumes. Par conséquent,mountPoint.ipAddressetmountPoint.mountNamechangent. Récupérez lemountPointmis à jour à partir de la réponse de l'opération terminée ou en appelantvolumes.getavant de remonter le volume :curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID"
Étapes suivantes
- Gérer et surveiller les pools de volumes.
- Configurez l'environnement GKE pour les volumes d'agent Filestore.