Se você usa volumes do agente do Filestore com sua própria plataforma de orquestração, sandboxes baseados em VM ou ambientes de contêiner que não são do Google Kubernetes Engine (GKE), é possível provisionar e gerenciar volumes individuais dentro de um pool de volumes diretamente usando a API REST do Filestore.
Antes de começar
- Conclua a configuração inicial do projeto e da rede do Private Service Connect (PSC) em Configurar volumes do agente do Filestore.
- Criar um pool de volumes regional em Criar e gerenciar pools de volumes.
Criar um volume
API REST
Para provisionar um volume individual dentro de um pool de volumes, envie uma solicitação HTTP POST
para o endpoint 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"
}
}'
Substitua:
PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a região que contém o pool de volumes pai, comous-central1.VOLUME_POOL_ID: o identificador do pool de volumes pai.VOLUME_ID: o identificador do volume, correspondente a^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$.
O provisionamento de volume é concluído em um a dois segundos. A API retorna o recurso Volume diretamente. Também é possível especificar uma cota de volume personalizada
(quotaMib) e opções de exportação NFS dinâmicas (ipAcls) durante a criação do 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"
}
}
Observe os valores retornados em mountPoint:
ipAddress: o endereço IP interno do endpoint de montagem do NFS na sua rede VPC.mountName: o componente do caminho de exportação do NFS a ser montado.
Montar um volume
Depois de provisionar um volume, o orquestrador pode montar a exportação NFSv3 do volume diretamente em qualquer VM cliente ou host de contêiner conectado à mesma rede VPC:
- Verifique se os utilitários do cliente NFS estão instalados no host (por exemplo,
nfs-commonno Debian ou no Ubuntu). Crie um diretório de montagem e monte o volume usando o
ipAddresse omountNameretornados nomountPointdo 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_DIRSubstitua:
MOUNT_DIR: o caminho do diretório local em que o volume está montado, como/workspace.IP_ADDRESS: o valor demountPoint.ipAddressretornado ao criar ou recuperar o volume.MOUNT_NAME: o valor demountPoint.mountNameretornado ao criar ou recuperar o volume.
Gerenciar volumes
API REST
Em cada uma das solicitações a seguir, substitua:
PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a região que contém o pool de volumes pai.VOLUME_POOL_ID: o identificador do pool de volumes pai.VOLUME_ID: o identificador do volume.
Ver detalhes do volume
Para conferir detalhes de um volume, incluindo o mountPoint e o state do ciclo de vida atual:
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"
Listar volumes em um pool
Para listar todos os volumes provisionados em um 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"
Atualizar cota de volume
Para aumentar a cota de armazenamento de um volume ativo, envie uma solicitação HTTP PATCH
especificando updateMask=quotaMib. A cota de volume só pode ser aumentada.
Não é possível reduzir a cota de volume:
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"
Atualizar ACLs de IP de volume
Para restringir o acesso do NFS a um endereço IP de cliente de sandbox específico ou atualizar as regras de exportação de IP, envie uma solicitação HTTP PATCH especificando 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"
Excluir um volume
Quando uma sessão de agente é concluída ou um sandbox temporário é encerrado, exclua o volume para recuperar a cota no 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"
Clonar espaço de trabalho com snapshot de volume
Se você já tiver um pool de volumes em um estado READY e um volume de origem
no estado HOT, poderá criar um snapshot de volume para capturar o
estado pontual de um volume de agente para clonar ou ramificar
espaços de trabalho mais tarde.
API REST
Criar um snapshot de volume
Envie uma solicitação HTTP
POSTpara o endpointbackups.create, especificando o nome completo do recurso do volume no camposourceVolumee substituindoSNAPSHOT_IDpor um identificador exclusivo para o snapshot: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"A solicitação retorna uma operação de longa duração (LRO, na sigla em inglês). Sonde a operação ou consulte o recurso de snapshot até que o
statesejaREADYantes de clonar volumes dele:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/backups/SNAPSHOT_ID"
Clonar um volume de um snapshot
Para clonar um volume de um snapshot, o snapshot de origem precisa ser de um volume no mesmo pool de volumes.
Envie uma solicitação HTTP
POSTpara o endpointvolumes:createFromSource. TransmitaipAclsno corpo da solicitação para configurar as permissões de exportação e ativar o volume clonado no nívelHOT: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"Substitua:
SNAPSHOT_ID: o ID do snapshot de origem no mesmo pool de volumes.CLONED_VOLUME_ID: o ID do novo volume clonado.
A solicitação retorna uma operação de longa duração. Sonde a operação até que
donesejatrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
Depois que a operação for concluída, chame
volumes.get(ou inspecione a resposta da operação concluída) para recuperar omountPointdo novo volume (ipAddressemountName) antes de montar: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"
A clonagem de volumes de snapshots é concluída em 3 segundos por GB ou 1,5 segundo por 10.000 arquivos.
Atribuir um volume ao nível COLD
API REST
Para transferir um espaço de trabalho inativo para o armazenamento frio, envie uma solicitação HTTP PATCH
atualizando o estado do volume para COLD e limpando 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 restaurar um volume do nível COLD para o nível HOT quando uma sessão de agente
for retomada:
Chame o método personalizado
unfreeze, transmitindoipAclsno corpo da solicitação para configurar o acesso do cliente e ativar o ponto de montagem do volume no nívelHOT: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"A solicitação retorna uma operação de longa duração. Sonde a operação até que
donesejatrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
Quando um volume é restaurado do nível
COLD, o Filestore atribui um novo endpoint de montagem NFS do pool de volumes, de modo quemountPoint.ipAddressemountPoint.mountNamemudam. Recupere omountPointatualizado da resposta da operação concluída ou chamandovolumes.getantes de remontar o 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"
A seguir
- Gerenciar e monitorar pools de volumes.
- Configure o ambiente do GKE para volumes do agente do Filestore.