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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 מקומיים, הפריסה תיכשל ותופיע הודעת שגיאה.

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

באשכולות Autopilot אפשר להשתמש ב-Local 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

כשמשתמשים ב-Local 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.

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