שימוש בדיסקים ייעודיים של אחסון מתמיד כנפחי אחסון זמניים

בדף הזה נסביר איך להשתמש בחומרת אחסון חיצונית, כמו דיסקים קבועים של 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

באופן כללי, אתם יכולים להשתמש בקיבולת האחסון של דיסק האתחול או בדיסקים קבועים ייעודיים כאחסון זמני בתרמילים ובקונטיינרים שלכם. בטבלה הבאה מפורטים ההבדלים:

סוג אחסון אופן השימוש תיאור
דיסק אתחול – דיסקים לאחסון מתמיד

מציבים את emptyDir במפרט של ה-Pod ומבקשים את הקיבולת שרוצים.

הוראות מפורטות מופיעות במאמר בנושא יצירת אמצעי אחסון.

האחסון הזמני המבוקש נלקח מחלק שמור של דיסק האתחול של הצומת. זוהי ברירת המחדל גם ב-Autopilot וגם באשכולות רגילים.

משתמשים באפשרות הזו כשמגישים בקשות קטנות לאחסון זמני של Pod או כשרוצים לשתף את הנתונים הזמניים בין כמה קונטיינרים ב-Pod.

Autopilot

  • הבקשה צריכה להיות בין 10 MiB ל-10 GiB.
  • סוג חומרת האחסון מוגדר מראש.

רגילה

אין הגבלת גודל, אבל נדרש תכנון קפדני של גודל דיסק האתחול של הצומת וסוג חומרת האחסון.

לפרטים על האופן שבו GKE מחשב את ההקצאה של אחסון זמני בדיסק האתחול של הצומת, ראו הקצאה של אחסון זמני מקומי.

דיסקים מקומיים מסוג SSD
  1. יוצרים מאגר צמתים עם דיסקים מקומיים מסוג SSD מצורפים וסדרת מכונות תואמת.
  2. טוענים נפח אחסון באמצעות emptyDir עם הקיבולת הנדרשת.
  3. משתמשים ב-nodeSelector כדי למקם Pods בצמתים עם דיסקים מקומיים מסוג SSD שמחוברים אליהם.

הוראות מפורטות מופיעות במאמר הקצאת אחסון זמני באמצעות כונני SSD מקומיים.

דיסקים מקומיים של SSD משתמשים בתוספות קבועות של 375 GB שנתמכות באשכולות GKE במצב Standard ובצמתים של Autopilot שמריצים יחידות GPU מסוג A100 ‏ (80 GB).

משתמשים באחסון הזה כשצריך אחסון זמני עם קצב העברת נתונים גבוה.

פרטים נוספים זמינים במאמר מידע על כונני SSD מקומיים ל-GKE.

דיסקים ייעודיים לאחסון מתמיד
  1. אפשר גם ליצור StorageClass של Kubernetes לחומרה.
  2. מצמידים נפח אחסון באמצעות סוג נפח האחסון ephemeral במפרט של ה-Pod.

במסמך הזה מוסבר איך לבקש את סוג האחסון הזמני הזה.

‫Google Cloud dynamically provisions the requested external hardware, attached it to your nodes, and mounts the requested volume into your Pod.

כדאי להשתמש באפשרות הזו אם ל-Pods יש בקשות גדולות לאחסון זמני, או אם רוצים לשלוט בסוג הבסיסי של הדיסק הקשיח. לכרכים האלה יש את המאפיינים הבאים:

  • עד 64 TiB במצב Autopilot ובמצב Standard.
  • בקשת האחסון הזמני של ה-Pod יכולה להיות עד 64 TiB.
  • יש תמיכה בחומרה ייעודית כמו נפחי אחסון עם SSD.
  • אחסון על הרשת.
  • משתמש ב-Kubernetes Volumes כדי לקבל אחסון, במקום להשתמש ב-emptyDir כדי לשתף את דיסק האתחול של הצומת.

פרטים על סוג הנפח הזמני הזה מופיעים במאמר בנושא נפחים זמניים כלליים.

תמחור

החיוב על נפחי אחסון שמוקצים באמצעות נפחים זמניים גנריים, כפי שמתואר במדריך הזה, מבוסס על תמחור הדיסקים ב-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, מדלגים על השלב הזה.

  1. שומרים את קובץ המניפסט הבא בשם 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.

  2. יוצרים את StorageClass:

    kubectl create -f ephemeral-pd-class.yaml
    

בקשה לקיבולת אחסון זמנית ב-Pod

כדי להקצות, לצרף ולהשתמש בחומרה חיצונית כאחסון זמני, מוסיפים את אמצעי האחסון המתאים למניפסט של ה-Pod ומוסיפים נקודת צירוף אמצעי אחסון למפרט של הקונטיינר.

  1. שומרים את קובץ המניפסט הבא בשם 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-balanced Persistent Disk.
    • .spec.resources.requests.storage: נפח האחסון שרוצים.
  2. יוצרים את הפריסה:

    kubectl create -f ephemeral-ssd-deployment.yaml
    

‫GKE מקצה דיסק ב-Compute Engine שעומד בדרישות של PersistentVolumeClaim ומצרף את הדיסק לצומת. ‫GKE מטמיע את אמצעי האחסון ב-Pod ומספק את הקיבולת הנדרשת לקונטיינר.

אימות של נפח אחסון זמני ש-GKE טען

  1. יוצרים סשן של מעטפת ב-Pod:

    kubectl exec -it deploy/ephemeral-deployment -- bash
    
  2. בודקים את אמצעי האחסון המחוברים:

    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
    ...
    
  3. יוצאים מהסשן של מעטפת הפקודות:

    exit
    

המאמרים הבאים