במדריך הזה מוסבר איך ליצור נפח אחסון חדש ב-Kubernetes שמגובה על ידי Parallelstore CSI driver ב-GKE עם הקצאה דינמית. כך תוכלו ליצור נפח אחסון שמגובה על ידי מופעים של Parallelstore מנוהלים באופן מלא על פי דרישה, ולגשת אליהם כאל אמצעי אחסון לעומסי עבודה עם שמירת מצב.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את Parallelstore API ואת Google Kubernetes Engine API. הפעלת ממשקי API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- במאמר סקירה כללית על מנהל התקן CSI מפורטות מגבלות ודרישות.
- הגדרת רשת VPC
- אם רוצים להשתמש באשכול GKE Standard, צריך להפעיל את מנהל ההתקן של CSI.
יצירת נפח חדש באמצעות מנהל התקן Parallelstore CSI
בקטעים הבאים מתואר התהליך האופייני ליצירת נפח אחסון ב-Kubernetes שמגובה על ידי מנהל התקנים של Parallelstore CSI ב-GKE:
- (אופציונלי) יוצרים StorageClass.
- משתמשים ב-PersistentVolumeClaim כדי לגשת לנפח האחסון.
- (אופציונלי) הגדרת משאבים עבור מאגר ה-sidecar.
- יוצרים עומס עבודה שצורכת את הנפח.
(אופציונלי) יצירת סוג אחסון
כשהדרייבר Parallelstore CSI מופעל, GKE יוצר באופן אוטומטי StorageClass בשם parallelstore-rwx להקצאת מופעים של Parallelstore. ה-StorageClass הזה מכוון את מנהל ההתקן של CSI להקצאת מופעים של Parallelstore באותו אזור של אשכול GKE, כדי להבטיח ביצועי קלט/פלט אופטימליים.
אפשר גם ליצור StorageClass בהתאמה אישית עם טופולוגיה ספציפית. כדי לעשות את זה:
שומרים את מניפסט StorageClass הבא בקובץ בשם
parallelstore-class.yaml:תושבת ל-Pod
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: parallelstore-class provisioner: parallelstore.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: LOCATIONמחליפים את מה שכתוב בשדות הבאים:
- LOCATION: אזור Compute Engine שבו נמצא האשכול. צריך לציין אזור נתמך עבור מנהל התקן Parallelstore CSI.
רשימה מלאה של השדות שנתמכים ב-StorageClass מופיעה במסמכי העזר של Parallelstore CSI.
תושבת לצומת
מנהל ההתקן Parallelstore CSI מאפשר לכם לטעון נפחים ישירות בצמתים. התקנת צומת נתמכת באשכולות GKE מגרסה 1.32.3 ואילך.
התקנה ברמת הצומת מאפשרת לכל ה-Pods בצומת לשתף את אותה נקודת התקנה. שיתוף אותה נקודת הרכבה משפר את יכולת ההתאמה, כי מספר ההרכבות גדל עם מספר הצמתים ולא עם מספר ה-Pod (כמו במצב sidecar).
כתוצאה מכך, תוכלו להריץ יותר Pods תוך שיתוף אותו מופע Parallelstore.
הערה: כדי להפעיל את התכונה הזו, צריך לציין את הפרמטר mountLocality: node. ערך ברירת המחדל של Pod mount locality הוא mountLocality: pod. הדגלים של המעבד (CPU), בקשות הזיכרון והמגבלות של dfuse פועלים רק עם ההגדרה mountLocality: node.
אם הערך של הבקשה או המגבלה מוגדרים והשני לא מוגדר, שניהם יוגדרו לאותו ערך שצוין.
אפשר להשתמש בערך'0' כדי לבטל את ההגדרה של מגבלות על משאבים. לדוגמה, dfuseMemoryLimit: '0' מסיר את מגבלת הזיכרון לתהליך dfuse.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: parallelstore-class provisioner: parallelstore.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: LOCATION parameters: mountLocality: node dfuseCPURequest: DFUSE_CPU_REQUEST dfuseMemoryRequest: DFUSE_MEMORY_REQUEST dfuseCPULimit: DFUSE_CPU_LIMIT dfuseMemoryLimit: DFUSE_MEMORY_LIMITמחליפים את מה שכתוב בשדות הבאים:
- LOCATION: אזור Compute Engine שבו נמצא האשכול. צריך לציין אזור נתמך עבור מנהל התקן Parallelstore CSI.
- DFUSE_CPU_REQUEST: בקשת ה-CPU לתהליך dfuse. ערך ברירת המחדל הוא
250m. - DFUSE_MEMORY_REQUEST: בקשת הזיכרון לתהליך dfuse. ערך ברירת המחדל הוא
512Mi. - DFUSE_CPU_LIMIT: מגבלת ה-CPU לתהליך dfuse. ברירת המחדל היא לא מוגדר.
- DFUSE_MEMORY_LIMIT: מגבלת הזיכרון לתהליך dfuse. ערך ברירת המחדל הוא
10Gi.
רשימה מלאה של השדות שנתמכים ב-StorageClass מופיעה במסמכי העזר של Parallelstore CSI.
כדי ליצור את StorageClass, מריצים את הפקודה הבאה:
kubectl create -f parallelstore-class.yaml
שימוש ב-PersistentVolumeClaim כדי לגשת לנפח האחסון
אפשר ליצור משאב PersistentVolumeClaim שמפנה ל-StorageClass של מנהל התקן Parallelstore CSI.
קובץ המניפסט הבא מציג דוגמה לאופן שבו יוצרים PersistentVolumeClaim בReadWriteMany
מצב גישה שמפנה אל StorageClass שיצרתם קודם.
שומרים את המניפסט הבא בקובץ בשם
parallelstore-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: parallelstore-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: STORAGE_SIZE storageClassName: parallelstore-classמחליפים את STORAGE_SIZE בגודל האחסון, לדוגמה,
12000Gi. הערך צריך להיות בטווח של 12,000 GiB עד 100,000 GiB (בכפולות של 4,000 GiB).כדי ליצור את PersistentVolumeClaim, מריצים את הפקודה הבאה:
kubectl create -f parallelstore-pvc.yaml
(אופציונלי) הגדרת משאבים עבור קונטיינר ה-sidecar
כשיוצרים Pod של עומס עבודה שמשתמש באמצעי אחסון שמגובים על ידי Parallelstore, מנהל התקן ה-CSI קובע אם אמצעי האחסון מבוסס על מופעים של Parallelstore.
אם מנהל ההתקן מזהה שהנפח מבוסס על Parallelstore, או אם מציינים את ההערה , מנהל ההתקן של CSI מוסיף אוטומטית קונטיינר sidecar בשם אל ה-Pod.gke-parallelstore/volumes: "true"gke-parallelstore-sidecar קונטיינר ה-sidecar הזה מטמיע את מופע Parallelstore בעומס העבודה.
כברירת מחדל, GKE מגדיר את בקשות המשאבים הבאות עבור קונטיינר ה-sidecar, בלי להגדיר מגבלות משאבים:
- 250 m CPU
- זיכרון בנפח 512 MiB
- נפח אחסון זמני של 10 MiB
כדי לשנות את הערכים האלה, אפשר לציין את ההערה gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request], כמו בדוגמה הבאה:
apiVersion: v1
kind: Pod
metadata:
annotations:
gke-parallelstore/volumes: "true"
gke-parallelstore/cpu-request: 500m
gke-parallelstore/memory-request: 1Gi
gke-parallelstore/ephemeral-storage-request: 500Mi
gke-parallelstore/cpu-limit: 1000m
gke-parallelstore/memory-limit: 2Gi
gke-parallelstore/ephemeral-storage-limit: 1Gi
כשמחליטים כמה משאבים להקצות, כדאי לקחת בחשבון את הנקודות הבאות:
- אם אחד מהערכים של הבקשה או המגבלה מוגדר והשני לא מוגדר, שניהם יוגדרו לאותו ערך שצוין.
- אם עומסי העבודה שלכם צריכים תפוקה גבוהה יותר, צריך להקצות יותר CPU לקונטיינר sidecar. אם המעבד לא מספיק חזק, יחול ויסות נתונים של קלט/פלט.
- אפשר להשתמש בערך
"0"כדי לבטל את ההגדרה של מגבלות משאבים באשכולות רגילים. לדוגמה,gke-parallelstore/memory-limit: "0"מסיר את מגבלת הזיכרון של קונטיינר ה-sidecar. האפשרות הזו שימושית כשאתם לא יכולים להחליט על כמות המשאבים שנדרשת ל-gke-parallelstore-sidecarעבור עומסי העבודה, ואתם רוצים לאפשר ל-sidecar לצרוך את כל המשאבים הזמינים בצומת.
יצירת עומס עבודה שמשתמש בנפח האחסון
בקטע הזה מוצגת דוגמה ליצירת Pod שמשתמש במשאב PersistentVolumeClaim שיצרתם קודם.
כמה פודים יכולים לחלוק את אותו משאב PersistentVolumeClaim.
שומרים את המניפסט הבא בקובץ בשם
my-pod.yaml.apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx volumeMounts: - name: parallelstore-volume mountPath: /data volumes: - name: parallelstore-volume persistentVolumeClaim: claimName: parallelstore-pvcמריצים את הפקודה הבאה כדי להחיל את המניפסט על האשכול.
kubectl apply -f my-pod.yamlה-Pod ימתין עד שה-PersistentVolumeClaim יוקצה לפני שהוא יתחיל לפעול. השלמת הפעולה עשויה להימשך כמה דקות.
ניהול מנהל התקן CSI של Parallelstore
בקטע הזה מוסבר איך להפעיל ולהשבית את מנהל ההתקנים של Parallelstore CSI, אם צריך.
הפעלת מנהל התקן Parallelstore CSI באשכול חדש
כדי להפעיל את Parallelstore CSI driver כשיוצרים אשכול חדש מסוג Standard, מריצים את הפקודה הבאה באמצעות Google Cloud CLI:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--network=NETWORK_NAME \
--addons=ParallelstoreCsiDriver \
--cluster-version=VERSION
מחליפים את מה שכתוב בשדות הבאים:
- CLUSTER_NAME: השם של האשכול.
- LOCATION: אזור Compute Engine שמכיל את האשכול. צריך לציין אזור נתמך עבור מנהל התקן Parallelstore CSI.
- NETWORK_NAME: השם של רשת ה-VPC שיצרתם בקטע הגדרת רשת VPC.
- VERSION: מספר הגרסה של GKE.
כדי להשתמש בתכונה הזו, צריך לציין מספר גרסה נתמך, כמו GKE מגרסה 1.29 ואילך. אפשר גם להשתמש בדגל
--release-channelולציין ערוץ הפצה.
הפעלת Parallelstore CSI driver באשכול קיים
כדי להפעיל את הדרייבר באשכול GKE Standard קיים, מריצים את הפקודה הבאה באמצעות Google Cloud CLI:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--update-addons=ParallelstoreCsiDriver=ENABLED
מחליפים את מה שכתוב בשדות הבאים:
- CLUSTER_NAME : שם האשכול.
- LOCATION: אזור Compute Engine שמכיל את האשכול. צריך לציין אזור נתמך עבור מנהל התקן Parallelstore CSI.
מוודאים שקלאסטר GKE פועל באותה רשת VPC שהגדרתם במאמר הגדרת רשת VPC. כדי לוודא את רשת ה-VPC של אשכול GKE, אפשר לבדוק במסוףGoogle Cloud או באמצעות הפקודה gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION).
השבתה של מנהל התקן Parallelstore CSI
אפשר להשבית את מנהל ההתקן של Parallelstore CSI באשכול קיים של Autopilot או Standard באמצעות Google Cloud CLI.
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--update-addons=ParallelstoreCsiDriver=DISABLED
מחליפים את מה שכתוב בשדות הבאים:
- CLUSTER_NAME : שם האשכול.
- LOCATION: אזור Compute Engine שמכיל את האשכול. צריך לציין אזור נתמך עבור מנהל התקן Parallelstore CSI.
שימוש ב-fsGroup עם נפחים של Parallelstore
מנהל התקן CSI של Parallelstore תומך בשינוי הבעלות על קבוצה בספרייה ברמת הבסיס של מערכת הקבצים המצורפת, כך שתתאים ל-fsGroup שצוין על ידי המשתמש ב-SecurityContext של ה-Pod. התכונה הזו נתמכת רק באשכולות GKE בגרסה 1.29.5 ואילך, או בגרסה 1.30.1 ואילך.
פתרון בעיות
הנחיות לפתרון בעיות מופיעות בדף פתרון בעיות במאמרי העזרה של Parallelstore.
המאמרים הבאים
- למסמכי העזרה של Parallelstore CSI
- איך משתמשים בספריית היירוט Parallelstore כדי לשפר את הביצועים של עומסי עבודה
- איך מעבירים נתונים ל-Parallelstore מ-Cloud Storage
- איך משתמשים ב-GKE Volume Populator כדי להעביר נתונים באופן אוטומטי מאחסון מקור בקטגוריית Cloud Storage לאחסון יעד PersistentVolumeClaim שמגובה על ידי מופע Parallelstore.
- כדאי לנסות את המדריך לאימון מודל TensorFlow עם Keras ב-GKE.