בדף הזה מוסבר איך ליצור ולנהל מכונות וירטואליות מסוג Spot, כולל:
- איך יוצרים, מפעילים ומזהים מכונות וירטואליות מסוג Spot
- איך לזהות, לטפל ולבדוק את ההפסקות של מכונות וירטואליות מסוג Spot
- שיטות מומלצות לשימוש במכונות וירטואליות מסוג Spot
מכונות וירטואליות במודל Spot הן מכונות וירטואליות (VM) עם מודל הקצאת משאבים במחיר Spot. Spot VMs זמינות בהנחה של עד 60% ממחיר השימוש לפי דרישה במכונות וירטואליות רגילות.
מידע נוסף זמין בדף התמחור. עם זאת, יכול להיות ש-Compute Engine יחזיר את המשאבים על ידי הפסקת השימוש במכונות וירטואליות מסוג Spot בכל שלב. מומלץ להשתמש במכונות וירטואליות מסוג Spot רק לעומסי עבודה סובלניים לשגיאות שיכולים לעמוד בדחיקה של מכונות וירטואליות. לפני שיוצרים מכונות וירטואליות מסוג Spot, צריך לוודא שעומס העבודה יכול לנהל את ההפקעה.
אם אתם רוצים ליצור ולנהל מכונות וירטואליות מסוג Spot עם TPU, כדאי לעיין במקום זאת ב מסמכי התיעוד של Cloud TPU בנושא מכונות וירטואליות מסוג Spot.
לפני שמתחילים
- כדאי לקרוא את התיעוד העיוני בנושא מכונות וירטואליות מסוג Spot:
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Cloud de Confiance by S3NS
gcloud
-
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud init
-
- הגדרת אזור ותחום כברירת מחדל
-
התקינו את ה-CLI של Google Cloud.
-
הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.
-
יוצרים פרטי כניסה לאימות מקומי עבור חשבון המשתמש:
gcloud auth application-default login
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
Terraform
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Terraform שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.
מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Cloud de Confiance .
יצירת VM במודל Spot
לפני שיוצרים VM במודל Spot, כדאי לבדוק את הזמינות של סוג המכונה שרוצים שה-VM במודל Spot ישתמשו בו. בדיקת הזמינות של משאבים עוזרת לצמצם את הסיכוי להיתקל בשגיאות שקשורות לזמינות של משאבים כשיוצרים מכונות וירטואליות. הוראות מפורטות מופיעות במאמר בנושא צפייה בזמינות של מכונות Spot VM.
VM במודל Spot היא כל מכונה וירטואלית שמגדירים בה שימוש במודל הקצאת המשאבים מסוג Spot:
- VM provisioning model מוגדר ל-Spot במסוף Cloud de Confiance
-
--provisioning-model=SPOTב-CLI של gcloud -
"provisioningModel": "SPOT"ב-Compute Engine API
כדי ללמוד איך ליצור VM במודל Spot, בוחרים באחת מהשיטות הבאות בהתאם לאופן שבו רוצים לטפל בהפסקה זמנית:
- יצירת VM במודל Spot עם 120 שניות לטיפול בהפסקה זמנית (גרסת טרום-השקה (Preview))
- יצירת VM במודל Spot עם עד 30 שניות לטיפול בהפסקה זמנית (ברירת מחדל)
לחלופין, כדי ליצור כמה מכונות VM במודל Spot עם אותם מאפיינים, אפשר ליצור תבנית של הגדרות מכונה ולהשתמש בתבנית כדי ליצור קבוצת מופעי מכונה מנוהלים (MIG). מידע נוסף זמין במאמר בנושא שיטות מומלצות.
יצירת מכונה וירטואלית (VM) מסוג Spot עם 120 שניות לטיפול בהפסקת פעולה
לפני שיוצרים VM במודל Spot עם הודעת קדימה של 120 שניות על הפסקת השימוש, חשוב לוודא שמטפלים בהפסקת השימוש בעומס העבודה.
gcloud
כדי ליצור מכונת Spot וירטואלית עם משך הודעה על הפסקת השימוש של 120 שניות מ-CLI של gcloud, משתמשים בפקודה gcloud beta compute instances create וכוללים את הדגל --preemption-notice-duration=120s. כדי ליצור מכונות וירטואליות (VM) זמניות מסוג Spot, צריך לכלול את הדגל --provisioning-model=SPOT.
אפשר גם לציין פעולת סיום למכונות וירטואליות מסוג Spot על ידי הוספת הדגל --instance-termination-action.
gcloud beta compute instances create VM_NAME \
--provisioning-model=SPOT \
--preemption-notice-duration=120s \
--instance-termination-action=TERMINATION_ACTION
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: name של המכונה הווירטואלית החדשה. -
TERMINATION_ACTION: אופציונלי: מציינים איזו פעולת סיום תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, אוSTOP(התנהגות ברירת המחדל) אוDELETE.
מידע נוסף על האפשרויות שאפשר לציין כשיוצרים מכונת VM זמין במאמר אפשרויות הגדרה במהלך יצירת מכונה. לדוגמה, כדי ליצור מכונות וירטואליות מסוג Spot עם סוג מכונה ותמונה שצוינו, משתמשים בפקודה הבאה:
gcloud beta compute instances create VM_NAME \
--provisioning-model=SPOT \
--preemption-notice-duration=120s \
[--image=IMAGE | --image-family=IMAGE_FAMILY] \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--instance-termination-action=TERMINATION_ACTION
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: name של המכונה הווירטואלית החדשה. -
IMAGE: מציינים אחת מהאפשרויות הבאות:-
IMAGE: גרסה ספציפית של תמונה ציבורית או של משפחת התמונות. לדוגמה, תמונה ספציפית היא--image=debian-10-buster-v20200309. - משפחת תמונות.
כך נוצרת מכונת ה-VM מתמונת מערכת ההפעלה העדכנית ביותר שלא הוצאה משימוש.
לדוגמה, אם מציינים
--image-family=debian-10, Compute Engine יוצר מכונה וירטואלית מהגרסה העדכנית של תמונת מערכת ההפעלה במשפחת תמונות Debian 10.
-
-
IMAGE_PROJECT: הפרויקט שמכיל את התמונה. לדוגמה, אם מציינים אתdebian-10כמשפחת התמונות, מציינים אתdebian-cloudכפרויקט התמונות.
MACHINE_TYPE: סוג המכונה המוגדר מראש או המותאם אישית של המכונה הווירטואלית החדשה.כדי לקבל רשימה של סוגי המכונות שזמינים באזור מסוים, משתמשים בפקודה
gcloud compute machine-types listעם הדגל--zones.
TERMINATION_ACTION: אופציונלי: מציינים איזו פעולת סיום תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, אוSTOP(התנהגות ברירת המחדל) אוDELETE.
REST
כדי ליצור VM במודל Spot עם משך הודעת קדימות של 120 שניות מ-Compute Engine API, משתמשים בשיטה beta instances.insert וכוללים את השדה "preemptionNoticeDuration": { "seconds": 120 }.
צריך לציין את סוג המכונה ואת השם של המכונה הווירטואלית. אפשר גם לציין תמונה לדיסק האתחול.
כדי ליצור מכונות וירטואליות מסוג Spot, צריך לכלול את השדה "provisioningModel": spot.
אפשר גם לציין פעולת סיום למכונות וירטואליות מסוג Spot על ידי הוספת השדה "instanceTerminationAction".
POST https://compute.s3nsapis.fr/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "scheduling": { "provisioningModel": "SPOT", "preemptionNoticeDuration": { "seconds": 120 }, "instanceTerminationAction": "TERMINATION_ACTION" } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את המכונה הווירטואלית. -
ZONE: האזור שבו רוצים ליצור את המכונה הווירטואלית. בנוסף, האזור צריך לתמוך בסוג המכונה שבה רוצים להשתמש עבור המכונה הווירטואלית החדשה. -
MACHINE_TYPE: סוג המכונה המוגדר מראש או המותאם אישית של המכונה הווירטואלית החדשה. -
VM_NAME: השם של המכונה הווירטואלית החדשה. -
IMAGE_PROJECT: הפרויקט שמכיל את התמונה. לדוגמה, אם מציינים אתfamily/debian-10כמשפחת התמונות, מציינים אתdebian-cloudכפרויקט התמונות. -
IMAGE: מציינים אחת מהאפשרויות הבאות:- גרסה ספציפית של תמונה ציבורית. לדוגמה, תמונה ספציפית היא
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309", כאשרdebian-cloudהואIMAGE_PROJECT. - משפחת תמונות.
כך נוצרת מכונת ה-VM מתמונת מערכת ההפעלה העדכנית ביותר שלא הוצאה משימוש.
לדוגמה, אם מציינים
"sourceImage": "projects/debian-cloud/global/images/family/debian-10", כאשרdebian-cloudהואIMAGE_PROJECT, Compute Engine יוצר מכונה וירטואלית מהגרסה העדכנית של תמונת מערכת ההפעלה במשפחת תמונות Debian 10.
- גרסה ספציפית של תמונה ציבורית. לדוגמה, תמונה ספציפית היא
-
TERMINATION_ACTION: אופציונלי: מציינים איזו פעולת סיום תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, אוSTOP(התנהגות ברירת המחדל) אוDELETE.
מידע נוסף על האפשרויות שאפשר לציין כשיוצרים מכונת VM זמין במאמר אפשרויות הגדרה במהלך יצירת מכונה.
יצירת VM במודל Spot עם עד 30 שניות לטיפול בהפסקה זמנית (ברירת מחדל)
כברירת מחדל, מכונת VM מסוג Spot מקבלת הודעה על הפסקת השימוש בתחילת תקופת ההשבתה של 30 שניות, ואתם צריכים לטפל בהפסקת השימוש באמצעות סקריפט השבתה.
המסוף
נכנסים לדף Create an instance במסוף Cloud de Confiance .
בחלונית Machine configuration (הגדרת המכונה), שפתוחה כברירת מחדל, מבצעים את השלבים הבאים:
- בקטע Provisioning model בוחרים באפשרות Spot מהרשימה VM provisioning model.
אופציונלי: כדי לבחור את פעולת הסיום שמתבצעת כש-Compute Engine מבצעת דחיקה של מכונת ה-VM, מבצעים את השלבים הבאים:
- מרחיבים את הקטע VM provisioning model advanced settings.
- ברשימה On VM termination בוחרים באחת מהאפשרויות הבאות:
- כדי לעצור את המכונה הווירטואלית במהלך הפסקת הפעולה לפני הזמן, בוחרים באפשרות Stop (ברירת מחדל).
- כדי למחוק את המכונה הווירטואלית במהלך ההפסקה לפני הזמן, בוחרים באפשרות מחיקה.
בתפריט הניווט, לוחצים על מתקדם. בחלונית Advanced שמופיעה, מבצעים את הפעולות הבאות:
- בקטע מטא נתונים, לוחצים על הוספת פריט.
- בשדה מפתח, מזינים
shutdown-scriptכמפתח המטא-נתונים. - בשדה Value, מוסיפים את התוכן של סקריפט כיבוי שמטפל בהפסקת הפעולה. סקריפט לדוגמה לכיבוי מופיע בקטע טיפול בהפסקת פעולה במסמך הזה.
אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.
כדי ליצור את המכונה הווירטואלית ולהפעיל אותה, לוחצים על Create.
gcloud
כדי ליצור מכונה וירטואלית באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud compute instances create.
כדי ליצור מכונות וירטואליות (VM) זמניות מסוג Spot, צריך לכלול את הדגל --provisioning-model=SPOT. כדי לטפל בהפקעה, צריך לכלול את הדגל --metadata shutdown-script כדי לציין סקריפט כיבוי. אפשר גם לציין פעולת סיום למכונות וירטואליות מסוג Spot על ידי הוספת הדגל --instance-termination-action.
gcloud compute instances create VM_NAME \
--provisioning-model=SPOT \
--metadata shutdown-script=SHUTDOWN_SCRIPT \
--instance-termination-action=TERMINATION_ACTION
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: name של המכונה הווירטואלית החדשה. -
SHUTDOWN_SCRIPT: סקריפט כיבוי, שאפשר לעצב אותו כמו שמוסבר במאמר הרצת סקריפטים של כיבוי. סקריפט לדוגמה לכיבוי מופיע בקטע טיפול בהפסקת פעולה במסמך הזה. -
TERMINATION_ACTION: אופציונלי: מציינים איזו פעולת סיום תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, אוSTOP(התנהגות ברירת המחדל) אוDELETE.
מידע נוסף על האפשרויות שאפשר לציין כשיוצרים מכונת VM זמין במאמר אפשרויות הגדרה במהלך יצירת מכונה. לדוגמה, כדי ליצור מכונות וירטואליות מסוג Spot עם סוג מכונה ותמונה שצוינו, משתמשים בפקודה הבאה:
gcloud compute instances create VM_NAME \
--provisioning-model=SPOT \
--metadata shutdown-script=SHUTDOWN_SCRIPT \
[--image=IMAGE | --image-family=IMAGE_FAMILY] \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--instance-termination-action=TERMINATION_ACTION \
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: name של המכונה הווירטואלית החדשה. -
SHUTDOWN_SCRIPT: סקריפט כיבוי שמטפל בהפקעה. מידע נוסף על הפורמט של סקריפט כיבוי ועל הגדרתו זמין במאמר הרצת סקריפטים של כיבוי. סקריפט לדוגמה לכיבוי מופיע בקטע טיפול בהפסקת פעולה במסמך הזה. -
IMAGE: מציינים אחת מהאפשרויות הבאות:-
IMAGE: גרסה ספציפית של תמונה ציבורית או של משפחת התמונות. לדוגמה, תמונה ספציפית היא--image=debian-10-buster-v20200309. - משפחת תמונות.
כך נוצרת מכונת ה-VM מתמונת מערכת ההפעלה העדכנית ביותר שלא הוצאה משימוש.
לדוגמה, אם מציינים
--image-family=debian-10, Compute Engine יוצר מכונה וירטואלית מהגרסה העדכנית של תמונת מערכת ההפעלה במשפחת תמונות Debian 10.
-
-
IMAGE_PROJECT: הפרויקט שמכיל את התמונה. לדוגמה, אם מציינים אתdebian-10כמשפחת התמונות, מציינים אתdebian-cloudכפרויקט התמונות.
MACHINE_TYPE: סוג המכונה המוגדר מראש או המותאם אישית של המכונה הווירטואלית החדשה.כדי לקבל רשימה של סוגי המכונות שזמינים באזור מסוים, משתמשים בפקודה
gcloud compute machine-types listעם הדגל--zones.
TERMINATION_ACTION: אופציונלי: מציינים איזו פעולת סיום תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, אוSTOP(התנהגות ברירת המחדל) אוDELETE.
Terraform
אפשר להשתמש במשאב של Terraform כדי ליצור VM במודל Spot באמצעות הבלוק scheduling, כמו בדוגמה הבאה.
כדי להוסיף סקריפט כיבוי לטיפול בהפקעה, מוסיפים גם metadata
בלוק כמו שמוצג במאמר הרצת סקריפטים של כיבוי.
סקריפט לדוגמה לכיבוי מופיע בקטע טיפול בהפסקת פעולה במסמך הזה.
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
REST
כדי ליצור מכונה וירטואלית באמצעות Compute Engine API, משתמשים ב-method instances.insert.
צריך לציין את סוג המכונה ואת השם של המכונה הווירטואלית. אפשר גם לציין תמונה לדיסק האתחול.
כדי ליצור מכונות וירטואליות מסוג Spot, צריך לכלול את השדה "provisioningModel": spot.
כדי לטפל בהפקעה, צריך לכלול גם את השדה "metadata" ולציין סקריפט כיבוי.
אפשר גם לציין פעולת סיום למכונות וירטואליות מסוג Spot על ידי הוספת השדה "instanceTerminationAction".
POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "scheduling": { "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" }, "metadata": { "items": [ { "key": "shutdown-script", "value": "SHUTDOWN_SCRIPT" } ] } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את המכונה הווירטואלית. -
ZONE: האזור שבו רוצים ליצור את המכונה הווירטואלית. בנוסף, האזור צריך לתמוך בסוג המכונה שבה רוצים להשתמש עבור המכונה הווירטואלית החדשה. -
MACHINE_TYPE: סוג המכונה המוגדר מראש או המותאם אישית של המכונה הווירטואלית החדשה. -
VM_NAME: השם של המכונה הווירטואלית החדשה. -
IMAGE_PROJECT: הפרויקט שמכיל את התמונה. לדוגמה, אם מציינים אתfamily/debian-10כמשפחת התמונות, מציינים אתdebian-cloudכפרויקט התמונות. -
IMAGE: מציינים אחת מהאפשרויות הבאות:- גרסה ספציפית של תמונה ציבורית. לדוגמה, תמונה ספציפית היא
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309", כאשרdebian-cloudהואIMAGE_PROJECT. - משפחת תמונות.
כך נוצרת מכונת ה-VM מתמונת מערכת ההפעלה העדכנית ביותר שלא הוצאה משימוש.
לדוגמה, אם מציינים
"sourceImage": "projects/debian-cloud/global/images/family/debian-10", כאשרdebian-cloudהואIMAGE_PROJECT, Compute Engine יוצר מכונה וירטואלית מהגרסה העדכנית ביותר של תמונת מערכת ההפעלה במשפחת תמונות Debian 10.
- גרסה ספציפית של תמונה ציבורית. לדוגמה, תמונה ספציפית היא
-
TERMINATION_ACTION: אופציונלי: מציינים איזו פעולת סיום תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, אוSTOP(התנהגות ברירת המחדל) אוDELETE. -
SHUTDOWN_SCRIPT: סקריפט כיבוי שמטפל בהפקעה. מידע נוסף על הפורמט של סקריפט כיבוי ועל הגדרתו זמין במאמר הרצת סקריפטים של כיבוי. סקריפט לדוגמה לכיבוי מופיע בקטע טיפול בהפסקת פעולה במסמך הזה.
מידע נוסף על האפשרויות שאפשר לציין כשיוצרים מכונת VM זמין במאמר אפשרויות הגדרה במהלך יצירת מכונה.
המשך
בדוגמה הבאה נוצרת מכונה וירטואלית (VM) במודל Spot ללא סקריפט כיבוי לטיפול בהפסקה זמנית. מידע נוסף על הגדרת סקריפט כיבוי למכונה וירטואלית חדשה או קיימת זמין במאמר הרצת סקריפטים של כיבוי. דוגמה לסקריפט כיבוי מופיעה בקטע טיפול בדחיקה במסמך הזה.
Java
בדוגמה הבאה נוצרת מכונה וירטואלית (VM) במודל Spot ללא סקריפט כיבוי לטיפול בהפסקה זמנית. מידע נוסף על הגדרת סקריפט כיבוי למכונה וירטואלית חדשה או קיימת זמין במאמר הרצת סקריפטים של כיבוי. דוגמה לסקריפט כיבוי מופיעה בקטע טיפול בדחיקה במסמך הזה.
Python
בדוגמה הבאה נוצרת מכונה וירטואלית (VM) במודל Spot ללא סקריפט כיבוי לטיפול בהפסקה זמנית. מידע נוסף על הגדרת סקריפט כיבוי למכונה וירטואלית חדשה או קיימת זמין במאמר הרצת סקריפטים של כיבוי. דוגמה לסקריפט כיבוי מופיעה בקטע טיפול בדחיקה במסמך הזה.
הפעלת מכונות וירטואליות במודל Spot
בדומה למכונות וירטואליות אחרות, מכונות וירטואליות מסוג Spot מתחילות לפעול מיד אחרי שהן נוצרות. באופן דומה, אם מכונות וירטואליות מסוג Spot הופסקו, אפשר להפעיל אותן מחדש כדי לחזור למצב RUNNING.
אתם יכולים לעצור ולהפעיל מחדש מכונות וירטואליות מסוג Spot שנפלטו כמה פעמים שתרצו, כל עוד יש קיבולת.
מידע נוסף זמין במאמר בנושא מחזור החיים של מכונת VM.
אם Compute Engine מפסיק את הפעילות של מכונה וירטואלית (VM) אחת או יותר מסוג Spot בקבוצת מופעי מכונה מנוהלים (MIG) עם התאמה אוטומטית לעומס או באשכול Google Kubernetes Engine (GKE), הקבוצה מפעילה מחדש את המכונות הווירטואליות כשהמשאבים הופכים שוב לזמינים.
זיהוי מודל ההקצאה ופעולת הסיום של מכונת VM
כדי לראות אם מדובר במכונה וירטואלית רגילה, בVM במודל Spot או בVM זמני, צריך לזהות את מודל הקצאת המשאבים של המכונה הווירטואלית. במקרה של VM במודל Spot, אפשר גם לזהות את פעולת הסיום. אפשר לזהות את מודל ההקצאה של מכונה וירטואלית ואת פעולת הסיום שלה באמצעות מסוףCloud de Confiance , ה-CLI של gcloud או Compute Engine API.
המסוף
נכנסים לדף VM instances.
לוחצים על שם המכונה הווירטואלית שרוצים לזהות. ייפתח הדף VM instance details.
עוברים לקטע ניהול בתחתית הדף. בקטע המשנה Availability policies (מדיניות זמינות), מסמנים את האפשרויות הבאות:
- אם VM provisioning model מוגדר ל-Spot, המכונה הווירטואלית היא VM במודל Spot.
- האפשרות On VM termination מציינת איזו פעולה לבצע כש-Compute Engine מבצעת דחיקה של המכונה הווירטואלית, כלומר Stop או Delete של המכונה הווירטואלית.
- אחרת, אם מודל הקצאת המכונה הווירטואלית מוגדר כ-Standard או כ-—:
- אם האפשרות יכולת הפסקה לפני הזמן מוגדרת למופעל, המכונה הווירטואלית היא VM זמני.
- אחרת, המכונה הווירטואלית היא מכונה וירטואלית רגילה.
- אם VM provisioning model מוגדר ל-Spot, המכונה הווירטואלית היא VM במודל Spot.
gcloud
כדי להוסיף תיאור למכונה וירטואלית באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud compute instances describe:
gcloud compute instances describe VM_NAME
כאשר VM_NAME הוא השם של המכונה הווירטואלית שרוצים לבדוק.
בפלט, בודקים את השדה scheduling כדי לזהות את המכונה הווירטואלית:
אם הפלט כולל את השדה
provisioningModelעם הערךSPOT, כמו בדוגמה הבאה, המכונה הווירטואלית היא VM במודל Spot.... scheduling: ... provisioningModel: SPOT instanceTerminationAction: TERMINATION_ACTION ...
הערך
TERMINATION_ACTIONמציין איזו פעולה תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, כלומר יפסיק (STOP) או ימחק (DELETE) את המכונה הווירטואלית. אם השדהinstanceTerminationActionחסר, ערך ברירת המחדל הואSTOP.אחרת, אם הפלט כולל את השדה
provisioningModelעם הערךstandardאו אם הפלט לא כולל את השדהprovisioningModel:- אם הפלט כולל את השדה
preemptibleעם הערךtrue, המכונה הווירטואלית היא VM זמני. - אחרת, המכונה הווירטואלית היא מכונה וירטואלית רגילה.
- אם הפלט כולל את השדה
REST
כדי לתאר מכונה וירטואלית מ-Compute Engine API, משתמשים בשיטה instances.get:
GET https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו נמצאת המכונה הווירטואלית. -
ZONE: האזור שבו נמצאת המכונה הווירטואלית. -
VM_NAME: השם של המכונה הווירטואלית שרוצים לבדוק.
בפלט, בודקים את השדה scheduling כדי לזהות את המכונה הווירטואלית:
אם הפלט כולל את השדה
provisioningModelעם הערךSPOT, כמו בדוגמה הבאה, המכונה הווירטואלית היא VM במודל Spot.{ ... "scheduling": { ... "provisioningModel": "SPOT", "instanceTerminationAction": "TERMINATION_ACTION" ... }, ... }הערך
TERMINATION_ACTIONמציין איזו פעולה תתבצע כש-Compute Engine יבצע דחיקה של המכונה הווירטואלית, כלומר יפסיק (STOP) או ימחק (DELETE) את המכונה הווירטואלית. אם השדהinstanceTerminationActionחסר, ערך ברירת המחדל הואSTOP.אחרת, אם הפלט כולל את השדה
provisioningModelעם הערךstandardאו אם הפלט לא כולל את השדהprovisioningModel:- אם הפלט כולל את השדה
preemptibleעם הערךtrue, המכונה הווירטואלית היא VM זמני. - אחרת, המכונה הווירטואלית היא מכונה וירטואלית רגילה.
- אם הפלט כולל את השדה
המשך
Java
Python
ניהול של הפסקה זמנית של VM במודל Spot
כדי ללמוד איך לנהל את ההפסקה הזמנית של VM במודל Spot, אפשר לעיין בקטעים הבאים:
התמודדות עם הפסקה זמנית
כש-Compute Engine מתחיל להפסיק את הפעילות של מכונת Spot, אפשר לנסות לבצע פעולות ניקוי לפני שהמכונה הווירטואלית מסיימת את ההשבתה. הטיפול בשיבוש יכול לכלול עצירה מסודרת של תהליך שפועל והעברה של מצב עומס העבודה.
אפשר להשתמש בשיטות הבאות כדי לטפל בהפסקה זמנית של VM במודל Spot:
- טיפול בהפקעה בעומס העבודה. אנחנו ממליצים על השיטה הזו למכונות וירטואליות מסוג Spot עם משך זמן של 120 שניות להודעה על הפסקת השימוש (גרסת Preview). באופן ספציפי, במסגרת עומס העבודה, צריך להגדיר קוד לטיפול בהפקעה כדי להמתין להפעלה עד שההפקעה תתחיל, כפי שמוסבר במאמר זיהוי הפקעה במכונה וירטואלית. לאחר מכן, הקוד לטיפול בהקדמה יפעל במהלך משך הודעת ההקדמה. (אופציונלי, במכונות הווירטואליות האלה אפשר גם לציין סקריפט כיבוי, שמופעל במהלך תקופת הכיבוי).
- טיפול בהקדמה בסקריפט כיבוי. אנחנו ממליצים על השיטה הזו למכונות וירטואליות מסוג Spot ללא משך הודעה על הפסקת שימוש, שזו הגדרת ברירת המחדל. באופן ספציפי, צריך להגדיר את הקוד לטיפול בהקדמה בסקריפט כיבוי, כמו שמוצג בדוגמה הבאה. סקריפט ההשבתה פועל אוטומטית למשך עד 30 שניות במהלך תקופת ההשבתה של כל סוג של השבתה. לכן, כדאי להגדיר את הקוד לטיפול בהפסקת פעולה לפני הזמן כך שהוא יפעל רק אם המכונה הווירטואלית מפסיקה לפני הזמן, כמו שמוסבר במאמר זיהוי הפסקת פעולה לפני הזמן במכונה וירטואלית.
בדוגמה הבאה מוסבר איך לטפל בהפסקה זמנית על ידי העלאה של קובץ נקודת ביקורת לקטגוריה של Cloud Storage בסקריפט כיבוי, ואיך להוסיף סקריפט כיבוי בזמן יצירה או עדכון של VM במודל Spot. הסקריפט הזה מופעל כשהמכונה הווירטואלית מתחילה להיסגר, לפני שהפקודה הרגילה kill של מערכת ההפעלה מפסיקה את כל התהליכים שנותרו. אחרי עצירה מסודרת של תוכנית מסוימת, הסקריפט מבצע העלאה מקבילה של קובץ נקודת ביקורת לקטגוריה של Cloud Storage.
#!/bin/bash
MY_PROGRAM="PROGRAM_NAME" # For example, "apache2" or "nginx"
MY_USER="LOCAL_USER"
CHECKPOINT="/home/$MY_USER/checkpoint.out"
BUCKET_NAME="BUCKET_NAME" # For example, "my-checkpoint-files" (without gs://)
echo "Shutting down! Seeing if ${MY_PROGRAM} is running."
# Find the newest copy of $MY_PROGRAM
PID="$(pgrep -n "$MY_PROGRAM")"
if [[ "$?" -ne 0 ]]; then
echo "${MY_PROGRAM} not running, shutting down immediately."
exit 0
fi
echo "Sending SIGINT to $PID"
kill -2 "$PID"
# Portable waitpid equivalent
while kill -0 "$PID"; do
sleep 1
done
echo "$PID is done, copying ${CHECKPOINT} to gs://${BUCKET_NAME} as ${MY_USER}"
su "${MY_USER}" -c "gcloud storage cp $CHECKPOINT gs://${BUCKET_NAME}/"
echo "Done uploading, shutting down."
הסקריפט הזה יוצא מנקודת הנחה לגבי הדברים הבאים:
מכונת ה-VM נוצרה עם גישת קריאה/כתיבה לפחות ל-Cloud Storage. הוראות ליצירת מכונה וירטואלית עם היקפי ההרשאות המתאימים זמינות במסמכי התיעוד בנושא אימות.
יש לכם קטגוריה של Cloud Storage קיימת והרשאה לכתוב בה.
כדי להוסיף את הסקריפט הזה למכונה וירטואלית, צריך להגדיר את הסקריפט כך שיפעל עם עומס העבודה במכונה הווירטואלית ולהוסיף אותו למטא-נתונים של המכונה הווירטואלית.
מעתיקים או מורידים את סקריפט הכיבוי:
מעתיקים את סקריפט הכיבוי הקודם אחרי שמחליפים את הערכים הבאים:
-
PROGRAM_NAME: השם של התהליך או התוכנית שרוצים לסגור. לדוגמה,apache2אוnginx. -
LOCAL_USER: שם המשתמש שדרכו נכנסתם למכונה הווירטואלית. -
BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage שבה רוצים לשמור את קובץ נקודת הבדיקה של התוכנית. שימו לב שבמקרה הזה שם הקטגוריה לא מתחיל ב-gs://.
-
מורידים את סקריפט ההשבתה לתחנת העבודה המקומית ואז מחליפים את המשתנים הבאים בקובץ:
-
PROGRAM_NAME: השם של התהליך או התוכנית שרוצים לסגור. לדוגמה,apache2אוnginx. -
LOCAL_USER: שם המשתמש שדרכו נכנסתם למכונה הווירטואלית. -
BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage שבה רוצים לשמור את קובץ נקודת הבדיקה של התוכנית. שימו לב שבמקרה הזה שם הקטגוריה לא מתחיל ב-gs://.
-
מוסיפים את סקריפט הכיבוי למכונה וירטואלית חדשה או למכונה וירטואלית קיימת.
זיהוי של הפסקת שימוש במכונות וירטואליות במודל Spot
בקטעים הבאים מוסבר על השיטות שבהן אפשר להשתמש כדי לזהות את ההפסקות של מכונות וירטואליות מסוג Spot.
- זיהוי של דחיקה במכונה וירטואלית: לדוגמה, אפשר להשתמש בשיטה הזו כדי לבדוק אם יש דחיקה בסקריפט כיבוי או כדי להפעיל טיפול בדחיקה במכונות וירטואליות מסוג Spot עם משך הודעה על דחיקה של 120 שניות (גרסת Preview).
- הצגת פעולות של קדימות: לדוגמה, אפשר להשתמש בשיטה הזו כשרוצים לדעת למה מכונות וירטואליות מסוג Spot נסגרות.
זיהוי של הפסקת פעולה במכונה וירטואלית
כדי לזהות אם מתבצעת הפסקה של מכונה וירטואלית מתוך המכונה הווירטואלית עצמה, בודקים את הערך preempted במטא-נתוני ברירת המחדל של המכונה הווירטואלית בשרת המטא-נתונים. לדוגמה, אפשר להשתמש בשיטות הבאות:
כדאי לבדוק את הערך הנוכחי של
preempted. אפשר להריץ את הפקודה הבאה שלcurlמתוך מכונת ה-VM כדי לקבל את הערך הנוכחי שלpreempted:curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUEאם הערך הוא
TRUE, המכונה הווירטואלית נדחקה על ידי Compute Engine, אחרת הערך הואFALSE. לדוגמה, אפשר להשתמש בפקודה הזו בסקריפט של כיבוי כדי לבדוק אם הכיבוי נגרם כתוצאה מקדימות או לא.מחכים עד ש
preemptedיהיהTRUE. כדי להמתין עד ש-preemptedיהיהTRUE, אפשר להוסיף את המחרוזת?wait_for_change=trueלכתובת ה-URL של הפקודה הקודמת. הפקודה הזו מבצעת בקשת HTTP GET תלויה שמוחזרת רק כשהמטא-נתונים השתנו והמכונה הווירטואלית נדחקה.curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUEהפקודה הזו שימושית כשרוצים להפעיל טיפול בהקדמה מחוץ לסקריפט כיבוי. לדוגמה, אפשר להשתמש בשיטה הזו כדי להפעיל טיפול בהפסקת פעולה של מכונות וירטואליות מסוג Spot עם משך הודעה של 120 שניות על הפסקת פעולה (גרסת Preview).
הצגת פעולות של קדימות
אפשר לראות את פעולות ההפקעה מ-Compute Engine באמצעותCloud de Confiance console, ה-CLI של gcloud או Compute Engine API.
המסוף
כדי לבדוק אם מכונה וירטואלית נדחקה, אפשר לעיין ביומני פעילות המערכת.
נכנסים לדף Logs במסוף Cloud de Confiance .
בוחרים פרויקט ולוחצים על המשך.
מוסיפים
compute.instances.preemptedלשדה סינון לפי תווית או חיפוש טקסט.אופציונלי, אפשר גם להזין שם של מכונה וירטואלית אם רוצים לראות פעולות של קדימות למכונה וירטואלית ספציפית.
מקישים על Enter כדי להחיל את המסננים שצוינו. במסוף Cloud de Confiance מתעדכנת רשימת היומנים ומוצגות רק הפעולות שבהן בוצעה קדימה למכונה וירטואלית.
בוחרים פעולה ברשימה כדי לראות פרטים על המכונה הווירטואלית שנפסקה.
gcloud
משתמשים בפקודה gcloud compute operations list עם פרמטר filter כדי לקבל רשימה של אירועי קדימות בפרויקט.
gcloud compute operations list \
--filter="operationType=compute.instances.preempted"
אם רוצים, אפשר להשתמש בפרמטרים נוספים של מסננים כדי לצמצם עוד יותר את היקף התוצאות. לדוגמה, כדי לראות אירועי הפסקה זמנית רק עבור מכונות בקבוצת מופעי מכונה מנוהלים, משתמשים בפקודה הבאה:
gcloud compute operations list \
--filter="operationType=compute.instances.preempted AND targetLink:instances/BASE_INSTANCE_NAME"
כאשר BASE_INSTANCE_NAME הוא שם הבסיס שצוין כתחילית לשמות של כל מכונות ה-VM בקבוצת מופעי מכונה מנוהלים זו.
הפלט אמור להיראות כך:
NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-yyyyyyyy compute.instances.preempted us-central1-f/instances/example-instance-yyy 200 DONE 2015-04-02T12:12:10.881-07:00
סוג הפעולה compute.instances.preempted מציין שבוצעה קדימה למכונה הווירטואלית. אפשר להשתמש בפקודה gcloud compute operations describe כדי לקבל מידע נוסף על פעולת קדימות ספציפית.
gcloud compute operations describe SYSTEM_EVENT \
--zone=ZONE
מחליפים את מה שכתוב בשדות הבאים:
-
SYSTEM_EVENT: אירוע המערכת מהפלט של הפקודהgcloud compute operations list. לדוגמה:systemevent-yyyyyyyy. -
ZONE: האזור של אירוע המערכת, לדוגמה:us-central1-f.
הפלט אמור להיראות כך:
... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.s3nsapis.fr/compute/v1/projects/my-project/zones/us-central1-f/operations/systemevent-yyyyyyyy startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
כדי לקבל רשימה של פעולות מערכת מהזמן האחרון בפרויקט ובאזור ספציפיים, משתמשים בשיטה zoneOperations.get.
GET https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/operations
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה פרויקט. ZONE: אזור.
אפשר גם להוסיף מסנן לבקשת ה-API כדי לצמצם את היקף התגובה ולהציג רק פעולות של קדימות:
operationType="compute.instances.preempted"
לחלופין, כדי לראות פעולות של קדימות למכונה וירטואלית ספציפית, מוסיפים פרמטר targetLink למסנן:
operationType="compute.instances.preempted" AND targetLink="https://www.s3nsapis.fr/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
מחליפים את הערכים הבאים:
+ PROJECT_ID: מזהה הפרויקט.
+ ZONE: האזור.
+ VM_NAME: השם של מכונה וירטואלית ספציפית באזור ובפרויקט הזה.
התגובה מכילה רשימה של פעולות מהזמן האחרון. לדוגמה, דחיקה תיראה כך:
{
"kind": "compute#operation",
"id": "15041793718812375371",
"name": "systemevent-yyyyyyyy",
"zone": "https://www.s3nsapis.fr/compute/v1/projects/my-project/zones/us-central1-f",
"operationType": "compute.instances.preempted",
"targetLink": "https://www.s3nsapis.fr/compute/v1/projects/my-project/zones/us-central1-f/instances/example-instance",
"targetId": "12820389800990687210",
"status": "DONE",
"statusMessage": "Instance was preempted.",
...
}
בדיקת הגדרות הקדימות
אתם יכולים להריץ סימולציות של אירועי תחזוקה במכונות וירטואליות מסוג Spot כדי לכפות עליהן את הפסקת הפעולה. אתם יכולים להשתמש בתכונה הזו כדי לבדוק איך עומסי העבודה שלכם מזהים ומטפלים בהפסקת פעולה. במאמר סימולציה של אירוע תחזוקה במארח מוסבר איך לבדוק אירועי תחזוקה במכונות.
שיטות מומלצות
כדי להפיק את המקסימום משימוש במכונות וירטואליות מסוג Spot, כדאי לפעול לפי השיטות המומלצות הבאות.
איך בודקים את הזמינות של משאבים לפני שיוצרים מכונות וירטואליות מסוג Spot, או אם מנסים ליצור מכונות וירטואליות מסוג Spot אבל נתקלים שוב ושוב בשגיאות שקשורות לזמינות משאבים, אפשר לראות את הזמינות של סוג מכונה באזור או בתחום ספציפיים. בדיקת הזמינות של משאבים עוזרת להגדיל את הסיכויים ליצור מכונות וירטואליות מסוג Spot בהצלחה. הוראות מפורטות זמינות במאמר בנושא צפייה בזמינות של מכונות VM מסוג Spot.
איך רואים את הנתונים ההיסטוריים לפני שיוצרים מכונות וירטואליות מסוג Spot, אפשר לראות את שיעור ההפקעה ההיסטורי ואת התמחור ההיסטורי של סוגי המכונות שבהן רוצים להשתמש במכונות הווירטואליות מסוג Spot. המידע הזה עוזר לכם להשוות בין סוגי המכונות ולבחור את הסוג שהכי מתאים לעומס העבודה ולצרכים שלכם מבחינת עלויות. הוראות מפורטות במאמר איך צופים בשיעור ההפקעה ובמחירים של מכונות Spot VM.
שימוש בתבניות של מכונות וירטואליות במקום ליצור מכונות וירטואליות (VM) זמניות מסוג Spot אחת בכל פעם, אתם יכולים להשתמש בתבניות של מכונות כדי ליצור כמה מכונות וירטואליות זמניות מסוג Spot עם אותם מאפיינים. כדי להשתמש ב-MIGs, צריך תבניות של הגדרות מכונה. אפשרות אחרת היא ליצור כמה מכונות וירטואליות מסוג Spot באמצעות ה-API ליצירת מכונות וירטואליות בכמות גדולה.
שימוש בקבוצות של מכונות וירטואליות לשיפור הזמינות של המשאבים ויצירה מחדש אוטומטית של מכונות וירטואליות מסוג Spot. כדאי להשתמש בקבוצות של מכונות מנוהלות (MIG) כדי להפוך את עומסי העבודה במכונות Spot VM לגמישים ועמידים יותר. לדוגמה, כדי למנוע שגיאות שקשורות לזמינות משאבים, אפשר להגדיל את הגמישות של עומס העבודה על ידי מתן אפשרות לפעולות הבאות:
- אפשר להשתמש בקבוצות אזוריות של מכונות וירטואליות עם ממשק רשת כדי להגדיר כמה מיקומים.
- אפשר להשתמש בכמה סוגי מכונות באמצעות גמישות של מכונות וירטואליות.
בנוסף, קבוצות MIG יכולות לתקן מכונות וירטואליות מסוג Spot שנפסקו על ידי יצירה מחדש שלהן באופן אוטומטי.
בוחרים סוגי מכונות קטנים יותר. המשאבים למכונות וירטואליות מסוג Spot מגיעים מקיבולת עודפת ומגיבוי Cloud de Confiance by S3NS . בדרך כלל קל יותר להשיג קיבולת למכונות וירטואליות מסוג Spot עבור סוגי מכונות קטנים יותר, כלומר סוגי מכונות עם פחות משאבים כמו vCPU וזיכרון. יכול להיות שתמצאו יותר קיבולת למכונות וירטואליות מסוג Spot אם תבחרו סוג מכונה קטן יותר בהתאמה אישית, אבל סביר יותר שתמצאו קיבולת אם תבחרו סוג מכונה קטן יותר מוגדר מראש. לדוגמה, בהשוואה לקיבולת של מכונה עם קונפיגורציה מוגדרת (predefined)
n2-standard-32, סביר יותר שתהיה קיבולת לסוג המכונהn2-custom-24-96שמוגדר בהתאמה אישית, אבל סביר עוד יותר שתהיה קיבולת למכונה עם קונפיגורציה מוגדרת (predefined)n2-standard-16.הפעלת אשכולות גדולים של מכונות וירטואליות מסוג Spot בשעות שבהן העומס נמוך. העומס על Cloud de Confiance by S3NS מרכזי הנתונים משתנה בהתאם למיקום ולשעה ביום, אבל בדרך כלל הוא הכי נמוך בלילות ובסופי שבוע. לכן, הלילות וסופי השבוע הם הזמנים הכי טובים להפעלת אשכולות גדולים של מכונות וירטואליות מסוג Spot.
תכנון עומסי עבודה (workloads) כך שיהיו עמידים בפני כשלים ושיבושים. חשוב להיות מוכנים לעובדה שיש שינויים בדפוסי הקדימות בנקודות זמן שונות. לדוגמה, אם יש הפסקת חשמל חלקית באזור מסוים, יכול להיות שיהיה צורך לבצע פרימפשן למספר גדול של מכונות וירטואליות זמניות מסוג Spot כדי לפנות מקום למכונות וירטואליות רגילות שצריך להעביר כחלק מהשחזור. בחלון הזמן הקצר הזה, שיעור הקדימות ייראה שונה מאוד ממה שהוא בדרך כלל. אם העומס שלכם מניח שדחיקות תמיד מתבצעות בקבוצות קטנות, יכול להיות שלא תהיו מוכנים לאירוע כזה.
ניסיון חוזר ליצירת מכונות וירטואליות מסוג Spot שנפסקו. אם מכונות Spot VM שלכם נדחקו, נסו ליצור מכונות Spot VM חדשות פעם או פעמיים לפני שתחזרו למכונות VM רגילות. בהתאם לדרישות שלכם, יכול להיות שכדאי לשלב בין מכונות וירטואליות רגילות לבין מכונות וירטואליות מסוג Spot באשכולות, כדי להבטיח שהעבודה תתבצע בקצב מתאים.
שימוש בסקריפטים לכיבוי. אפשר לנהל את ההודעות על כיבוי והקצאה מראש באמצעות סקריפט כיבוי שיכול לשמור את ההתקדמות של עבודה מסוימת, כך שהיא תוכל להמשיך מהמקום שבו היא הפסיקה, במקום להתחיל מחדש.