이 페이지에서는 다음 작업을 수행하는 방법을 설명합니다.
영역 위치를 사용하여 버킷을 만듭니다.
Cloud Storage FUSE를 사용하여 영역 버킷을 로컬 파일 시스템에 마운트합니다.
Storage Transfer Service를 사용하여 기존 버킷과 영역 버킷 간에 데이터를 전송합니다.
영역에 버킷 만들기
시작하기 전에
아직 버킷을 만들지 않았다면 버킷을 만드는 데 필요한 역할을 가져옵니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 만들기를 클릭합니다.
- 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 각 단계를 완료한 후 계속을 클릭하여 다음 단계로 진행합니다.
-
시작하기 섹션에서 다음을 수행합니다.
-
버킷 이름 요구사항을 충족하는 전역적으로 고유한 이름을 입력합니다.
-
-
데이터 저장 위치 선택 섹션에서 다음을 수행합니다.
-
데이터 저장 방법 선택 섹션에서 빠른 스토리지가 기본 스토리지 클래스로 선택됩니다.
-
객체 액세스를 제어하는 방식 선택 섹션에서 버킷이 공개 액세스 방지를 적용할지 여부를 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.
-
객체 데이터가 암호화되는 방식을 선택하려면 데이터 암호화라는 라벨이 표시된 확장 화살표를 클릭하고 데이터 암호화 방법을 선택합니다.
-
만들기를 클릭합니다.
명령줄
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
개발 환경에서
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
다음 명령어는 Cloud Storage 버킷에 대해 FIO 테스트를 실행하는 Google Kubernetes Engine 클러스터에 구성을 적용합니다. 버킷은 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 VM
다음 안내에서는 Compute Engine VM에서 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-60001msecStorage Transfer Service로 데이터 전송
Storage Transfer Service를 사용하여 영역 버킷과 다른 Cloud Storage 버킷 간에 데이터를 전송할 수 있습니다.
필수 권한
Cloud Storage 버킷 간 전송에는 에이전트리스 전송 권한에 나열된 IAM 역할이 필요합니다.
또한 영역 버킷은 계층적 네임스페이스를 사용하므로 Storage Transfer Service 서비스 에이전트에는 다음 IAM 권한이 부여되어야 합니다.
소스가 영역 버킷인 경우:
- 에이전트 없는 전송 권한에 나열된 사전 정의된 역할을 사용하는 경우 추가 조치가 필요하지 않습니다.
필요한 권한 (
storage.folders.list)은 이미 스토리지 객체 뷰어 (roles/storage.objectViewer) 역할에 포함되어 있습니다.
- 에이전트 없는 전송 권한에 나열된 사전 정의된 역할을 사용하는 경우 추가 조치가 필요하지 않습니다.
필요한 권한 (
대상 버킷이 영역 버킷인 경우:
- 서비스 에이전트에 스토리지 객체 사용자 (
roles/storage.objectUser) 역할을 부여해야 합니다. 이렇게 하면 필요한storage.folders.create권한이 제공됩니다.
- 서비스 에이전트에 스토리지 객체 사용자 (
서비스 에이전트에 역할을 추가하는 방법은 다음을 참고하세요.
제한사항
지원되는 전송:
- 전송은 다른 영역 버킷을 비롯한 다른 Cloud Storage 위치의 영역 버킷과 버킷 간에 지원됩니다.
지원되지 않는 기능:
- 이벤트 기반 전송
- 버킷 간 복제
- 에이전트 기반 전송
완료되지 않은 객체:
- 미완료 객체를 리전 버킷에서 전송할 때 전송이 진행되는 동안 객체에 적용된 변경사항이 대상 버킷의 데이터에 반영되지 않을 수 있습니다.
- 완료되지 않은 소스 객체가 대상 버킷에서 완료된 것으로 표시됩니다.
전송 만들기
시작하려면 Storage Transfer Service로 전송 만들기를 참고하세요.