Si usas volúmenes de agentes de Filestore con tu propia plataforma de organización, entornos de pruebas basados en VM o entornos de contenedores que no sean de Google Kubernetes Engine (GKE), puedes aprovisionar y administrar volúmenes individuales dentro de un grupo de volúmenes directamente con la API de REST de Filestore.
Antes de comenzar
- Completa la configuración inicial del proyecto y de las redes de Private Service Connect (PSC) en Configura los volúmenes de agentes de Filestore.
- Crea un grupo de volúmenes regional en Crea y administra grupos de volúmenes.
Crear un volumen
API de REST
Para aprovisionar un volumen individual dentro de un grupo de volúmenes, envía una solicitud HTTP POST
al extremo 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"
}
}'
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .LOCATION: Es la región que contiene el grupo de volúmenes superior, comous-central1.VOLUME_POOL_ID: Es el identificador del grupo de volúmenes superior.VOLUME_ID: Es el identificador del volumen, que coincide con^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$.
El aprovisionamiento de volúmenes se completa en menos de uno o dos segundos. La API devuelve el
recurso Volume directamente. También puedes especificar una cuota de volumen personalizada
(quotaMib) y opciones de exportación de NFS dinámicas (ipAcls) durante la creación del volumen:
{
"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"
}
}
Toma nota de los valores que se muestran dentro de mountPoint:
ipAddress: Es la dirección IP interna del extremo de activación de NFS dentro de tu red de VPC.mountName: Es el componente de la ruta de acceso de exportación de NFS que se activará.
Activa un volumen
Después de aprovisionar un volumen, el organizador puede activar la exportación de NFSv3 del volumen directamente en cualquier VM de cliente o host de contenedor conectado a la misma red de VPC:
- Asegúrate de que las utilidades del cliente de NFS estén instaladas en el host (por ejemplo,
nfs-commonen Debian o Ubuntu). Crea un directorio de activación y activa el volumen con el
ipAddressy elmountNameque se muestran en elmountPointdel volumen: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_DIRReemplaza lo siguiente:
MOUNT_DIR: Es la ruta de acceso del directorio local en la que se activa el volumen, como/workspace.IP_ADDRESS: Es el valormountPoint.ipAddressque se devuelve cuando se crea o recupera el volumen.MOUNT_NAME: Es el valormountPoint.mountNameque se devuelve cuando se crea o recupera el volumen.
Administra volúmenes
API de REST
En cada una de las siguientes solicitudes, reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .LOCATION: Es la región que contiene el grupo de volúmenes superior.VOLUME_POOL_ID: Es el identificador del grupo de volúmenes superior.VOLUME_ID: Es el identificador del volumen.
Obtén detalles del volumen
Para ver los detalles de un volumen existente, incluidos su mountPoint y su state de ciclo de vida
actual, haz lo siguiente:
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"
Enumera los volúmenes de un grupo
Para enumerar todos los volúmenes aprovisionados en un grupo de volúmenes, haz lo siguiente:
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"
Actualiza la cuota de volumen
Para aumentar la cuota de almacenamiento de un volumen activo, envía una solicitud HTTP PATCH
que especifique updateMask=quotaMib. La cuota de volumen solo se puede aumentar,
no se admite reducirla:
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"
Actualiza las ACL de IP del volumen
Para restringir el acceso de NFS a una dirección IP de cliente de zona de pruebas específica o actualizar las reglas de exportación de IP, envía una solicitud HTTP PATCH que especifique 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"
Borra un volumen
Cuando finaliza una sesión de agente o una zona de pruebas efímera, borra el volumen para recuperar la cuota dentro del grupo:
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"
Clona el espacio de trabajo con una instantánea de volumen
Si ya tienes un grupo de volúmenes en estado READY y un volumen de origen existente
en estado HOT, puedes crear una instantánea de volumen para capturar el
estado de un volumen de agente en un momento determinado y, así, clonar o ramificar
los espacios de trabajo más adelante.
API de REST
Crea una instantánea de volumen
Envía una solicitud HTTP
POSTal extremobackups.create, especifica el nombre de recurso completo del volumen en el camposourceVolumey reemplazaSNAPSHOT_IDpor un identificador único para la instantánea: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 solicitud devuelve una operación de larga duración (LRO). Sondea la operación o consulta el recurso de instantánea hasta que su
stateseaREADYantes de clonar volúmenes a partir de él:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/backups/SNAPSHOT_ID"
Clona un volumen a partir de una instantánea
Para clonar un volumen a partir de una instantánea, la instantánea de origen debe ser de un volumen del mismo grupo de volúmenes.
Envía una solicitud
POSTHTTP al extremovolumes:createFromSource. PasaipAclsen el cuerpo de la solicitud para configurar los permisos de exportación y activar el volumen clonado en el nivelHOT: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"Reemplaza lo siguiente:
SNAPSHOT_ID: Es el ID de la instantánea de origen en el mismo grupo de volúmenes.CLONED_VOLUME_ID: Es el ID del volumen clonado nuevo.
La solicitud devuelve una operación de larga duración. Sondea la operación hasta que
doneseatrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
Una vez que se complete la operación, llama a
volumes.get(o inspecciona la respuesta de la operación completada) para recuperar elmountPoint(ipAddressymountName) del volumen nuevo antes de activarlo: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"
La clonación de volúmenes a partir de instantáneas se completa en 3 segundos por GB o 1.5 segundos por cada 10,000 archivos.
Asigna un volumen al nivel COLD
API de REST
Para transferir un espacio de trabajo inactivo al almacenamiento en frío, envía una solicitud HTTP PATCH
que actualice el estado del volumen a COLD y borre 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"
Para restablecer un volumen del nivel COLD al nivel HOT cuando se reanuda una sesión
del agente, haz lo siguiente:
Llama al método personalizado
unfreezey pasaipAclsen el cuerpo de la solicitud para configurar el acceso del cliente y activar el punto de activación del volumen en el nivelHOT: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 solicitud devuelve una operación de larga duración. Sondea la operación hasta que
doneseatrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
Cuando se restablece un volumen desde el nivel
COLD, Filestore asigna un nuevo extremo de activación de NFS desde el grupo de volúmenes, por lo quemountPoint.ipAddressymountPoint.mountNamecambian. Recupera elmountPointactualizado de la respuesta de la operación completada o llama avolumes.getantes de volver a activar el volumen: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"
¿Qué sigue?
- Administra y supervisa los grupos de volúmenes.
- Configura el entorno de GKE para los volúmenes de agentes de Filestore.