כשרוצים ליצור מספר גדול של מכונות וירטואליות (VM) זהות ובלתי תלויות זו בזו, אפשר ליצור מכונות וירטואליות בכמות גדולה באמצעות Google Cloud CLI או Compute Engine API. אפשר ליצור את מכונות ה-VM האלה בכל האזורים באזור או לפזר אותן בין אזורים מסוימים.
לפרטים נוספים ולמגבלות שקשורות ליצירת כמות גדולה של מכונות וירטואליות, קראו את המאמר מידע על יצירת כמות גדולה של מכונות וירטואליות. אם רוצים ליצור מכונות עם יחידות GPU מצורפות, כדאי לעיין במאמר בנושא יצירת מכונות וירטואליות עם GPU בכמות גדולה.
לפני שמתחילים
- לפני שיוצרים מכונות וירטואליות ומשאבים קשורים, צריך לוודא שיש מספיק מכסה והרשאות נדרשות.
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, מאתחלים את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת מספר גדול של מכונות וירטואליות, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין מכונות של Compute (v1) (roles/compute.instanceAdmin.v1) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות ליצירת מכונות וירטואליות בכמות גדולה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור כמה מכונות וירטואליות בבת אחת, צריך את ההרשאות הבאות:
-
compute.instances.createבפרויקט -
כדי להשתמש באימג' בהתאמה אישית ליצירת המכונה הווירטואלית (VM):
compute.images.useReadOnlyבקובץ אימג' -
כדי להשתמש ב-snapshot ליצירת המכונה הווירטואלית:
compute.snapshots.useReadOnlyבקובץ snapshot -
כדי להשתמש בתבנית של הגדרות מכונה ליצירת המכונה הווירטואלית:
compute.instanceTemplates.useReadOnlyבתבנית של הגדרות המכונה -
כדי לציין רשת משנה למכונה הווירטואלית:
compute.subnetworks.useבפרויקט או ברשת המשנה שנבחרה -
כדי לציין כתובת IP סטטית למכונה הווירטואלית:
compute.addresses.useבפרויקט -
כדי להקצות כתובת IP חיצונית למכונה הווירטואלית כשמשתמשים ברשת VPC:
compute.subnetworks.useExternalIpבפרויקט או ברשת המשנה שנבחרה -
כדי להקצות רשת מדור קודם למכונה הווירטואלית:
compute.networks.useבפרויקט -
כדי להקצות כתובת IP חיצונית למכונה הווירטואלית כשמשתמשים ברשת מדור קודם:
compute.networks.useExternalIpבפרויקט -
כדי להגדיר מטא-נתונים של המכונה הווירטואלית:
compute.instances.setMetadataבפרויקט -
כדי להגדיר תגים למכונה הווירטואלית:
compute.instances.setTagsבמכונה הווירטואלית -
כדי להגדיר תוויות למכונה הווירטואלית:
compute.instances.setLabelsבמכונה הווירטואלית -
כדי להגדיר חשבון שירות לשימוש של המכונה הווירטואלית:
compute.instances.setServiceAccountבמכונה הווירטואלית -
כדי ליצור דיסק חדש למכונה הווירטואלית:
compute.disks.createבפרויקט -
כדי לצרף דיסק קיים במצב קריאה-בלבד או במצב קריאה וכתיבה:
compute.disks.useבדיסק -
כדי לצרף דיסק קיים במצב קריאה-בלבד:
compute.disks.useReadOnlyבדיסק
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
יצירת מכונות וירטואליות בכמות גדולה באזור
כדי ליצור כמות גדולה של מכונות וירטואליות באזור מסוים, משתמשים ב-CLI של gcloud או ב-Compute Engine API.
אם מציינים סוג מכונה או תמיכה בחומרה נוספת כמו GPU או SSD מקומי, מערכת Compute Engine ממקמת את המכונות הווירטואליות בתחום באזור שתומך בסוג המכונה ובחומרה הנוספת.
gcloud
כדי ליצור כמות גדולה של מכונות וירטואליות באזור מסוים, משתמשים בפקודה gcloud compute
instances bulk create הבאה:
gcloud compute instances bulk create \
( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
--region=REGION \
--count=COUNT \
[ --min-count=MIN_COUNT \ ]
[--location-policy=LOCATION_POLICY \ ]
[--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]
מחליפים את מה שכתוב בשדות הבאים:
NAME_PATTERN: תבנית השם של המכונות הווירטואליות. משתמשים ברצף של תווי סולמית (
#) כדי ש-Compute Engine יחליף אותם ברצף של מספרים. לדוגמה, שימוש ב-vm-#בתבנית השם יוצר מכונות וירטואליות עם שמות כמוvm-1ו-vm-2, עד למספר המכונות הווירטואליות שצוין על ידי--count, שחייב להיות קטן או שווה למספר המכונות הווירטואליות שהתבנית מאפשרת.כשמשתמשים בתבנית שם, מערכת Compute Engine מנסה להימנע מקונפליקטים בשמות על ידי בדיקת השמות של מכונות וירטואליות קיימות שנוצרו מבקשות קודמות.
PREDEFINED_NAMES: רשימה של שמות מוגדרים מראש של מכונות וירטואליות שרוצים ליצור. אם משתמשים בדגל הזה ומציינים את
COUNT, הערך שלCOUNTחייב להיות שווה למספר השמות שסופקו.REGION: האזור שבו רוצים ליצור את המכונות הווירטואליות.
COUNT: מספר המכונות הווירטואליות שרוצים ליצור. הערך הזה צריך להיות קטן ממספר המכונות הווירטואליות שמותר להשתמש בהן לפי
NAME_PATTERN, או שווה לו. לחלופין, אם משתמשים ב---predefined-names, לא צריך לציין אתCOUNT, אבל אם מציינים אותו, הוא חייב להיות שווה למספר השמות שסופקו.MIN_COUNT: המספר המינימלי של מכונות וירטואליות שייווצרו. בטבלה הבאה מפורטת התנהגות הבקשה בהתאם להגדרת הדגל:
ערך תיאור לא מוגדר ערך ברירת המחדל הוא COUNT. אם Compute Engine לא יכול ליצור את מספר המכונות הוירטואליות שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות וירטואליות.1Compute Engine יוצר כמה שיותר מכונות וירטואליות, עד COUNT.יותר מ- 1ופחות מ-COUNTCompute Engine יוצר לפחות MIN_COUNTמכונות וירטואליות, עד למקסימום שלCOUNTמכונות וירטואליות. אם אי אפשר ליצורMIN_COUNTמכונות וירטואליות, הבקשה נכשלת ולא נוצרות מכונות וירטואליות.LOCATION_POLICY: האזורים שרוצים לכלול או להחריג באזור מסוים. משתמשים ברשימה של צמדי מפתח/ערך, כאשר האזור הוא המפתח והמדיניות היא הערך. הערכים התקינים של המדיניות הם
allow(ברירת מחדל) ו-deny. ערך לדוגמה של הדגל הזה:--location-policy=us-east1-b=allow,us-east1-c=deny
TARGET_DISTRIBUTION_SHAPE: חלוקת המכונות הווירטואליות בין האזורים שצוינו. משתמשים בדגל
--location-policyכדי לציין את האזורים. בטבלה הבאה מפורטים הערכים התקינים של הדגל הזה:ערך תיאור ANY_SINGLE_ZONEהמדיניות מחייבת מיקום של מכונות וירטואליות באזור אחד, ונותנת עדיפות לניצול של הזמנות שלא נעשה בהן שימוש. אפשר להשתמש בזה כדי להימנע מתעבורת נתונים יוצאת (egress) ברשת בין אזורים שונים, או כדי להפחית את זמן האחזור ברשת. זה ערך ברירת המחדל. BALANCEDהמערכת מנסה לפזר את המכונות הווירטואליות באופן שווה בכל התחומים באזור. ANYמאפשרת הפצה של מכונות וירטואליות בכמה אזורים באזור מסוים. המערכת בוחרת אזורים שיש בהם משאבים זמינים וממקסמת את השימוש בהזמנות אזוריות שלא נעשה בהן שימוש.
REST
כדי ליצור כמות גדולה של מכונות וירטואליות באזור מסוים, משתמשים בinstances.bulkInsert
שיטה הבאה:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
...
"namePattern": "NAME_PATTERN",
"perInstanceProperties": {
"PREDEFINED_NAME_1": {},
"PREDEFINED_NAME_2": {},
...
},
"count": COUNT,
"minCount": MIN_COUNT,
"locationPolicy": {
"LOCATION_POLICY"
},
"targetShape": "TARGET_DISTRIBUTION_SHAPE"
...
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.
REGION: האזור שבו יוצרים את המכונות הווירטואליות.
NAME_PATTERN: תבנית השם של המכונות הווירטואליות. צריך לציין את הערך הזה או את הערך
perInstanceProperties. משתמשים ברצף של תווים מסוג סולמית (#) כדי שמערכת Compute Engine תחליף אותם ברצף של מספרים. לדוגמה, אם משתמשים ב-vm-#בתור תבנית השם, נוצרות מכונות וירטואליות עם שמות כמוvm-1ו-vm-2, עד למספר המכונות הווירטואליות שצוין על ידי--count, שחייב להיות קטן או שווה למספר המכונות הווירטואליות שאפשר ליצור לפי תבנית השם.כשמשתמשים בתבנית שם, מערכת Compute Engine מנסה להימנע מקונפליקטים בשמות על ידי בדיקת השמות של מכונות וירטואליות קיימות שנוצרו מבקשות קודמות.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: רשימה של שמות מוגדרים מראש למכונות הווירטואליות שרוצים ליצור. צריך לציין את הערך הזה או את הערך
namePattern. אם משתמשים בדגל הזה ומציינים אתCOUNT, הערך שלCOUNTחייב להיות שווה למספר השמות שצוינו.COUNT: מספר המכונות הווירטואליות שרוצים ליצור. הערך הזה צריך להיות קטן ממספר המכונות הווירטואליות שמותר להשתמש בהן לפי
NAME_PATTERN, או שווה לו. לחלופין, אם משתמשים ב-perInstanceProperties, לא צריך לציין אתCOUNT, אבל אם מציינים אותו, הוא צריך להיות שווה למספר השמות שצוינו.MIN_COUNT: המספר המינימלי של מכונות וירטואליות שייווצרו. בטבלה הבאה מפורטת התנהגות הבקשה בהתאם להגדרת הדגל:
ערך תיאור לא מוגדר ערך ברירת המחדל הוא COUNT. אם Compute Engine לא יכול ליצור את מספר המכונות הוירטואליות שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות וירטואליות.1Compute Engine יוצר כמה שיותר מכונות וירטואליות, עד COUNT.יותר מ- 1ופחות מ-COUNTCompute Engine יוצר לפחות MIN_COUNTמכונות וירטואליות, עד למקסימום שלCOUNTמכונות וירטואליות. אם אי אפשר ליצורMIN_COUNTמכונות וירטואליות, הבקשה נכשלת ולא נוצרות מכונות וירטואליות.LOCATION_POLICY: האזורים שרוצים לכלול או להחריג באזור מסוים. משתמשים ברשימה של צמדי מפתח/ערך, כאשר האזור הוא המפתח והמדיניות היא הערך. הערכים התקינים של המדיניות הם
ALLOW(ברירת המחדל) ו-DENY. הנה ערך לדוגמה בשדה הזה:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },TARGET_DISTRIBUTION_SHAPE: פיזור המכונות הווירטואליות באזורים שצוינו. משתמשים בשדה
locationPolicyכדי לציין את האזורים. בטבלה הבאה מפורטים הערכים התקינים של השדה הזה:ערך תיאור ANY_SINGLE_ZONEהמדיניות מחייבת מיקום של מכונות וירטואליות באזור אחד, ונותנת עדיפות לניצול של הזמנות שלא נעשה בהן שימוש. אפשר להשתמש בזה כדי להימנע מתעבורת נתונים יוצאת (egress) ברשת בין אזורים שונים, או כדי להפחית את זמן האחזור ברשת. זה ערך ברירת המחדל. BALANCEDהמערכת מנסה לפזר את המכונות הווירטואליות באופן שווה בכל התחומים באזור. ANYמאפשרת להפיץ מכונות וירטואליות בכמה אזורים באותו מחוז. בוחר אזורים שיש בהם משאבים זמינים, ומנצל באופן מקסימלי את ההזמנות שלא נוצלו באזורים.
יצירת מכונות וירטואליות בכמות גדולה באזור
כדי ליצור כמות גדולה של מכונות וירטואליות באזור מסוים, משתמשים ב-CLI של gcloud או ב-Compute Engine API.
gcloud
כדי ליצור כמות גדולה של מכונות וירטואליות באזור ספציפי, משתמשים בפקודה gcloud compute
instances bulk create הבאה.
gcloud compute instances bulk create \
( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
--zone=ZONE \
--count=COUNT \
[ --min-count=MIN_COUNT ]
מחליפים את מה שכתוב בשדות הבאים:
NAME_PATTERN: תבנית השם של המכונות הווירטואליות. משתמשים ברצף של תווי סולמית (
#) כדי ש-Compute Engine יחליף אותם ברצף של מספרים. לדוגמה, שימוש ב-vm-#בתבנית השם יוצר מכונות וירטואליות עם שמות כמוvm-1ו-vm-2, עד למספר המכונות הווירטואליות שצוין על ידי--count, שחייב להיות קטן או שווה למספר המכונות הווירטואליות שהתבנית מאפשרת.כשמשתמשים בתבנית שם, מערכת Compute Engine מנסה להימנע מקונפליקטים בשמות על ידי בדיקת השמות של מכונות וירטואליות קיימות שנוצרו מבקשות קודמות.
PREDEFINED_NAMES: רשימה של שמות מוגדרים מראש של מכונות וירטואליות שרוצים ליצור. אם משתמשים בדגל הזה ומציינים את
COUNT, הערך שלCOUNTחייב להיות שווה למספר השמות שסופקו.ZONE: האזור שבו יוצרים את המכונות הווירטואליות.
COUNT: מספר המכונות הווירטואליות שרוצים ליצור. הערך הזה צריך להיות קטן ממספר המכונות הווירטואליות שמותר להשתמש בהן לפי
NAME_PATTERN, או שווה לו. לחלופין, אם משתמשים ב---predefined-names, לא צריך לציין אתCOUNT, אבל אם מציינים אותו, הוא חייב להיות שווה למספר השמות שסופקו.MIN_COUNT: המספר המינימלי של מכונות וירטואליות שייווצרו. בטבלה הבאה מפורטת התנהגות הבקשה בהתאם להגדרת הדגל:
ערך תיאור לא מוגדר ערך ברירת המחדל הוא COUNT. אם Compute Engine לא יכול ליצור את מספר המכונות הוירטואליות שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות וירטואליות.1Compute Engine יוצר כמה שיותר מכונות וירטואליות, עד COUNT.יותר מ- 1ופחות מ-COUNTCompute Engine יוצר לפחות MIN_COUNTמכונות וירטואליות, ועדCOUNTמכונות וירטואליות לכל היותר. אם אי אפשר ליצור מכונות וירטואליותMIN_COUNT, הבקשה נכשלת ולא נוצרות מכונות וירטואליות.
REST
כדי ליצור כמות גדולה של מכונות וירטואליות באזור מסוים, משתמשים בשיטה instances.bulkInsert הבאה.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
...
"namePattern": "NAME_PATTERN",
"perInstanceProperties": {
"PREDEFINED_NAME_1": {},
"PREDEFINED_NAME_2": {},
...
},
"count": COUNT,
"minCount": MIN_COUNT,
...
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.
ZONE: האזור שבו רוצים ליצור את המכונות הווירטואליות.
NAME_PATTERN: תבנית השם של המכונות הווירטואליות. צריך לציין את הערך הזה או את הערך
perInstanceProperties. משתמשים ברצף של תווים מסוג סולמית (#) כדי שמערכת Compute Engine תחליף אותם ברצף של מספרים. לדוגמה, אם משתמשים בתבנית השםvm-#, נוצרות מכונות וירטואליות עם שמות כמוvm-1ו-vm-2, עד למספר המכונות הווירטואליות שצוין ב---count. המספר הזה חייב להיות קטן או שווה למספר המכונות הווירטואליות שתבנית השם מאפשרת.כשמשתמשים בתבנית שם, מערכת Compute Engine מנסה להימנע מקונפליקטים בשמות על ידי בדיקת השמות של מכונות וירטואליות קיימות שנוצרו מבקשות קודמות.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: רשימה של שמות מוגדרים מראש למכונות הווירטואליות שרוצים ליצור. צריך לציין את הערך הזה או את הערך
namePattern. אם משתמשים בדגל הזה ומציינים אתCOUNT, הערך שלCOUNTחייב להיות שווה למספר השמות שצוינו.COUNT: מספר המכונות הווירטואליות שרוצים ליצור. הערך הזה צריך להיות קטן ממספר המכונות הווירטואליות שמותר להשתמש בהן לפי
NAME_PATTERN, או שווה לו. לחלופין, אם משתמשים ב-perInstanceProperties, לא צריך לציין אתCOUNT, אבל אם מציינים אותו, הוא צריך להיות שווה למספר השמות שצוינו.MIN_COUNT: המספר המינימלי של מכונות וירטואליות שייווצרו. בטבלה הבאה מפורטת התנהגות הבקשה בהתאם להגדרת הדגל:
ערך תיאור לא מוגדר ערך ברירת המחדל הוא COUNT. אם Compute Engine לא יכול ליצור את מספר המכונות הוירטואליות שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות וירטואליות.1Compute Engine יוצר כמה שיותר מכונות וירטואליות, עד COUNT.יותר מ- 1ופחות מ-COUNTCompute Engine יוצר לפחות MIN_COUNTמכונות וירטואליות, עד למקסימום שלCOUNTמכונות וירטואליות. אם אי אפשר ליצור מכונות וירטואליותMIN_COUNT, הבקשה נכשלת ולא נוצרות מכונות וירטואליות.
יצירת מספר גדול של מכונות וירטואליות עם שמות מארחים בהתאמה אישית
אפשר ליצור מכונות וירטואליות עם שמות מארחים בהתאמה אישית בכמות גדולה באזור או באזור זמינות באמצעות ה-CLI של gcloud או Compute Engine API.
צריך להגדיר באופן ידני את רשומת ה-DNS של שם המארח המותאם אישית. מידע נוסף זמין במאמר בנושא מגבלות.
אם לא מציינים שם מארח, Compute Engine מגדיר את שם המארח של המכונות הווירטואליות כאחד מהשמות הבאים:
VM_NAME.c.PROJECT_ID.internalכשמפעילים DNS גלובליVM_NAME.ZONE.c.PROJECT_ID.internalכשמפעילים DNS אזורי
מידע נוסף זמין במאמר בנושא שמות DNS פנימיים.
gcloud
כדי ליצור כמות גדולה של מכונות וירטואליות עם שמות מארחים בהתאמה אישית באזור מסוים, משתמשים בפקודה gcloud beta compute instances bulk create הבאה.
gcloud beta compute instances bulk create \
( --name-pattern="NAME_PATTERN" | --predefined-names=[PREDEFINED_NAMES] ) \
--per-instance-hostnames=[VM_NAME=HOSTNAME,...] \
--zone=REGION \
--count=COUNT \
[ --min-count=MIN_COUNT ]
[--location-policy=LOCATION_POLICY \ ]
[--target-distribution-shape=TARGET_DISTRIBUTION_SHAPE ]
מחליפים את מה שכתוב בשדות הבאים:
NAME_PATTERN: תבנית השם של המכונות הווירטואליות. משתמשים ברצף של תווי סולמית (
#) כדי ש-Compute Engine יחליף אותם ברצף של מספרים. לדוגמה, שימוש ב-vm-#בתבנית השם יוצר מכונות וירטואליות עם שמות כמוvm-1ו-vm-2, עד למספר המכונות הווירטואליות שצוין על ידי--count, שחייב להיות קטן או שווה למספר המכונות הווירטואליות שהתבנית מאפשרת.כשמשתמשים בתבנית שם, מערכת Compute Engine מנסה להימנע מקונפליקטים בשמות על ידי בדיקת השמות של מכונות וירטואליות קיימות שנוצרו מבקשות קודמות.
PREDEFINED_NAMES: רשימה של שמות מוגדרים מראש של מכונות וירטואליות שרוצים ליצור. אם משתמשים בדגל הזה ומציינים את
COUNT, הערך שלCOUNTחייב להיות שווה למספר השמות שסופקו.[VM_NAME=HOSTNAME, ...]: רשימה של צמדי מפתח/ערך של שמות מוגדרים מראש למכונות הווירטואליות ושמות מארחים של דומיינים מלאים שרוצים להקצות למכונות הווירטואליות. שמות מארחים מותאמים אישית צריכים לעמוד בדרישות של RFC 1035 לשמות מארחים תקינים.
REGION: האזור שבו יוצרים את המכונות הווירטואליות.
COUNT: מספר המכונות הווירטואליות שרוצים ליצור. הערך הזה צריך להיות קטן ממספר המכונות הווירטואליות שמותר להשתמש בהן לפי
NAME_PATTERN, או שווה לו. לחלופין, אם משתמשים ב---predefined-names, לא צריך לציין אתCOUNT, אבל אם מציינים אותו, הוא חייב להיות שווה למספר השמות שסופקו.MIN_COUNT: המספר המינימלי של מכונות וירטואליות שייווצרו. בטבלה הבאה מפורטת התנהגות הבקשה בהתאם להגדרת הדגל:
ערך תיאור לא מוגדר ערך ברירת המחדל הוא COUNT. אם Compute Engine לא יכול ליצור את מספר המכונות הוירטואליות שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות וירטואליות.1Compute Engine יוצר כמה שיותר מכונות וירטואליות, עד COUNT.יותר מ- 1ופחות מ-COUNTCompute Engine יוצר לפחות MIN_COUNTמכונות וירטואליות, עד למקסימום שלCOUNTמכונות וירטואליות. אם אי אפשר ליצורMIN_COUNTמכונות וירטואליות, הבקשה נכשלת ולא נוצרות מכונות וירטואליות.LOCATION_POLICY: האזורים שרוצים לכלול או להחריג באזור מסוים. משתמשים ברשימה של צמדי מפתח/ערך, כאשר האזור הוא המפתח והמדיניות היא הערך. הערכים התקינים של המדיניות הם
ALLOW(ברירת המחדל) ו-DENY. הנה ערך לדוגמה בשדה הזה:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },TARGET_DISTRIBUTION_SHAPE: פיזור המכונות הווירטואליות באזורים שצוינו. משתמשים בשדה
locationPolicyכדי לציין את האזורים. בטבלה הבאה מפורטים הערכים התקינים של השדה הזה:ערך תיאור ANY_SINGLE_ZONEהמדיניות מחייבת מיקום של מכונות וירטואליות באזור אחד, ונותנת עדיפות לניצול של הזמנות שלא נעשה בהן שימוש. אפשר להשתמש בזה כדי להימנע מתעבורת נתונים יוצאת (egress) ברשת בין אזורים שונים, או כדי להפחית את זמן האחזור ברשת. זה ערך ברירת המחדל. BALANCEDהמערכת מנסה לפזר את המכונות הווירטואליות באופן שווה בכל התחומים באזור. ANYמאפשרת הפצה של מכונות וירטואליות בכמה אזורים באזור מסוים. המערכת בוחרת אזורים שיש בהם משאבים זמינים וממקסמת את השימוש בהזמנות אזוריות שלא נעשה בהן שימוש.
REST
כדי ליצור מכונות וירטואליות עם שמות מארחים בהתאמה אישית בכמות גדולה באזור מסוים, משתמשים בשיטה instances.bulkInsert הבאה:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
...
"namePattern": "NAME_PATTERN",
"perInstanceProperties": {
"PREDEFINED_NAME_1": {"hostname": HOSTNAME_1},
"PREDEFINED_NAME_2": {"hostname": HOSTNAME_2},
...
},
"count": COUNT,
"minCount": MIN_COUNT,
"locationPolicy": {
"LOCATION_POLICY"
},
"targetShape": "TARGET_DISTRIBUTION_SHAPE"
...
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.
REGION: האזור שבו יוצרים את המכונות הווירטואליות.
NAME_PATTERN: תבנית השם של המכונות הווירטואליות. צריך לציין את הערך הזה או את הערך
perInstanceProperties. משתמשים ברצף של תווים מסוג סולמית (#) כדי שמערכת Compute Engine תחליף אותם ברצף של מספרים. לדוגמה, אם משתמשים ב-vm-#בתור תבנית השם, נוצרות מכונות וירטואליות עם שמות כמוvm-1ו-vm-2, עד למספר המכונות הווירטואליות שצוין על ידי--count, שחייב להיות קטן או שווה למספר המכונות הווירטואליות שאפשר ליצור לפי תבנית השם.כשמשתמשים בתבנית שם, מערכת Compute Engine מנסה להימנע מקונפליקטים בשמות על ידי בדיקת השמות של מכונות וירטואליות קיימות שנוצרו מבקשות קודמות.
PREDEFINED_NAME_1, PREDEFINED_NAME_2, ...: רשימה של שמות מוגדרים מראש למכונות הווירטואליות שרוצים ליצור. צריך לציין את השדה הזה או את
namePattern. אם משתמשים בדגל הזה ומציינים אתCOUNT, הערך שלCOUNTחייב להיות שווה למספר השמות שצוינו.HOSTNAME_1, HOSTNAME_2 וכו': שמות מארחים של דומיינים שמוגדרים במלואם, שאתם רוצים להקצות למכונות הווירטואליות. שמות מארחים בהתאמה אישית חייבים לעמוד בדרישות של RFC 1035 לשמות מארחים תקינים.
לדוגמה, כדי ליצור שתי מכונות וירטואליות
vm-1ו-vm-2עם שמות מארחים מותאמים אישיתmy-host1234.example.comו-test.example.comבהתאמה, צריך לציין את המאפייןhostnameב-perInstancePropertiesבאופן הבא:{ ... "perInstanceProperties": { "vm-1": { "hostname": "my-host1234.example.com" }, "vm-2": { "hostname": "test.example.com" }, ...} },COUNT: מספר המכונות הווירטואליות שרוצים ליצור. הערך הזה צריך להיות קטן ממספר המכונות הווירטואליות שמותר להשתמש בהן לפי
NAME_PATTERN, או שווה לו. לחלופין, אם משתמשים ב-perInstanceProperties, לא צריך לציין אתCOUNT, אבל אם מציינים אותו, הוא צריך להיות שווה למספר השמות שצוינו.MIN_COUNT: המספר המינימלי של מכונות וירטואליות שייווצרו. בטבלה הבאה מפורטת התנהגות הבקשה בהתאם להגדרת הדגל:
ערך תיאור לא מוגדר ערך ברירת המחדל הוא COUNT. אם Compute Engine לא יכול ליצור את מספר המכונות הוירטואליות שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות וירטואליות.1Compute Engine יוצר כמה שיותר מכונות וירטואליות, עד COUNT.יותר מ- 1ופחות מ-COUNTCompute Engine יוצר לפחות MIN_COUNTמכונות וירטואליות, עד למקסימום שלCOUNTמכונות וירטואליות. אם אי אפשר ליצורMIN_COUNTמכונות וירטואליות, הבקשה נכשלת ולא נוצרות מכונות וירטואליות.LOCATION_POLICY: האזורים שרוצים לכלול או להחריג באזור מסוים. משתמשים ברשימה של צמדי מפתח/ערך, כאשר האזור הוא המפתח והמדיניות היא הערך. הערכים התקינים של המדיניות הם
ALLOW(ברירת המחדל) ו-DENY. הנה ערך לדוגמה בשדה הזה:"locations": { "zones/us-central1-a": { "preference": "ALLOW" }, "zones/us-central1-c": { "preference": "DENY" }, ... },TARGET_DISTRIBUTION_SHAPE: פיזור המכונות הווירטואליות באזורים שצוינו. משתמשים בשדה
locationPolicyכדי לציין את האזורים. בטבלה הבאה מפורטים הערכים התקינים של השדה הזה:ערך תיאור ANY_SINGLE_ZONEהמדיניות מחייבת מיקום של מכונות וירטואליות באזור אחד, ונותנת עדיפות לניצול של הזמנות שלא נעשה בהן שימוש. אפשר להשתמש בזה כדי להימנע מתעבורת נתונים יוצאת (egress) ברשת בין אזורים שונים, או כדי להפחית את זמן האחזור ברשת. זה ערך ברירת המחדל. BALANCEDהמערכת מנסה לפזר את המכונות הווירטואליות באופן שווה בכל התחומים באזור. ANYמאפשרת הפצה של מכונות וירטואליות בכמה אזורים באזור מסוים. בוחר אזורים שיש בהם משאבים זמינים, ומנצל באופן מקסימלי את המקומות השמורים שלא נוצלו באזורים.
בדיקת הסטטוס של בקשה ליצירת מכונות וירטואליות בכמות גדולה
כשיוצרים בקשה לשינוי נתונים, Compute Engine מחזיר operationמשאב שאפשר לדגום כדי לקבל את סטטוס הפעולה. מידע נוסף זמין במאמר בנושא טיפול בתגובות מה-API.
כדי לקבל את הסטטוס של בקשה להוספה בכמות גדולה, שולחים בקשת HTTP GET למשאב operation:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/OPERATION_ID
כדי לקבל את הסטטוס של בקשה להוספה בכמות גדולה באזור מסוים, שולחים את הבקשה הבאה:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו יוצרים את המכונות הווירטואליות -
REGION: האזור שבו יוצרים את המכונות הווירטואליות -
ZONE: האזור שבו יוצרים את המכונות הווירטואליות -
OPERATION_ID: מזהה הפעולה של ההוספה בכמות גדולה
אובייקט instancesBulkInsertOperationMetadata בתגובה מכיל פרטים על הפעולה לפי אזור בשדה perLocationStatus.
לכל אזור שכלול בבקשה ליצירה בכמות גדולה, perLocationStatus
מכיל את השדות הבאים:
-
status: הסטטוס הוא אחד מהבאים:-
CREATING: יצירת המכונה הווירטואלית מתבצעת באזור. -
ROLLING_BACK: הבקשה נכשלה באזור והיא מבוטלת. -
DONE: יצירת ה-VM או החזרה למצב הקודם הושלמו בהצלחה באזור.
-
-
targetVmCount: מספר המכונות הווירטואליות ש-Compute Engine מנסה ליצור באזור. מערכת Compute Engine קובעת את המספר הזה אחרי בדיקות ראשוניות, והוא לא משתנה במהלך הפעולה. כשבודקים את סטטוס הפעולה, השדה הזה תמיד מופיע לכל אזור. -
createdVmCount: מספר המכונות הווירטואליות שכבר נוצרו באזור. הערך הזה לא חורג מ-targetVmCountבאזור נתון.-
failedToCreateVmCount: מספר המכונות הווירטואליות שלא הצליחו ליצור באזור. -
deletedVmCount: מספר המכונות הווירטואליות שנמחקו באזור כחלק מהחזרה לאחור של פעולה שנכשלה.
-
השדה progress בתגובה מייצג את אחוז ההשלמה של הפעולה.
הסטטוס של פעולת ההוספה בכמות גדולה הוא RUNNING עד ש-Compute Engine יוצר בהצלחה לפחות את המספר המינימלי של מכונות וירטואליות, ולא מתבצעת יותר יצירה של מכונות וירטואליות או החזרה למצב הקודם של הבקשה.
בזמן שפעולת ההוספה בכמות גדולה מתבצעת, אמורה להופיע תגובה דומה לזו:
{
"kind" : "compute#operation",
"id": "4653028658507445766",
"name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationType": "bulkInsert",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project"
"targetId": 4653028658507445766,
"status": "RUNNING",
"progress": 2,
"user": "example@google.com",
"insertTime": "2023-04-23T09:57:13.474-07:00",
"startTime": "2023-04-23T09:57:13.474-07:00",
"selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationGroupId": "4653028658507445766",
"metadata":
"instances_bulk_insert_operation_metadata": {
"per_location_status": {
"zones/us-central1-a": {
"status": "CREATING",
"targetVmCount": 50,
"createdVmCount": 1
}
}
}
}
בדוגמה הזו, מכונה אחת נוצרה בהצלחה והפעולה הושלמה ב-2%.
הפעולה מחזירה את הסטטוס DONE כש-Compute Engine יוצרת בהצלחה לפחות את המספר המינימלי של מכונות וירטואליות שצוין על ידי minCount, או כש-Compute Engine משלימה את הביטול של הבקשה.
אחרי שהמכונות הווירטואליות נוצרות בהצלחה, מתקבלת תשובה דומה לזו:
{
"endTime": "2023-04-23T09:58:13.474-07:00",
"id": "5053101474378293244",
"insertTime": "2023-04-23T09:57:13.474-07:00",
"instancesBulkInsertOperationMetadata": {
"perLocationStatus": {
"zones/us-central1-a": {
"status": "DONE",
"createdVmCount": 50,
"targetVmCount": 50
}
}
},
"kind": "compute#operation",
"name": "operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"operationGroupId": "4653028658507445766",
"operationType": "bulkInsert",
"progress": 100,
"selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/operations/operation-1587661030638-5a3f823c143e3-e33bbfa3-bd72185c",
"startTime": "2023-09-11T16:21:55.629-07:00",
"status": "DONE",
"targetId": "625521788110",
"targetLink": "https://www.googleapis.com/compute/v1/projects/my-project",
"user": "example@google.com",
"zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a"
}
מידע נוסף מופיע במאמר בנושא אובייקט instancesBulkInsertOperationMetadata.
בדיקת הסטטוס של מכונה וירטואלית אחת
כדי לבדוק את הסטטוס של מכונה וירטואלית יחידה שנוצרה מבקשה ליצירת מכונות וירטואליות בכמות גדולה, משתמשים ב-CLI של gcloud או ב-Compute Engine API.
gcloud
מהתגובה
Operationשמוחזרת מהבקשה, מקבלים את הערך של המאפייןoperationGroupId.כדי לחפש בכל הפעולות ובכל האזורים בפרויקט מכונות וירטואליות שמשויכות לבקשה האזורית או המקומית, משתמשים במאפיין
operationGroupIdכמסנן עם הפקודהgcloud compute operations list:gcloud compute operations list \ --filter=(operationGroupId=OPERATION_GROUP_ID)
כדי לקבל את שאר המאפיינים של המכונה הווירטואלית, מבצעים אחת מהפעולות הבאות:
ברשימת הפעולות,
targetLinkמייצג את הנתיב של מכונת ה-VM. כדי לקבל את המאפיינים של המכונה הווירטואלית, משתמשים בפקודהgcloud compute instances describeעם הנתיב הזה כשם של המכונה הווירטואלית:gcloud compute instances describe VM_NAME
משתמשים בפקודה
gcloud compute instances listעם מסנן שכולל את שמות המכונות הווירטואליות מתוך רשימת הפעולות:gcloud compute instances list VM_NAME \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
משתמשים בפקודה
gcloud compute instances listכדי לקבל את המאפיינים של מכונות וירטואליות מכל האזורים והאזורים, ומסננים לפי תווית ייחודית למופעים או לפי השמות שלהם:gcloud compute instances list \ --filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
REST
מהתגובה
Operationשמוחזרת מהבקשה, מקבלים את הערך של המאפייןoperationGroupId.משתמשים במאפיין
operationGroupIdכדי לקבל את רשימת הפעולות של המכונה הווירטואלית שמשויכות לבקשה האזורית או לבקשה לפי אזור:אם שלחתם בקשה אזורית, כדי לחפש בכל הפעולות ובכל האזורים בפרויקט, השתמשו ב-method
globalOperations.aggregatedListוכללו את המאפייןoperationGroupIdכמסנן:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
אם שלחתם בקשה ברמת האזור, כדי להציג את הפעולות באותו אזור, השתמשו ב-method
zoneOperations.getוכללו את המאפייןoperationGroupIdבגוף הבקשה:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert { ... "operationGroupId":"OPERATION_GROUP_ID" ... }
כדי לקבל את שאר המאפיינים של המכונה הווירטואלית, מבצעים אחת מהפעולות הבאות:
ברשימת הפעולות,
targetLinkמייצג את הנתיב של המכונה הווירטואלית. משתמשים בשיטהinstances.getעם הנתיב הזה בתור השם של המכונה הווירטואלית, כדי לקבל את כל המאפיינים של המכונה הווירטואלית:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
משתמשים ב
instances.getmethod עם מסנן שכולל את שמות המכונות הווירטואליות מרשימת הפעולות:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
אפשר להשתמש ב
instances.aggregatedListשיטה כדי לקבל את המאפיינים של מכונות וירטואליות מכל האזורים והאזורים הזמינים, ולסנן לפי תווית שייחודית למופעים או לפי השמות שלהם:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
דוגמאות לפסאודו קוד
בדוגמאות הקוד המדומה הבאות אפשר לראות איך להתאים אישית בקשות ליצירת מכונות וירטואליות בכמות גדולה.
יצירת מספר גדול של מכונות וירטואליות באזור אחד מתוך קבוצת אזורים
בפסאודו-קוד הבא מוסבר איך ליצור 1,000 מכונות וירטואליות באזור אחד מתוך קבוצת אזורים. כשמנסים ליצור מכונות וירטואליות בכמות גדולה באזור אחד מתוך קבוצת אזורים, הבקשה בודקת קודם את הקיבולת. אם אין מספיק קיבולת, הבקשה נכשלת מיד ומנסה שוב עם האזור הבא בקבוצה.
מציינים את מספר המכונות הווירטואליות שרוצים ליצור באזור.
nTarget = 1000מגדירים את האזורים שבהם רוצים לנסות ליצור את המכונות הווירטואליות.
acceptableRegions = ["us-central1", "us-east1", "us-west1"]חוזרים על הפעולה באזורים השונים ומנסים ליצור את המכונות הווירטואליות בכל אזור עד שהפעולה מצליחה.
for region in acceptableRegions: call bulk API: region=region, location-policy=location-policy, count=nTarget if request succeeds and the operation succeeds: break
יצירת מכונות וירטואליות מסוג מכונה ספציפי בכמות גדולה באזור
בפסאודו-קוד הבא מתואר איך ליצור כמה מכונות וירטואליות מסוג מכונה ספציפי בתחום מוגדר. כשמנסים ליצור מספר גדול של מכונות וירטואליות מאותו סוג, המערכת בודקת קודם אם סוגי המכונות האלה זמינים. אם אין מספיק מכונות מהסוג הזה, הבקשה נכשלת מיד ומנסה שוב עם סוג המכונה הבא.
מציינים את מספר המכונות הווירטואליות שרוצים ליצור ואת האזור שבו רוצים ליצור אותן.
nTarget = 1000 region = "us-central1"מציינים את משפחות המכונות שרוצים לנסות ליצור את המכונות הווירטואליות שלהן.
acceptableMachineFamilies = ["n2","c2","e2","n1"]מבצעים איטרציה על קבוצת סוגי המכונות ומנסים ליצור את המכונות הווירטואליות מסוג המכונה עד שהפעולה מצליחה.
for family in acceptableMachineFamilies: call bulk APIs: region=region, count=nTarget, machineFamily=family if request succeeds and the operation succeeds: break
יצירת יותר מ-5,000 מכונות וירטואליות באזור
כשיוצרים מכונות וירטואליות בכמות גדולה, אפשר ליצור רק 5,000 מכונות וירטואליות בכל בקשה. בדוגמה הבאה של קוד מדומה אפשר לראות איך ליצור יותר מ-5,000 מכונות וירטואליות בתחום (zone) על ידי שליחת כמה בקשות.
מציינים את מספר המכונות הווירטואליות שרוצים ליצור, מונה למעקב אחרי המספר הכולל של המכונות הווירטואליות שנוצרו, האזור שבו רוצים ליצור את המכונות הווירטואליות ומשתנה לאחסון האזור שבו Compute Engine יוצר את המכונות הווירטואליות.
nTarget = 10000 nCreated = 0 region = "us-central1" targetZone = ""שולחים בקשה ראשונית ליצירת 5,000 מכונות וירטואליות, שומרים את האזור שמוחזר מהבקשה ומעדכנים את מונה מספר המכונות הווירטואליות שנוצרו.
call bulk API: region=region, count=5000 targetZone = zone chosen by bulk API nCreated += # of VMs createdממשיכים לשלוח בקשות ליצירת עד 5,000 מכונות וירטואליות בכל פעם באזור, עד ש-Compute Engine יוצר את מספר המכונות הווירטואליות שצוין.
while(nTarget - nCreated > 0): call bulk API: zone=targetZone, count=5000 nCreated += # of VMs created
יצירת מכונות וירטואליות בכמות גדולה וצפייה בסטטוס שלהן
התהליך הבא מראה איך ליצור קבוצה של מכונות וירטואליות עם שמות מוגדרים מראש, ואז להציג את הסטטוס שלהן:
מציינים את מספר המכונות הווירטואליות שרוצים ליצור, את האזור שבו רוצים ליצור אותן ואת מבנה הנתונים שבו רוצים לאחסן את השמות.
nTarget = 1000 targetZone = "us-central-1a" names = []יוצרים את השמות עם התבנית למכונות הווירטואליות ומוסיפים את השמות למבנה הנתונים.
for n in range(0, 1000): names.push("instance-%d".format(n))יוצרים את המכונות הווירטואליות ומשתמשים ב-
perInstancePropertiesכדי לציין את השמות.call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)כדי לקבל את פרטי המכונות הווירטואליות, משתמשים בשיטה
instances.listעם מסנן לשמות של המכונות הווירטואליות שרוצים לקבל את הפרטים שלהן.instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
המאמרים הבאים
אחרי שיוצרים מכונות וירטואליות בכמות גדולה, אפשר לבצע את אחת מהפעולות הבאות או את שתיהן כדי לפשט את הניהול של המכונות הוירטואליות האלה:
מוסיפים את המכונות הווירטואליות לקבוצת מכונות לא מנוהלת. הוספת מכונות וירטואליות לקבוצת מופעים לא מנוהלת מאפשרת לכם להשתמש ב-Cloud Monitoring. בקבוצות של מכונות לא מנוהלות אין איזון עומסים או ניהול של מחזור החיים של המכונות הווירטואליות.
שימוש בתוויות. תוויות מאפשרות לארגן משאבים באמצעות צמדי מפתח/ערך.