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