本页面介绍了如何执行以下操作:
创建具有区域级位置的存储桶。
使用 Cloud Storage FUSE 将区域级存储桶装载到本地文件系统。
转移数据,使用 Storage Transfer Service 在现有存储桶和区域级存储桶之间转移数据。
在区域中创建存储桶
准备工作
控制台
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
- 点击 创建。
在创建存储桶 页面上,输入您的存储桶信息。完成以下每个步骤后,点击 继续 以继续执行下一步:
-
在开始使用 部分中,执行以下操作:
-
输入符合 存储桶名称要求的全局唯一的名称。
-
-
在选择存储数据的位置 部分中,执行以下操作:
-
在选择数据存储方式 部分中,系统默认选择 Rapid Storage 作为 存储类别。
-
在选择如何控制对对象的访问权限 部分中,选择 存储桶是否强制执行 禁止公开访问,然后为存储桶 对象选择访问权限控制模型。
-
在选择如何保护对象数据 部分中,执行以下操作:
-
如需选择对象数据的加密方式,请点击标有数据加密的展开箭头,然后执行以下操作:
- 在默认加密密钥类型 部分中,选择存储桶的默认加密密钥 。如果您选择 Cloud KMS 密钥,请提供 Cloud Key Management Service 密钥。
- 在加密强制执行规则 部分中,对于密钥类型,请选择 允许或限制存储桶中新对象的加密类型。
-
-
点击 创建 。
命令行
-
在 Google Cloud 控制台中,激活 Cloud Shell。
Cloud Shell 会话随即会在控制台的底部启动,并显示命令行提示符。 Google Cloud 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 装载 Rapid 存储:
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.folders.list) 已包含在 Storage Object Viewer (roles/storage.objectViewer) 角色中。
- 使用
无代理转移权限中列出的预定义角色时,无需执行其他操作。
必要的权限 (
当目标是区域级存储桶时:
- 您必须向服务代理授予 Storage Object User (
roles/storage.objectUser) 角色。这会提供所需的storage.folders.create权限。
- 您必须向服务代理授予 Storage Object User (
如需了解如何向服务代理添加角色,请参阅:
限制
支持的转移 :
- 支持在区域级存储分区与任何其他 Cloud Storage 位置(包括其他区域级存储分区)中的存储分区之间转移数据。
不支持的功能 :
- 事件驱动型转移
- 跨存储桶复制
- 基于代理的转移
未最终确定的对象 :
- 从区域级存储桶转移未最终确定的对象时,目标存储桶中的数据可能无法反映在转移过程中对对象所做的更改。
- 未最终确定的源对象在目标存储桶中标记为已最终确定。
创建传输作业
如需了解使用入门,请参阅使用 Storage Transfer Service 创建传输作业。