通过Rapid Bucket提供的区域存储分区可为需要特定地理区域内数据的应用提供高性能、低延迟的存储服务。
本页面介绍了如何执行以下操作:
创建具有地区级位置的存储桶。
使用 Cloud Storage FUSE 将可用区级存储桶装载到本地文件系统。
使用 Storage Transfer Service 在现有存储桶与区域存储桶之间转移数据。
在可用区中创建存储桶
准备工作
如果您尚未获取创建存储分区所需的角色,请获取这些角色。
控制台
- 在 Cloud de Confiance 控制台中,转到 Cloud Storage 存储桶页面。
- 点击 创建。
在创建存储桶页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:
-
在开始使用部分中,执行以下操作:
-
输入符合存储桶名称要求的全局唯一的名称。
-
-
在选择数据存储位置部分中,执行以下操作:
-
在选择数据存储方式部分中,系统会选择快速存储作为默认存储类别。
-
在选择如何保护对象数据部分中,执行以下操作:
-
如需选择如何加密对象数据,请点击标有数据加密的 展开箭头,然后执行以下操作:
- 在默认加密密钥类型部分中,选择相应存储桶的默认加密密钥。如果您选择 Cloud KMS 密钥,请提供 Cloud Key Management Service 密钥。
- 在加密强制执行规则部分中,针对密钥类型,选择要允许或限制哪些加密类型,以用于存储桶中的新对象。
-
-
点击创建。
命令行
-
在 Cloud de Confiance 控制台中,激活 Cloud Shell。
Cloud Shell 会话随即会在 Cloud de Confiance 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。
在开发环境中,运行
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
将
BUCKET_NAME替换为您要为自己的存储桶指定的名称(须遵循命名要求),例如rapid-storage-bucket。将
BUCKET_LOCATION替换为存储桶区域。 例如us-east1。将
BUCKET_ZONE替换为您希望存储桶所在的可用区。例如us-east1-b。
如果请求成功,该命令将返回以下消息:
Creating gs://rapid-storage-bucket/...
使用 Cloud Storage FUSE 装载区域级存储桶
准备工作
本部分假设您已获得 Cloud Storage FUSE 的访问权限。如果您尚未获得,请执行以下前提步骤:
- 安装 Cloud Storage FUSE。请确保您安装的是 Cloud Storage FUSE 3.4.0 版或更高版本。
- 对 Cloud Storage FUSE 请求进行身份验证。
- 如果您没有创建要装载的存储桶,请获取装载存储桶所需的角色。
如需使用 Cloud Storage FUSE 装载地区级存储桶,请使用以下命令:
mkdir MOUNT_POINTgcsfuse BUCKET_NAME MOUNT_POINT
将
将
MOUNT_POINT替换为要将存储桶装载到的本地目录。例如$HOME/example-bucket。将
BUCKET_NAME替换为要装载的存储桶的名称。
例如,以下命令会将名为 example-rapid-storage-bucket 的存储桶装载到 source-bucket 装载点:
mkdir $HOME/source-bucketgcsfuse example-rapid-storage-bucket $HOME/source-bucket
如果您想将对象从现有存储桶转移到区域存储桶,请装载这两个存储桶,然后使用 cp 命令转移对象。
使用 FIO 测试进行性能基准比较
如需对区域存储桶的速度进行基准化分析,请运行 FIO 测试。
Google Kubernetes Engine
以下命令会将配置应用于您的 Google Kubernetes Engine 集群,该集群会针对 Cloud Storage 存储桶运行 FIO 测试。该存储桶使用 GKE 的 FUSE CSI 驱动程序装载到容器的文件系统。
$ 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
其中:
ZONE_NAME是您的存储桶所在的地区。例如us-east4-a。BUCKET_NAME是您的存储桶的名称。 例如my-bucket。
如果测试成功,系统会输出类似于以下内容的响应:
$ 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
Compute Engine 虚拟机
以下说明将在 Compute Engine 虚拟机上运行 FIO 测试。
- 使用 Cloud Storage FUSE 装载快速存储空间:
mkdir $HOME/rapid-mnt
gcsfuse --max-retry-attempts=5 <bucket-name> PATH
将
- 将
PATH替换为要将存储桶装载到的本地文件系统路径。
- 如果您尚未安装 FIO,请进行安装:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install fio -y
- 运行 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
将
- 将
BUCKET_PATH替换为您装载的存储桶的路径。
如果测试成功,系统会输出类似于以下内容的响应:
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使用 Storage Transfer Service 转移数据
您可以使用 Storage Transfer Service 在可用区级存储分区和其他 Cloud Storage 存储分区之间转移数据。
所需权限
在 Cloud Storage 存储分区之间转移数据需要无代理转移权限中列出的 IAM 角色。
此外,由于区域存储分区使用分层命名空间,因此必须向 Storage Transfer Service 服务代理授予以下 IAM 权限:
如果来源是可用区级存储桶:
- 使用无代理转移权限中列出的预定义角色时,无需执行其他操作。
Storage Object Viewer (
roles/storage.objectViewer) 角色已包含必要的权限 (storage.folders.list)。
- 使用无代理转移权限中列出的预定义角色时,无需执行其他操作。
Storage Object Viewer (
当目标位置为区域存储桶时:
- 您必须向服务代理授予 Storage Object User (
roles/storage.objectUser) 角色。这样即可提供所需的storage.folders.create权限。
- 您必须向服务代理授予 Storage Object User (
如需了解如何向服务代理添加角色,请参阅:
限制
支持的转移:
- 支持在区域存储分区与任何其他 Cloud Storage 位置(包括其他区域存储分区)的存储分区之间转移数据。
不支持的功能:
- 事件驱动型转移
- 跨存储桶复制
- 基于代理的转移
未最终确定的对象:
- 从区域存储桶转移未最终确定的对象时,目标存储桶中的数据可能无法反映在转移过程中对对象所做的更改。
- 未最终确定的源对象在目标存储桶中标记为已最终确定。
创建传输作业
如需了解使用入门,请参阅使用 Storage Transfer Service 创建转移作业。