בדף הזה נסביר איך להשתמש בחומרת אחסון חיצונית, כמו דיסקים קבועים של Compute Engine, כנפחי אחסון זמניים בעומסי העבודה שלכם ב-Google Kubernetes Engine (GKE). כדאי להכיר את Volumes ואת StorageClasses ב-Kubernetes.
מתי כדאי להשתמש באחסון זמני ב-Kubernetes
אחסון זמני שימושי בכל מצב שבו עומסי העבודה צריכים את הנתונים רק במהלך מחזור החיים של האפליקציה, למשל לצינורות לעיבוד נתונים, למשימות של למידת מכונה, לעיבוד באצווה, לשמירה במטמון מקומי או לניתוח נתונים. כברירת מחדל, חלק מדיסק האתחול של צומת GKE זמין לשימוש כאחסון זמני בתרמילים (Pods). הגישה הזו דורשת בדרך כלל תכנון קפדני של המרחב.
Kubernetes generic ephemeral volumes מאפשר לכם לבקש באופן מפורש אחסון זמני לקבוצות ה-Pod שלכם באמצעות PersistentVolumeClaims. GKE מספק באופן דינמי דיסקים לאחסון מתמיד של Compute Engine ומצרף את הדיסקים לצמתים. סוג האחסון הזמני הזה שימושי במצבים כמו הבאים:
- עומסי העבודה שלכם דורשים ביצועים גבוהים, ולכן אתם צריכים לשלוט בחומרת האחסון.
- אתם צריכים אחסון זמני לטווח קצר שספציפי לקונטיינר.
- אתם רוצים להימנע משימוש ב-
emptyDirכדי להקצות אחסון זמני.emptyDirעדיין יש שימוש בווליומים במצבים שבהם רוצים שכמה קונטיינרים ישתפו את הנתונים באחסון הזמני. - אתם רוצים נפח אחסון זמני גדול יותר מברירות המחדל המובנות ב-GKE.
- אתם רוצים להימנע מהצורך לתכנן מראש את הגודל והסוג של דיסק האתחול של הצומת באשכולות GKE במצב Standard.
סוגי אחסון זמני ב-GKE
באופן כללי, אתם יכולים להשתמש בקיבולת האחסון של דיסק האתחול או בדיסקים קבועים ייעודיים כאחסון זמני בתרמילים ובקונטיינרים שלכם. בטבלה הבאה מפורטים ההבדלים:
| סוג אחסון | אופן השימוש | תיאור |
|---|---|---|
| דיסק אתחול – דיסקים לאחסון מתמיד | מציבים את הוראות מפורטות מופיעות במאמר בנושא יצירת אמצעי אחסון. |
האחסון הזמני המבוקש נלקח מחלק שמור של דיסק האתחול של הצומת. זוהי ברירת המחדל גם ב-Autopilot וגם באשכולות רגילים. משתמשים באפשרות הזו כשמגישים בקשות קטנות לאחסון זמני של Pod או כשרוצים לשתף את הנתונים הזמניים בין כמה קונטיינרים ב-Pod. Autopilot
רגילה אין הגבלת גודל, אבל נדרש תכנון קפדני של גודל דיסק האתחול של הצומת וסוג חומרת האחסון. לפרטים על האופן שבו GKE מחשב את ההקצאה של אחסון זמני בדיסק האתחול של הצומת, ראו הקצאה של אחסון זמני מקומי. |
| דיסקים מקומיים מסוג SSD |
הוראות מפורטות מופיעות במאמר הקצאת אחסון זמני באמצעות כונני SSD מקומיים. |
דיסקים מקומיים של SSD משתמשים בתוספות קבועות של 375 GB שנתמכות באשכולות GKE במצב Standard ובצמתים של Autopilot שמריצים יחידות GPU מסוג A100 (80 GB).
משתמשים באחסון הזה כשצריך אחסון זמני עם קצב העברת נתונים גבוה. פרטים נוספים זמינים במאמר מידע על כונני SSD מקומיים ל-GKE. |
| דיסקים ייעודיים לאחסון מתמיד |
במסמך הזה מוסבר איך לבקש את סוג האחסון הזמני הזה. |
Google Cloud dynamically provisions the requested external hardware, attached it to your nodes, and mounts the requested volume into your Pod. כדאי להשתמש באפשרות הזו אם ל-Pods יש בקשות גדולות לאחסון זמני, או אם רוצים לשלוט בסוג הבסיסי של הדיסק הקשיח. לכרכים האלה יש את המאפיינים הבאים:
פרטים על סוג הנפח הזמני הזה מופיעים במאמר בנושא נפחים זמניים כלליים. |
תמחור
החיוב על נפחי אחסון שמוקצים באמצעות נפחים זמניים גנריים, כפי שמתואר במדריך הזה, מבוסס על תמחור הדיסקים ב-Compute Engine.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שיש לכם אשכול GKE Autopilot או Standard בגרסה 1.23 ואילך.
- מוודאים שיש לכם מספיק מכסה בפרויקט Google Cloud לציוד האחסון. במאמר הצגה וניהול של מכסות מוסבר איך לנהל את המכסה.
יצירת StorageClass
כשיוצרים StorageClass מותאם אישית של Kubernetes, אפשר לציין את סוג האחסון שרוצים להקצות על סמך דרישות המחיר והביצועים. השלב הזה אופציונלי אבל מומלץ. אם רוצים להשתמש ב-StorageClass שמוגדר כברירת מחדל ב-GKE, עם pd-balanced סוג Persistent Disk, מדלגים על השלב הזה.
שומרים את קובץ המניפסט הבא בשם
ephemeral-pd-class.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ephemeral-ssd provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: STORAGE_TYPEמחליפים את
STORAGE_TYPEבשם של סוג הדיסק הקשיח הקבוע שרוצים, כמוpd-ssd. רשימה של הסוגים הנתמכים מופיעה במאמר בנושא סוגים של Persistent Disk בתיעוד של Compute Engine.יוצרים את StorageClass:
kubectl create -f ephemeral-pd-class.yaml
בקשה לקיבולת אחסון זמנית ב-Pod
כדי להקצות, לצרף ולהשתמש בחומרה חיצונית כאחסון זמני, מוסיפים את אמצעי האחסון המתאים למניפסט של ה-Pod ומוסיפים נקודת צירוף אמצעי אחסון למפרט של הקונטיינר.
שומרים את קובץ המניפסט הבא בשם
ephemeral-ssd-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-deployment spec: replicas: 1 selector: matchLabels: storage: ephemeral template: metadata: labels: storage: ephemeral spec: containers: - name: ephemeral-container image: nginx resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/short-term" name: ephemeral-volume volumes: - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "ephemeral-ssd" resources: requests: storage: 1Tiהמניפסט הזה יוצר בקשה חדשה לנפח אחסון מתמיד (PersistentVolumeClaim) ב-Kubernetes, לנפח אחסון מתמיד חדש בשם
ephemeral-volumeעם המאפיינים הבאים:-
spec.volumes.ephemeral: סוג נפח האחסוןephemeral. -
.spec.accessModes: מצב הגישה לנפח, שקובע את גישת הקריאה והכתיבה מ-Pods ואת שיתוף הנפח בין הצמתים. בדוגמה הזו נעשה שימוש ב-ReadWriteOnce, שמטמיע את PersistentVolume בצומת יחיד לגישה של פוד אחד או יותר בצומת. פרטים נוספים מופיעים במאמר בנושא מצבי גישה. -
.spec.storageClassName: אופציונלי: השם של StorageClass שיצרתם. אם לא מציינים את השדה הזה, GKE משתמש ב-StorageClass שמוגדר כברירת מחדל ומקצהpd-balancedPersistent Disk. -
.spec.resources.requests.storage: נפח האחסון שרוצים.
-
יוצרים את הפריסה:
kubectl create -f ephemeral-ssd-deployment.yaml
GKE מקצה דיסק ב-Compute Engine שעומד בדרישות של PersistentVolumeClaim ומצרף את הדיסק לצומת. GKE מטמיע את אמצעי האחסון ב-Pod ומספק את הקיבולת הנדרשת לקונטיינר.
אימות של נפח אחסון זמני ש-GKE טען
יוצרים סשן של מעטפת ב-Pod:
kubectl exec -it deploy/ephemeral-deployment -- bashבודקים את אמצעי האחסון המחוברים:
df -hהפלט אמור להיראות כך:
Filesystem Size Used Available Use% Mounted on ... /dev/sdb 1006.9G 28.0K 1006.8G 0% /short-term /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hosts /dev/sda1 94.3G 3.6G 90.6G 4% /dev/termination-log /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hostname /dev/sda1 94.3G 3.6G 90.6G 4% /etc/resolv.conf ...יוצאים מהסשן של מעטפת הפקודות:
exit