באמצעות מנהל התקן ה-CSI של Cloud Storage FUSE, עומסי העבודה ב-GKE יכולים לגשת לקטגוריות של Cloud Storage בתור מערכת קבצים מקומית. מנהל ההתקן של CSI משלב את Cloud Storage עם GKE ומפשט את האופן שבו אפליקציות מבוססות-קונטיינרים מתקשרות עם מערכי נתונים גדולים שמאוחסנים בקטגוריות. מנהל ההתקן של CSI מספק ממשק סטנדרטי לאחסון ב-GKE. במאמר הזה מוסבר איך להכין את הסביבה ולקשר את אשכולות GKE לקטגוריות של Cloud Storage באמצעות מנהל התקן ה-CSI של Cloud Storage FUSE.
המסמך הזה מיועד למפתחים, לאדמינים ולמומחי אחסון שמשלבים עומסי עבודה של GKE עם מאגר אובייקטים. כדי לקבל מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן ב Google Cloud תוכן, אפשר לעיין במאמר תפקידים נפוצים של משתמשי GKE ומשימות.
יצירת קטגוריה של Cloud Storage
אם עדיין לא עשיתם את זה, צרו קטגוריות של Cloud Storage. תתקינו את הדליים האלה כנפחים באשכול GKE. כדי לשפר את הביצועים, מגדירים את Location type ל-Region ובוחרים אזור שתואם לאשכול GKE.
הפעלת מנהל התקן ה-CSI של Cloud Storage FUSE
פועלים לפי השלבים האלה, בהתאם לסוג האשכולות שבהם משתמשים: GKE Autopilot או אשכולות רגילים. כדי ליהנות מחוויית ניהול מלאה של Kubernetes, מומלץ להשתמש באשכול Autopilot. כדי לבחור את המצב שהכי מתאים לעומסי העבודה שלכם, קראו את המאמר בחירת מצב הפעולה של GKE.
טייס אוטומטי
מנהל התקן ה-CSI של Cloud Storage FUSE מופעל כברירת מחדל באשכולות Autopilot. אתם יכולים לדלג לקטע הגדרת הגישה לקטגוריות של Cloud Storage.
רגילה
אם מנהל התקן ה-CSI של Cloud Storage FUSE מופעל באשכול Standard, אפשר לדלג אל הגדרת גישה לקטגוריות של Cloud Storage.
מנהל התקן ה-CSI של Cloud Storage FUSE לא מופעל כברירת מחדל באשכולות רגילים. כדי ליצור אשכול רגיל עם מנהל התקן ה-CSI של Cloud Storage FUSE, אפשר להשתמש בפקודה gcloud container clusters create:
gcloud container clusters create CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION \
--workload-pool=PROJECT_ID.svc.id.goog
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. -
VERSION: מספר הגרסה של GKE. צריך לבחור בגרסה 1.24 ואילך. -
LOCATION: האזור או התחום של Compute Engine של האשכול. PROJECT_ID: מזהה הפרויקט.
כדי להפעיל את הדרייבר באשכול קיים מסוג Standard, משתמשים בפקודה gcloud container clusters update:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
כדי לוודא שמנהל התקן ה-CSI של Cloud Storage FUSE מופעל באשכול, מריצים את הפקודה הבאה:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
הגדרת גישה לקטגוריות של Cloud Storage
מנהל ההתקן של Cloud Storage FUSE CSI משתמש באיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE כדי שתוכלו להגדיר הרשאות מפורטות לגבי הגישה של קבוצות ה-Pod של GKE לנתונים שמאוחסנים ב-Cloud Storage.
כדי לאפשר גישה לקטגוריות של Cloud Storage מאשכול GKE, צריך לבצע אימות באמצעות איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE עם קטגוריית Cloud Storage שרוצים לצרף למפרט ה-Pod:
- אם איחוד זהויות של עומסי עבודה ל-GKE לא מופעל, פועלים לפי השלבים האלה כדי להפעיל אותו. אם רוצים להשתמש במאגר צמתים קיים, צריך להפעיל באופן ידני את איחוד הזהויות של עומסי עבודה ל-GKE במאגר הצמתים אחרי שמפעילים את איחוד הזהויות של עומסי עבודה ל-GKE באשכול.
מקבלים פרטי כניסה לאשכול:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול שבו מופעל איחוד זהויות של עומסי עבודה ל-GKE. -
LOCATION: האזור או התחום של Compute Engine שבו נמצא האשכול.
-
יוצרים מרחב שמות לשימוש ב-Kubernetes ServiceAccount. אפשר גם להשתמש במרחב השמות
defaultאו בכל מרחב שמות קיים.kubectl create namespace NAMESPACEמחליפים את
NAMESPACEבשם של מרחב השמות של Kubernetes בשביל Kubernetes ServiceAccount.יוצרים Kubernetes ServiceAccount לשימוש באפליקציה. אפשר גם להשתמש בכל חשבון שירות קיים של Kubernetes בכל מרחב שמות, כולל חשבון השירות
defaultשל Kubernetes.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACEמחליפים את
KSA_NAMEבשם של חשבון השירות ב-Kubernetes.מקצים לחשבון השירות ב-Kubernetes אחד מתפקידי ה-IAM ל-Cloud Storage. פועלים לפי השלבים הבאים, בהתאם להרשאת הגישה שרוצים לתת לחשבון השירות של Kubernetes: גישה רק לקטגוריה ספציפית ב-Cloud Storage או גישה גלובלית לכל הקטגוריות בפרויקט.
גישה לקטגוריה ספציפית
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage. -
PROJECT_NUMBER: מספר הפרויקט של אשכול GKE. כדי למצוא את מספר הפרויקט, אפשר להיעזר במאמר זיהוי פרויקטים. -
PROJECT_ID: מזהה הפרויקט של אשכול GKE. -
NAMESPACE: השם של מרחב השמות ב-Kubernetes עבור חשבון השירות ב-Kubernetes. -
KSA_NAME: השם של חשבון השירות החדש של Kubernetes. -
ROLE_NAME: תפקיד ה-IAM להקצאה לחשבון השירות של Kubernetes.- לעומסי עבודה לקריאה בלבד, משתמשים בתפקיד Storage Object Viewer (
roles/storage.objectViewer). - לעומסי עבודה של קריאה וכתיבה, משתמשים בתפקיד Storage Object User (
roles/storage.objectUser).
- לעומסי עבודה לקריאה בלבד, משתמשים בתפקיד Storage Object Viewer (
גישה גלובלית לקטגוריות
gcloud projects add-iam-policy-binding GCS_PROJECT \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
GCS_PROJECT: מזהה הפרויקט של דלי ה-Cloud Storage. -
PROJECT_NUMBER: מספר הפרויקט של אשכול GKE. כדי למצוא את מספר הפרויקט, קראו את המאמר זיהוי פרויקטים. -
PROJECT_ID: מזהה הפרויקט של אשכול GKE. -
NAMESPACE: השם של מרחב השמות ב-Kubernetes עבור חשבון השירות ב-Kubernetes. -
KSA_NAME: השם של חשבון השירות החדש של Kubernetes. -
ROLE_NAME: תפקיד ה-IAM להקצאה לחשבון השירות של Kubernetes.- לעומסי עבודה לקריאה בלבד, משתמשים בתפקיד Storage Object Viewer (
roles/storage.objectViewer). - לעומסי עבודה של קריאה וכתיבה, משתמשים בתפקיד Storage Object User (
roles/storage.objectUser).
- לעומסי עבודה לקריאה בלבד, משתמשים בתפקיד Storage Object Viewer (
-
הגדרת גישה ל-Pods עם רשת מארחת
בגרסאות של אשכול GKE שקודמות ל-1.33.3-gke.1226000, מנהל התקן ה-CSI של Cloud Storage FUSE לא תומך בפודים שפועלים ברשת המארחת (hostNetwork: true) בגלל המגבלות של איחוד זהויות של עומסי עבודה ל-GKE. עם זאת, בגרסאות מאוחרות יותר של GKE, אפשר להגדיר אימות מאובטח ל-Pods hostNetworkמופעלים כשמשתמשים במנהל התקן ה-CSI של Cloud Storage FUSE כדי לטעון קטגוריות של Cloud Storage. התמיכה ברשת המארחת זמינה רק באשכולות GKE רגילים.
חשוב לוודא שקלאסטר ה-GKE עומד בדרישות הבאות:
- גם מישור הבקרה וגם מאגרי הצמתים באשכול GKE רגיל צריכים להיות בגרסה
1.33.3-gke.1226000ומעלה. - מפעילים את Workload Identity באשכול.
- מעניקים את הרשאות ה-IAM הנדרשות לחשבון השירות של Kubernetes שבו משתמש ה-Pod עם
hostNetworkכדי לגשת לקטגוריה של Cloud Storage. מידע נוסף זמין במאמר בנושא אימות ל-Cloud Storage FUSE.
כדי לאפשר לקבוצות Pod של HostNetwork לגשת לנפחי אחסון ב-Cloud Storage, צריך לציין את מאפיין הנפח hostNetworkPodKSA: "true" בהגדרה של Pod או של PersistentVolume. ההגדרה המדויקת משתנה בהתאם לאופן שבו אתם מנהלים את קובץ ה-sidecar של Cloud Storage FUSE.
קבצים נלווים מנוהלים
הקטע הזה רלוונטי אם GKE מחדיר ומנהל באופן אוטומטי את קובץ ה-sidecar של Cloud Storage FUSE ב-Pods. האפשרות הזו היא ברירת המחדל וההגדרה המומלצת למנהל התקן ה-CSI של Cloud Storage FUSE.
נפח אחסון זמני
קובץ המניפסט של ה-Pod הבא מגדיר נפח זמני ל-Pod של HostNetwork כדי לגשת לקטגוריה של Cloud Storage.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
נפח אחסון מתמיד
הגדרת המניפסט הבאה של PV מגדירה PV ל-Pod של HostNetwork כדי לגשת לקטגוריה של Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
סיידקארים פרטיים
הקטע הזה רלוונטי אם אתם מנהלים באופן ידני את קונטיינר ה-sidecar של Cloud Storage FUSE בתוך ה-Pods או משתמשים בתמונת sidecar בהתאמה אישית.
קובץ האימג' של ה-sidecar צריך להתבסס על מנהל התקן ה-CSI של Cloud Storage FUSE בגרסה v1.17.2 ואילך.
אחסון זמני
קובץ המניפסט של ה-Pod הבא מגדיר נפח זמני ל-Pod של HostNetwork כדי לגשת לקטגוריה של Cloud Storage.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
בשדה identityProvider, מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: המיקום של האשכול. -
CLUSTER_NAME: השם של אשכול GKE Standard.
נפח אחסון מתמיד
הגדרת המניפסט הבאה של PV מגדירה PV ל-Pod של HostNetwork כדי לגשת לקטגוריה של Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
בשדה identityProvider, מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: המיקום של האשכול. -
CLUSTER_NAME: השם של אשכול GKE הרגיל.
המאמרים הבאים
- פתרון בעיות ב-Cloud Storage FUSE
- איך לטעון קטגוריות של Cloud Storage על ידי ציון הקטגוריות בשורה עם מפרט ה-Pod
- איך לטעון קטגוריות של Cloud Storage באמצעות משאב PersistentVolume
- מידע נוסף על הגדרת אפליקציות לשימוש באיחוד זהויות של עומסי עבודה ל-GKE
- אופטימיזציה אוטומטית של הביצועים באמצעות פרופילים של Cloud Storage FUSE
- אופטימיזציה ידנית של Cloud Storage FUSE לשיפור הביצועים.