בדף הזה מוסבר איך להשתמש בחומרת אחסון חיצונית, כמו Persistent Disks של Compute Engine, כנפחי אחסון זמניים בעומסי העבודה של Google Kubernetes Engine (GKE). אתם צריכים להכיר את Volumes ו-StorageClasses ב-Kubernetes.
מתי כדאי להשתמש באחסון זמני ב-Kubernetes
אחסון זמני שימושי בכל מצב שבו עומסי העבודה צריכים את הנתונים רק במהלך מחזור החיים של האפליקציה, למשל לצינורות לעיבוד נתונים, למשימות של למידת מכונה, לעיבוד באצווה, לשמירה במטמון מקומי או לניתוח נתונים. כברירת מחדל, חלק מדיסק האתחול של צומת GKE זמין לשימוש כאחסון זמני ב-Pods. בגישה הזו, בדרך כלל צריך לתכנן את המרחב בקפידה.
Kubernetes generic ephemeral volumes מאפשר לכם לבקש באופן מפורש אחסון זמני לקבוצות ה-Pod שלכם באמצעות PersistentVolumeClaims. GKE מקצה באופן דינמי Persistent Disks של Compute Engine ומצרף את הדיסקים לצמתים. סוג האחסון הזמני הזה שימושי במצבים כמו:
- לעומסי העבודה שלכם יש דרישות ביצועים גבוהות, ולכן אתם צריכים לשלוט בחומרת האחסון.
- אתם צריכים אחסון זמני לטווח קצר שספציפי לקונטיינר.
- אתם רוצים להימנע משימוש ב-
emptyDirכדי להקצות אחסון זמני.emptyDirעדיין יש שימוש בווליומים במצבים שבהם רוצים שכמה קונטיינרים ישתפו את הנתונים באחסון הזמני. - אתם רוצים נפח אחסון זמני גדול יותר מברירות המחדל המובנות של GKE.
- אתם רוצים להימנע מהצורך לתכנן מראש את הגודל והסוג של דיסק האתחול של הצומת באשכולות GKE במצב Standard.
סוגי אחסון זמני ב-GKE
באופן כללי, אתם יכולים להשתמש בקיבולת האחסון של דיסק האתחול או בדיסקים קבועים ייעודיים כאחסון זמני בתרמילים ובקונטיינרים שלכם. בטבלה הבאה מתוארים ההבדלים:
| סוג האחסון | אופן השימוש | תיאור |
|---|---|---|
| דיסק אתחול – דיסקים לאחסון מתמיד | מציבים את הוראות מפורטות מופיעות במאמר בנושא יצירת אמצעי אחסון. |
האחסון הזמני המבוקש נלקח מחלק שמור בדיסק האתחול של הצומת. זוהי ברירת המחדל באשכולות Autopilot ובאשכולות רגילים. כדאי להשתמש באפשרות הזו אם יש ל-Pods בקשות קטנות לאחסון זמני, או אם רוצים לשתף את הנתונים הזמניים בין כמה קונטיינרים ב-Pod. Autopilot
רגילה אין מגבלת גודל, אבל צריך לתכנן בקפידה את גודל דיסק האתחול של הצומת ואת סוג חומרת האחסון. לפרטים על האופן שבו GKE מחשב את ההקצאה של נפח אחסון זמני בדיסק האתחול של הצומת, אפשר לעיין במאמר הקצאה של נפח אחסון זמני מקומי. |
| דיסקים מקומיים של SSD |
הוראות מפורטות מופיעות במאמר בנושא הקצאת אחסון זמני באמצעות כונני SSD מקומיים. |
דיסקים מקומיים של SSD משתמשים בתוספות קבועות של 375 GB שנתמכות באשכולות GKE במצב רגיל ובצמתים של Autopilot שמריצים יחידות GPU מסוג A100 (80 GB).
כדאי להשתמש באפשרות הזו אם אתם צריכים אחסון זמני עם קצב העברת נתונים גבוה. פרטים נוספים זמינים במאמר מידע על כונני SSD מקומיים ל-GKE. |
| דיסקים ייעודיים לאחסון מתמיד (persistent disk) |
במסמך הזה מפורטות הוראות לשליחת בקשה לסוג האחסון הזמני הזה. |
Google Cloud מקצה באופן דינמי את החומרה החיצונית המבוקשת, מצרף אותה לצמתים וטוען את הנפח המבוקש ל-Pod. כדאי להשתמש באפשרות הזו אם ל-Pods יש בקשות גדולות לאחסון זמני, או אם רוצים לשלוט בסוג הבסיסי של ה-Persistent Disk. לנפחי האחסון האלה יש את המאפיינים הבאים:
פרטים על סוג הנפח הזמני הזה מופיעים במאמר בנושא נפחים זמניים כלליים. |
תמחור
החיוב על נפח האחסון שאתם מקצים באמצעות אמצעי אחסון זמניים כלליים, כמו שמתואר במדריך הזה, מבוסס על מחירי הדיסקים ב-Compute Engine.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שיש לכם אשכול GKE Autopilot או GKE 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בסוג של Persistent Disk שרוצים, כמו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, שמבקש PersistentVolume חדש בשם
ephemeral-volumeעם המאפיינים הבאים:-
spec.volumes.ephemeral: סוג הנפחephemeral. .spec.accessModes: מצב הגישה לנפח האחסון, שקובע את גישת הקריאה והכתיבה מ-Pods ואת שיתוף נפח האחסון בין צמתים. בדוגמה הזו נעשה שימוש ב-ReadWriteOnce, שמעלה את PersistentVolume לצומת יחיד כדי לאפשר גישה על ידי פוד אחד או יותר בצומת. פרטים נוספים מופיעים במאמר בנושא מצבי גישה.-
.spec.storageClassName: השם של ה-StorageClass שיצרתם (אופציונלי). אם לא מציינים את השדה הזה, GKE משתמש ב-StorageClass שמוגדר כברירת מחדל ומקצה Persistent Disk שלpd-balanced. -
.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 ...יוצאים מסשן ה-Shell:
exit