הקצאה ושימוש באחסון זמני שמגובה על ידי כונן SSD מקומי

בדף הזה מוסבר איך להקצות אחסון ב-SSD מקומי באשכולות של Google Kubernetes Engine‏ (GKE), ואיך להגדיר עומסי עבודה לצריכת נתונים מאחסון זמני שמגובה ב-SSD מקומי ומחובר לצמתים באשכול.

מידע נוסף על תמיכה ב-SSD מקומי ב-GKE זמין במאמר מידע על אחסון ב-SSD מקומי.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

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

אתם יכולים להשתמש ב-Google Cloud CLI כדי ליצור אשכול או מאגר צמתים עם אחסון זמני שמגובה ב-SSD מקומי.

משתמשים באפשרות --ephemeral-storage-local-ssd כדי לצרף אחסון מקומי זמני בניהול מלא, שמגובה על ידי נפחי אחסון של כונני SSD מקומיים. האחסון הזה קשור למחזור החיים של ה-Pods. כששולחים בקשות ל-Pods לאחסון זמני, מערכת GKE מתזמנת אותם להרצה בצמתים שמוגדרים בהם נפחי SSD מקומיים כאחסון זמני. אם אתם רוצים שליטה מפורטת או מיוחדת יותר על כונני ה-SSD המקומיים, מומלץ להשתמש באחסון בלוקים גולמיים שמגובה ב-SSD מקומי.

אם הפעלתם התאמה אוטומטית לעומס של האשכול, ‏ GKE יבצע התאמה אוטומטית לעומס של הצמתים כשהאשכול יזדקק לנפח אחסון זמני נוסף. ה-Pods יכולים לגשת לנתונים בנפחי SSD מקומיים דרך נפח emptyDir.

הפקודה ב-CLI של gcloud שמריצים כדי ליצור את האשכול או את מאגר הצמתים תלויה בדור סדרת המכונות של סוג המכונה שנבחר. לדוגמה, סוגי המכונות N1 ו-N2 שייכים לסדרת מכונות מהדור הראשון ומהדור השני בהתאמה, בעוד שסוגי המכונות C3 שייכים לסדרת מכונות מהדור השלישי.

יצירת אשכול עם SSD מקומי

דור ראשון או דור שני

אם אתם משתמשים בסוג מכונה מסדרת מכונות מהדור הראשון או השני, אתם צריכים ליצור את האשכול על ידי ציון האפשרות --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS. האפשרות הזו מקצה את המספר שצוין של כרכים של SSD מקומי בכל צומת לשימוש באחסון זמני של kubelet.

ההגדרות האלה חלות רק על מאגר הצמתים שמוגדר כברירת מחדל. אם מאגרי הצמתים הבאים צריכים SSD מקומי, צריך לציין את זה במהלך יצירת מאגר הצמתים.

כדי ליצור אשכול שפועל בגרסה 1.25.3-gke.1800 של GKE או בגרסה מאוחרת יותר, שבה מאגר ברירת המחדל משתמש בנפחי SSD מקומיים, מריצים את הפקודה הבאה:

gcloud container clusters create CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE \
    --release-channel CHANNEL_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: שם האשכול.
  • ‫NUMBER_OF_DISKS: מספר נפחי ה-SSD המקומיים שיוקצו לכל צומת. הנפחים האלה משולבים לנפח לוגי יחיד במהלך הגדרת הצומת. מספר אמצעי האחסון המקסימלי משתנה בהתאם לסוג המכונה ולאזור. חשוב לדעת: חלק מהקיבולת של ה-SSD המקומי שמור לשימוש המערכת.
  • ‫MACHINE_TYPE: סוג המכונה לשימוש. השדה הזה נדרש כי אי אפשר להשתמש ב-SSD מקומי עם סוג ברירת המחדל e2-medium.
  • CHANNEL_NAME: ערוץ הפצה שכולל גרסאות GKE חדשות יותר מ-1.25.3-gke.1800. אם אתם מעדיפים לא להשתמש בערוץ הפצה, אתם יכולים גם להשתמש בדגל --cluster-version במקום בדגל --release-channel, ולציין גרסה תקינה שחדשה יותר מ-1.25.3-gke.1800. כדי לראות את הגרסאות התקינות, משתמשים בפקודה gcloud container get-server-config.

דור שלישי או דור רביעי

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

כדי ליצור אשכול, מריצים את הפקודה הבאה:

gcloud container clusters create CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --cluster-version CLUSTER_VERSION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: שם האשכול.
  • ‫MACHINE_TYPE: סוג המכונה לשימוש מסדרת מכונות מהדור השלישי או הרביעי.
  • ‫CLUSTER_VERSION: גרסה של אשכול GKE שתומכת ב-SSD מקומי בסוגי מכונות מסדרת מכונות מהדור השלישי או הרביעי.

יצירת מאגר צמתים עם Local SSD

דור ראשון או דור שני

כדי ליצור מאגר צמתים שפועל ב-GKE בגרסה 1.25.3-gke.1800 ואילך, שמשתמש בנפחי SSD מקומיים, מריצים את הפקודה הבאה:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POOL_NAME: השם של מאגר הצמתים החדש.
  • ‫CLUSTER_NAME: שם האשכול.
  • ‫NUMBER_OF_DISKS: מספר נפחי ה-SSD המקומיים שיוקצו לכל צומת. הנפחים האלה משולבים לנפח לוגי יחיד במהלך הגדרת הצומת. המספר המקסימלי של אמצעי אחסון משתנה בהתאם לסוג המכונה ולאזור. שימו לב שחלק מהקיבולת של ה-SSD המקומי שמורה לשימוש המערכת.
  • ‫MACHINE_TYPE: סוג המכונה שבה משתמשים. השדה הזה נדרש, כי אי אפשר להשתמש ב-SSD מקומי עם סוג ברירת המחדל e2-medium.

דור שלישי או רביעי

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

כדי ליצור מאגר צמתים, מריצים את הפקודה הבאה:

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --node-version NODE_VERSION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POOL_NAME: השם של מאגר הצמתים החדש.
  • ‫CLUSTER_NAME: שם האשכול.
  • ‫MACHINE_TYPE: סוג המכונה לשימוש מסדרת מכונות מהדור השלישי או הרביעי.
  • ‫NODE_VERSION: גרסה של מאגר צמתים ב-GKE שתומכת בכונן SSD מקומי בסוגי מכונות מסדרת מכונות מהדור השלישי או הרביעי.

הצמתים במאגר הצמתים נוצרים עם cloud.google.com/gke-ephemeral-storage-local-ssd=true תווית. כדי לאמת את התוויות, מריצים את הפקודה הבאה:

kubectl describe node NODE_NAME

שימוש באחסון זמני שמגובה על ידי SSD מקומי באשכולות Autopilot

אתם יכולים להשתמש בכונני SSD מקומיים לאחסון זמני כשאתם מגדירים את ה-Pods באחת מהדרכים הבאות:

  • אתם בוחרים במפורש סדרת מכונות להרצת ה-Pods ומציינים את cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector או הזמנת קיבולת עם כונני SSD מקומיים. מידע נוסף על בחירת סדרת מכונות בטייס אוטומטי
  • אתם מבקשים סוג GPU שתומך ב-SSD מקומי ומציינים את cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector או הזמנת קיבולת עם SSD מקומי. מעבדי GPU מסוג NVIDIA H100 (80GB)‎ ו-NVIDIA A100 (80GB)‎ תמיד משתמשים בכונני Local SSD לאחסון זמני, ואי אפשר לציין את בורר הצמתים למעבדי ה-GPU האלה. מידע נוסף על בקשת GPUs ב-Autopilot זמין במאמר בקשת GPUs בקונטיינרים.

במאמר סדרות מכונות שתומכות ב-SSD מקומי בטייס אוטומטי מפורטת רשימה של סדרות מכונות שתואמות ל-SSD מקומי.

בקשה של כונני SSD מקומיים ישירות במניפסטים של עומסי עבודה

כדי להשתמש ב-SSD מקומי לאחסון זמני, מוסיפים את ‫cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector למניפסט של עומס העבודה. לדוגמה, במניפסט של ה-Pod הבא נבחרו כונני SSD מקומיים כאחסון זמני ל-Pods של GPU:

apiVersion: v1
kind: Pod
metadata:
  name: l4-localssd-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      requests:
        cpu: 16
        memory: 64Gi
        ephemeral-storage: 800Gi
      limits:
       cpu: 16
       memory: 64Gi
       ephemeral-storage: 800Gi
       nvidia.com/gpu: 8
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-l4
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"

בקשת כונני SSD מקומיים עם הזמנות קיבולת

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

לדוגמה, במניפסט ה-Pod הבא נבחרת הזמנה ספציפית עם כונני SSD מקומיים:

apiVersion: v1
kind: Pod
metadata:
  name: local-ssd-pod
spec:
  nodeSelector:
    cloud.google.com/machine-family: MACHINE_SERIES
    cloud.google.com/reservation-name: localssd-count-reservation
    cloud.google.com/reservation-affinity: "specific"
  containers:
  - name: my-container
    image: "k8s.gcr.io/pause"
    resources:
      requests:
        cpu: 6
        memory: "25Gi"
        ephemeral-storage: "100Gi"
      limits:
        cpu: 12
        memory: "50Gi"
        ephemeral-storage: "200Gi"

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

סדרות מכונות שתומכות ב-Local SSD ב-Autopilot

באשכולות Autopilot אפשר להשתמש בכונני SSD מקומיים לאחסון זמני בסדרות המכונות הבאות:

‫ (רק בהזמנת קיבולת)
(רק עם הזמנת קיבולת)
‫ (רק בהזמנת קיבולת)
‫ (רק בהזמנת קיבולת)
‫ (רק בהזמנת קיבולת)
(תמיד מקובצים)
(תמיד בחבילה)
‫ (רק בהזמנת קיבולת)
(תמיד בחבילה)
(תמיד בחבילה)
(תמיד בחבילה)
(תמיד בחבילה)
(למעט ההגדרה של שמינית GPU, ‏ g4-standard-6)

שימוש בפרמטר API מדור קודם

האפשרות --local-ssd-count היא פרמטר API מדור קודם שתומך ב-SCSI Local SSD. סדרת המכונות מהדור השלישי של Compute Engine לא תומכת ב-SCSI, אלא רק ב-NVMe. צריך להשתמש באפשרות הזו רק עם אשכולות של Windows Server. אם אתם משתמשים כרגע בפרמטר ה-API הקודם באשכולות של Linux, מומלץ להשתמש במקום זאת באפשרות --ephemeral-storage-local-ssd.

אחסון SSD מקומי באשכולות של Windows Server

כשמשתמשים ב-SSD מקומי עם אגמים של צמתים שבהם פועל Windows Server, צריך להתחבר לצומת ולפרמט את אמצעי האחסון לפני שמשתמשים בו. בדוגמה הבאה, עוצמת הקול של ה-SSD המקומי מעוצבת עם מערכת הקבצים NTFS. אפשר גם ליצור ספריות מתחת לנפח האחסון. בדוגמה הזו, הספריות נמצאות בדיסק D.

PS C:\> Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem ntfs -Confirm:$false
PS C:\> mkdir D:\test-ssd

גישה לנפחי אחסון מקומיים מסוג SSD

בדוגמה הבאה אפשר לראות איך ניגשים לאחסון זמני שמגובה על ידי SSD מקומי.

אחסון זמני כנפח emptyDir

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

במניפסט של ה-Pod הבא נעשה שימוש ב-emptyDir ובבורר הצמתים cloud.google.com/gke-ephemeral-storage-local-ssd. אפשר להשתמש בשיטה דומה למניפסטים של פריסה או למניפסטים של StatefulSet.

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

apiVersion: v1
kind: Pod
metadata:
  name: POD_NAME
spec:
  containers:
    - name: CONTAINER_NAME
      image: "registry.k8s.io/pause"
      resources:
        requests:
          ephemeral-storage: "200Gi"
      volumeMounts:
        - mountPath: /cache
          name: scratch-volume
  nodeSelector:
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
  volumes:
    - name: scratch-volume
      emptyDir: {}

פתרון בעיות

הוראות לפתרון בעיות מפורטות במאמר פתרון בעיות באחסון ב-GKE.

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