Esta página explica como fazer o seguinte:
Criar um bucket com um local zonal.
Ativar o bucket zonal no sistema de arquivos local usando Cloud Storage FUSE.
Transferir dados entre um bucket atual e o bucket zonal usando o Serviço de transferência do Cloud Storage.
Criar um bucket em uma zona
Antes de começar
Se ainda não fez isso, receba os papéis necessários para criar buckets.
Console
- No Google Cloud console do, acesse a página Buckets do Cloud Storage.
- Clique em Criar.
- Na página Criar um bucket, insira as informações do seu bucket. Após
cada uma das etapas a seguir, clique em Continuar para prosseguir para a próxima
etapa:
-
Na seção Começar, faça o seguinte:
-
Insira um nome globalmente exclusivo que atenda aos requisitos de nome do bucket.
-
-
Na seção Escolha onde armazenar seus dados, faça o seguinte:
-
Selecione Zona como o tipo de local.
-
Use o menu suspenso do tipo de local para selecionar um Local em que os dados de objetos no bucket serão armazenados permanentemente.
-
-
Na seção Escolha como armazenar seus dados, o Rapid Storage é selecionado como a classe de armazenamento padrão.
-
Na seção Escolha como controlar o acesso a objetos , selecione se o bucket aplica ou não a prevenção de acesso público e selecione um modelo de controle de acesso para os objetos do bucket.
-
Para escolher como os dados do objeto serão criptografados, clique na seta do expansor rotulada como Criptografia de dados e selecione um método de Criptografia de dados.
-
Clique em Criar.
Linha de comando
-
No Google Cloud console do, ative o Cloud Shell.
Na parte de baixo do Google Cloud console do Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a Google Cloud CLI já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
No ambiente de desenvolvimento, execute o
gcloud storage buckets createcomando:gcloud storage buckets create \ gs://BUCKET_NAME --location=BUCKET_LOCATION --placement=BUCKET_ZONE \ --default-storage-class=RAPID --enable-hierarchical-namespace --uniform-bucket-level-access
Substitua:
BUCKET_NAMEpelo nome que você quer dar ao seu bucket, sujeito aos requisitos de nomenclatura. Por exemplo,rapid-storage-bucket.BUCKET_LOCATIONpor uma região do bucket. Por exemplo,us-east1.BUCKET_ZONEpela zona em que você quer localizar o bucket. Por exemplo,us-east1-b.
Se a solicitação for bem-sucedida, o comando retornará a seguinte mensagem:
Creating gs://rapid-storage-bucket/...
Ativar o bucket zonal usando o Cloud Storage FUSE
Antes de começar
Esta seção pressupõe que você já tenha acesso ao Cloud Storage FUSE. Se ainda não fez isso, siga estas etapas de pré-requisito:
- Instale o Cloud Storage FUSE. Instale a versão 3.4.0 ou mais recente do Cloud Storage FUSE.
- Autenticar solicitações do Cloud Storage FUSE.
- Se você não criou o bucket que quer ativar, receba os papéis necessários para ativar o bucket.
Para ativar um bucket zonal usando o Cloud Storage FUSE, use os seguintes comandos:
mkdir MOUNT_POINTgcsfuse BUCKET_NAME MOUNT_POINT
Substitua:
MOUNT_POINTpelo diretório local para ativar o bucket. Por exemplo,$HOME/example-bucket.BUCKET_NAMEpelo nome do bucket a ser ativado.
Por exemplo, os comandos a seguir ativam um bucket chamado example-rapid-storage-bucket no ponto de ativação source-bucket:
mkdir $HOME/source-bucketgcsfuse example-rapid-storage-bucket $HOME/source-bucket
Se você quiser transferir objetos de um bucket atual para o novo bucket zonal, ative os dois buckets e use o comando cp para transferir os objetos.
Comparar a performance com um teste de FIO
Para comparar a velocidade de um bucket zonal, execute um teste de FIO.
Google Kubernetes Engine
O comando a seguir aplica uma configuração ao cluster do Google Kubernetes Engine que executa um teste de FIO em um bucket do Cloud Storage. O bucket é ativado no sistema de arquivos do contêiner usando o driver CSI do FUSE para GKE.
$ cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: fio
namespace: default
annotations:
gke-gcsfuse/volumes: "true"
spec:
containers:
- name: fio
image: mayadata/fio
command: ["/bin/ash", "-c", "--"]
args:
- |
fio --name=read_latency_test --filename=/data/fio --filesize=1G --time_based=1 --ramp_time=10s --runtime=1m --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 --bs=4K --iodepth=1 --rw=randread --disable_slat=1 --disable_clat=1 --lat_percentiles=1 --numjobs=1
volumeMounts:
- name: fio-bucket
mountPath: /data
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- ZONE_NAME
serviceAccountName: default
volumes:
- name: fio-bucket
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: "BUCKET_NAME"
gcsfuseLoggingSeverity: warning
restartPolicy: Never
EOF
Em que:
ZONE_NAMEé a zona em que o bucket está localizado. Por exemplo,us-east4-a.BUCKET_NAMEé o nome do bucket. Por exemplo,my-bucket.
Se o teste for bem-sucedido, ele vai gerar uma resposta semelhante a esta:
$ kubectl logs fio
Defaulted container "fio" out of: fio, gke-gcsfuse-sidecar (init)
read_latency_test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.36
Starting 1 process
read_latency_test: (groupid=0, jobs=1): err= 0: pid=11: Mon Mar 3 20:38:14 2025
read: IOPS=591, BW=2365KiB/s (2422kB/s)(139MiB/60001msec)
lat (usec): min=867, max=181966, avg=1685.32, stdev=2695.84
lat percentiles (usec):
| 1.00th=[ 1074], 5.00th=[ 1188], 10.00th=[ 1254], 20.00th=[ 1336],
| 30.00th=[ 1401], 40.00th=[ 1467], 50.00th=[ 1549], 60.00th=[ 1614],
| 70.00th=[ 1713], 80.00th=[ 1844], 90.00th=[ 2057], 95.00th=[ 2278],
| 99.00th=[ 3064], 99.50th=[ 3654], 99.90th=[ 8717], 99.95th=[ 73925],
| 99.99th=[131597]
bw ( KiB/s): min= 1290, max= 2736, per=100.00%, avg=2365.51, stdev=244.10, samples=120
iops : min= 322, max= 684, avg=591.34, stdev=61.10, samples=120
cpu : usr=0.81%, sys=1.61%, ctx=36011, majf=0, minf=36
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=35473,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=2365KiB/s (2422kB/s), 2365KiB/s-2365KiB/s (2422kB/s-2422kB/s), io=139MiB (145MB), run=60001-60001msec
VM do Compute Engine
As instruções a seguir executam um teste de FIO em uma VM do Compute Engine.
- Ative um armazenamento rápido usando o Cloud Storage FUSE:
mkdir $HOME/rapid-mnt
gcsfuse --max-retry-attempts=5 <bucket-name> PATH
Substitua:
PATHpelo caminho do sistema de arquivos local em que você quer ativar o bucket.
- Se ainda não fez isso, instale o FIO:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install fio -y
- Execute um exemplo de teste de latência de leitura de FIO:
fio --name=read_latency_test \
--filename=BUCKET_PATH/1G --filesize=1G \
--time_based=1 --ramp_time=10s --runtime=1m \
--ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
--bs=4K --iodepth=1 --rw=randread --numjobs=1
Substitua:
BUCKET_PATHpelo caminho do bucket ativado.
Se o teste for bem-sucedido, ele vai gerar uma resposta semelhante a esta:
read_latency_test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.33
Starting 1 process
Jobs: 1 (f=1): [f(1)][100.0%][eta 00m:00s]
read_latency_test: (groupid=0, jobs=1): err= 0: pid=78399: Tue Feb 11 21:14:35 2025
read: IOPS=622, BW=2490KiB/s (2550kB/s)(146MiB/60001msec)
slat (usec): min=108, max=13857, avg=1596.92, stdev=243.32
clat (nsec): min=1539, max=141717, avg=5872.92, stdev=3230.74
lat (usec): min=112, max=13866, avg=1602.80, stdev=244.13
clat percentiles (nsec):
| 1.00th=[ 2960], 5.00th=[ 3856], 10.00th=[ 4320], 20.00th=[ 4704],
| 30.00th=[ 4896], 40.00th=[ 5088], 50.00th=[ 5280], 60.00th=[ 5536],
| 70.00th=[ 5856], 80.00th=[ 6240], 90.00th=[ 7072], 95.00th=[ 8512],
| 99.00th=[21120], 99.50th=[26240], 99.90th=[40704], 99.95th=[51968],
| 99.99th=[75264]
bw ( KiB/s): min= 2024, max= 2672, per=100.00%, avg=2491.15, stdev=105.69, samples=120
iops : min= 506, max= 668, avg=622.77, stdev=26.41, samples=120
lat (usec) : 2=0.06%, 4=6.21%, 10=89.91%, 20=2.61%, 50=1.15%
lat (usec) : 100=0.05%, 250=0.01%
cpu : usr=0.67%, sys=1.79%, ctx=37361, majf=0, minf=37
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=37355,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=2490KiB/s (2550kB/s), 2490KiB/s-2490KiB/s (2550kB/s-2550kB/s), io=146MiB (153MB), run=60001-60001msecTransferir dados com o Serviço de transferência do Cloud Storage
É possível usar o Serviço de transferência do Cloud Storage para transferir dados entre buckets zonais e outros buckets do Cloud Storage.
Permissões necessárias
As transferências entre buckets do Cloud Storage exigem os papéis do IAM listados em Permissões de transferência sem agente.
Além disso, como os buckets zonais usam o namespace hierárquico, o agente de serviço do Serviço de transferência do Cloud Storage precisa receber as seguintes permissões do IAM:
Quando a origem é um bucket zonal:
- Nenhuma ação extra é necessária ao usar os papéis predefinidos listados em
Permissões de transferência sem agente.
A permissão necessária (
storage.folders.list) já está incluída no papel Leitor de objetos do Storage (roles/storage.objectViewer).
- Nenhuma ação extra é necessária ao usar os papéis predefinidos listados em
Permissões de transferência sem agente.
A permissão necessária (
Quando o destino é um bucket zonal:
- Você precisa conceder o papel Usuário de objetos do Storage (
roles/storage.objectUser) ao agente de serviço. Isso fornece a permissãostorage.folders.createnecessária.
- Você precisa conceder o papel Usuário de objetos do Storage (
Para instruções sobre como adicionar papéis ao agente de serviço, consulte:
Limitações
Transferências compatíveis :
- As transferências são compatíveis entre buckets zonais e buckets em qualquer outro local do Cloud Storage, incluindo outros buckets zonais.
Recursos não compatíveis :
- Transferências baseadas em eventos
- Replicação entre buckets
- Transferências baseadas em agentes
Objetos não finalizados :
- Ao transferir objetos não finalizados de um bucket zonal, os dados no bucket de destino podem não refletir as mudanças feitas nos objetos enquanto a transferência está em andamento.
- Os objetos de origem não finalizados são marcados como finalizados no bucket de destino.
Criar uma transferência
Para começar, consulte Criar uma transferência com o Serviço de transferência do Cloud Storage.