קטגוריות לפי אזור, שמוצעות דרך Rapid Bucket, מספקות אחסון עם ביצועים גבוהים וזמן אחזור קצר לאפליקציות שדורשות נתונים באזור גיאוגרפי ספציפי. במאמר הזה מוסבר איך ליצור קטגוריה עם מיקום אזורי ולטעון אותה למערכת הקבצים המקומית באמצעות Cloud Storage FUSE. בנוסף, תלמדו איך להשוות את הביצועים של הקטגוריה ולהעביר נתונים מקטגוריה קיימת באמצעות Storage Transfer Service.
יצירת קטגוריה באזור
לפני שמתחילים
אם עדיין לא עשיתם זאת, קבלו את התפקידים הנדרשים ליצירת קטגוריות.
המסוף
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
- לוחצים על Create.
ממלאים את פרטי הקטגוריה בדף Create a bucket. אחרי כל אחד מהשלבים הבאים, לוחצים על Continue כדי להמשיך לשלב הבא:
-
בקטע Get started:
-
מזינים שם ייחודי ברמה גלובלית שעומד בדרישות לשמות של קטגוריות.
-
-
בקטע Choose where to store your data:
-
בוחרים באפשרות Zone בתור Location type.
-
בתפריט הנפתח של סוג המיקום, בוחרים מיקום שבו נתוני האובייקטים בקטגוריה יישמרו באופן קבוע.
-
-
בקטע Choose how to store your data, האפשרות Rapid storage נבחרת בתור סוג האחסון שמוגדר כברירת מחדל.
-
בקטע Choose how to control access to objects:
-
בוחרים אם הקטגוריה אוכפת מניעת גישה ציבורית.
-
בוחרים באפשרות Uniform כדי להפעיל בקטגוריה הרשאות גישה מאוחדות ברמת הקטגוריה.
-
אם רוצים, אפשר להגדיר סינון IP לקטגוריה.
-
-
בקטע Choose how to protect object data:
-
כדי לבחור איך להצפין את נתוני האובייקט, לוחצים על החץ להרחבה שנקרא Data encryption ומבצעים את הפעולות הבאות:
- בקטע Default encryption key type, בוחרים את מפתח ההצפנה שמוגדר כברירת מחדל לקטגוריה. אם בוחרים באפשרות Cloud KMS key, צריך לספק מפתח של Cloud Key Management Service.
- בקטע Encryption enforcement rules, בשדה Key types בוחרים אילו סוגי הצפנה לאפשר או להגביל לאובייקטים חדשים בקטגוריה.
-
-
לוחצים על יצירה.
שורת הפקודה
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
בסביבת הפיתוח, מריצים את הפקודה
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 שמריץ בדיקת FIO בקטגוריה של Cloud Storage. הקטגוריה נטענת למערכת הקבצים של הקונטיינר באמצעות מנהל התקן ה-CSI של FUSE ל-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
כאשר:
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
בהוראות הבאות מוסבר איך להריץ בדיקת FIO במכונה וירטואלית של Compute Engine.
- טעינת Rapid Storage באמצעות Cloud Storage FUSE:
mkdir $HOME/rapid-mnt
gcsfuse --max-retry-attempts=5 BUCKET_NAME PATH
מחליפים את:
BUCKET_NAMEבשם הקטגוריה.
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) כבר כלולה בתפקיד "צפייה באובייקט אחסון" (roles/storage.objectViewer).
- אם אתם משתמשים בתפקידים המוגדרים מראש שמפורטים בקטע הרשאות להעברה ללא סוכן, אתם לא צריכים לעשות שום דבר נוסף.
ההרשאה הנדרשת (
כשהיעד הוא קטגוריה אזורית:
- אתם צריכים לתת לסוכן השירות את התפקיד Storage Object User (
roles/storage.objectUser). כך מקבלים את ההרשאה הנדרשתstorage.folders.create.
- אתם צריכים לתת לסוכן השירות את התפקיד Storage Object User (
במאמרים הבאים מוסבר איך מוסיפים תפקידים לסוכן השירות:
מגבלות
העברות נתמכות:
- אפשר להעביר נתונים בין קטגוריות אזוריות לבין קטגוריות בכל מיקום אחר ב-Cloud Storage, כולל קטגוריות אזוריות אחרות.
תכונות שלא נתמכות:
- העברות מבוססות-אירועים
- רפליקציה בין קטגוריות
- העברות מבוססות-סוכנים
אובייקטים שלא הושלמו:
- כשמעבירים אובייקטים לא סופיים מקטגוריה אזורית, יכול להיות שהנתונים בקטגוריית היעד לא ישקפו את השינויים שבוצעו באובייקטים בזמן שההעברה מתבצעת.
- אובייקטים של מקור שלא הושלמו מסומנים כהושלמו בקטגוריית היעד.
יצירת העברה
כדי להתחיל, קראו את המאמר יצירת העברה באמצעות Storage Transfer Service.