Criar buckets zonais

Esta página explica como fazer o seguinte:

  • Crie um bucket com um local zonal.

  • Monte o bucket zonal no sistema de arquivos local usando o Cloud Storage FUSE.

  • Transfira 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 tiver feito isso, receba as funções necessárias para criar buckets.

Console

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acesse Buckets

  2. Clique em Criar.
  3. 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:

    1. Na seção Começar, faça o seguinte:

    2. Na seção Escolha onde armazenar seus dados, faça o seguinte:

      1. Selecione Zona como o Tipo de local.

      2. Use o menu suspenso do tipo de local para selecionar um Local em que os dados de objetos no bucket serão armazenados permanentemente.

    3. Na seção Escolher como armazenar seus dados, o Rapid Storage é selecionado como a classe de armazenamento padrão.

    4. 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.

    5. Na seção Escolha como proteger os dados do objeto, faça o seguinte:

      • Para escolher como criptografar os dados do objeto, clique na seta de expansão identificada como Criptografia de dados e faça o seguinte:

  4. Clique em Criar.

Linha de comando

  1. No console do Google Cloud , ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  2. No ambiente de desenvolvimento, execute o comando gcloud storage buckets create:

    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_NAME com o nome que você quer dar ao bucket, sujeito a requisitos de nomenclatura. Por exemplo, rapid-storage-bucket.

    • BUCKET_LOCATION com uma região do bucket. Por exemplo, us-east1.

    • BUCKET_ZONE com a 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/...

Ative o bucket zonal usando o Cloud Storage FUSE

Antes de começar

Nesta seção, presumimos que você já tenha acesso ao Cloud Storage FUSE. Se você ainda não fez isso, siga estas etapas de pré-requisito:

  1. Instale o Cloud Storage FUSE. Instale a versão 3.4.0 ou mais recente do Cloud Storage FUSE.
  2. Autenticar solicitações do Cloud Storage FUSE.
  3. Se você não criou o bucket que quer montar, receba os papéis necessários para montar o bucket.

Para montar um bucket zonal usando o Cloud Storage FUSE, use os seguintes comandos:

mkdir MOUNT_POINT
gcsfuse BUCKET_NAME MOUNT_POINT

Substitua:

  • MOUNT_POINT com o diretório local para ativar o bucket. Por exemplo, $HOME/example-bucket.

  • BUCKET_NAME com o nome do bucket a ser montado.

Por exemplo, os comandos a seguir montam um bucket chamado example-rapid-storage-bucket no ponto de montagem source-bucket:

mkdir $HOME/source-bucket
gcsfuse example-rapid-storage-bucket $HOME/source-bucket

Se você quiser transferir objetos de um bucket para um bucket zonal, monte os dois e use o comando cp para transferir os objetos.

Comparativo de mercado do desempenho com um teste FIO

Para comparar a velocidade de um bucket zonal, execute um teste 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 do FIO em uma VM do Compute Engine.

  1. Monte um armazenamento rápido usando o Cloud Storage FUSE:
mkdir $HOME/rapid-mnt
gcsfuse --max-retry-attempts=5 <bucket-name> PATH

Substitua:

  • PATH com o caminho do sistema de arquivos local em que você quer ativar o bucket.
  1. Se você ainda não fez isso, instale o FIO:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install fio -y
  1. Execute um exemplo de teste de latência de leitura do 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_PATH pelo caminho para o bucket que você montou.

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-60001msec

Transferir dados com o Serviço de transferência do Cloud Storage

Use 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 as funções do IAM listadas 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 adicional é 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).
  • Quando o destino é um bucket zonal:

    • Conceda o papel de Usuário de objetos do Storage (roles/storage.objectUser) ao agente de serviço. Isso fornece a permissão storage.folders.create necessária.

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.

A seguir