Criar buckets zonais

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

  1. No Google Cloud console do, 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 Escolha 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. 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.

  4. Clique em Criar.

Linha de comando

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

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

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

    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 pelo nome que você quer dar ao seu bucket, sujeito aos requisitos de nomenclatura. Por exemplo, rapid-storage-bucket.

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

    • BUCKET_ZONE pela 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:

  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 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_POINT
gcsfuse BUCKET_NAME MOUNT_POINT

Substitua:

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

  • BUCKET_NAME pelo 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-bucket
gcsfuse 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.

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

Substitua:

  • PATH pelo caminho do sistema de arquivos local em que você quer ativar o bucket.
  1. Se 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 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_PATH pelo 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-60001msec

Transferir 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).
  • 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ã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