이 페이지에서는 다음 작업을 수행하는 방법을 설명합니다.
Cloud Storage FUSE를 사용하여 영역 버킷을 로컬 파일 시스템에 마운트합니다.
데이터를 전송하려면 Storage Transfer Service 를 사용하여 기존 버킷과 영역 버킷 간에 데이터를 전송합니다.
영역에서 버킷 만들기
시작하기 전에
아직 버킷을 만드는 데 필요한 역할을 가져오지 않았다면, 가져옵니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 만들기를 클릭합니다.
- 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 각 단계를 완료한 후 계속을 클릭하여 다음 단계로 진행합니다.
-
시작하기 섹션에서 다음을 수행합니다.
-
버킷 이름 요구사항을 충족하는 전역적으로 고유한 이름을 입력합니다.
-
-
데이터 저장 위치 선택 섹션에서 다음을 수행합니다.
-
데이터 저장 방법 선택 섹션에서 Rapid 스토리지가 기본 스토리지 클래스로 선택됩니다.
-
객체 액세스를 제어하는 방식 선택 섹션에서 버킷이 공개 액세스 방지를 적용할지 여부를 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.
-
객체 데이터가 암호화되는 방식을 선택하려면 확장 화살표를 클릭하고 데이터 암호화라는 라벨이 표시된 데이터 암호화 방법을 선택합니다.
-
만들기 를 클릭합니다.
명령줄
-
콘솔에서 Cloud Shell을 활성화합니다. Google Cloud
콘솔 하단에 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Google Cloud Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.
개발 환경에서
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를 사용하여 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-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로 전송 만들기를 참조하세요.