אם רוצים ליצור מספר גדול של מכונות וירטואליות (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 לא יכול ליצור את מספר מכונות ה-VM שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות VM.1מערכת Compute 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 לא יכול ליצור את מספר מכונות ה-VM שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות VM.1מערכת Compute 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מאפשר הפצה של מכונות וירטואליות על פני כמה אזורים באזור מסוים. המערכת בוחרת אזורים שיש בהם משאבים זמינים וממקסמת את השימוש בהזמנות אזוריות שלא נעשה בהן שימוש.
יצירת מכונות וירטואליות (VM) בכמות גדולה באזור
כדי ליצור כמות גדולה של מכונות וירטואליות באזור מסוים, משתמשים ב-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 לא יכול ליצור את מספר מכונות ה-VM שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות VM.1מערכת Compute 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 לא יכול ליצור את מספר מכונות ה-VM שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות VM.1מערכת Compute 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 לא יכול ליצור את מספר מכונות ה-VM שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות VM.1מערכת Compute 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 לא יכול ליצור את מספר מכונות ה-VM שצוין ב-COUNT, הבקשה תיכשל ולא ייווצרו מכונות VM.1מערכת Compute 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 יוצרת בהצלחה לפחות את המספר המינימלי של מכונות ה-VM שצוין על ידי 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)
כדי לקבל את שאר המאפיינים של מכונת ה-VM, מבצעים אחת מהפעולות הבאות:
ברשימת הפעולות,
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כדי לקבל את רשימת הפעולות של מכונות וירטואליות שמשויכות לבקשה אזורית או אזורית ספציפית:אם שלחתם בקשה אזורית, כדי לחפש בכל הפעולות ובכל האזורים בפרויקט, צריך להשתמש בשיטה
globalOperations.aggregatedListולכלול את המאפייןoperationGroupIdכמסנן:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/operations?filter=(operationGroupId=OPERATION_GROUP_ID)
אם שלחתם בקשה אזורית, כדי לרשום את הפעולות באזור הזה, צריך להשתמש בשיטה
zoneOperations.getולכלול את המאפייןoperationGroupIdבגוף הבקשה:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/bulkInsert { ... "operationGroupId":"OPERATION_GROUP_ID" ... }
כדי לקבל את שאר המאפיינים של מכונת ה-VM, מבצעים אחת מהפעולות הבאות:
ברשימת הפעולות,
targetLinkמייצג את הנתיב של המכונה הווירטואלית. כדי לקבל את כל המאפיינים של המכונה הווירטואלית, משתמשים בשיטהinstances.getעם הנתיב הזה בתור השם של המכונה הווירטואלית:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/VM_NAME
משתמשים ב
instances.getשיטה עם מסנן שכולל את שמות המכונות הווירטואליות מרשימת הפעולות:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
משתמשים ב
instances.aggregatedListmethod כדי לקבל את המאפיינים של מכונות וירטואליות מכל האזורים והאזורים, ומסננים לפי תווית ייחודית למופעים או לפי השמות שלהם: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
יצירת מכונות וירטואליות מסוג מכונה ספציפי בכמות גדולה באזור
בפסאודו-קוד הבא מתואר איך ליצור כמה מכונות וירטואליות מסוג מכונה שצוין באזור. כשמנסים ליצור מכונות וירטואליות בכמות גדולה מאותו סוג מכונה, הבקשה בודקת קודם את הזמינות של סוגי המכונות האלה. אם אין מספיק מכונות מהסוג הזה, הבקשה נכשלת מיד ומנסה שוב עם סוג המכונה הבא.
מציינים את מספר מכונות ה-VM שרוצים ליצור ואת האזור שבו רוצים ליצור אותן.
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 מכונות וירטואליות באזור על ידי שליחת כמה בקשות.
מציינים את מספר המכונות הווירטואליות שרוצים ליצור, מונה למעקב אחרי המספר הכולל של המכונות הווירטואליות שנוצרו, האזור שבו רוצים ליצור את המכונות הווירטואליות ומשתנה לאחסון האזור שבו 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. קבוצות של מכונות לא מנוהלות לא מספקות איזון עומסים או ניהול של מחזור החיים של המכונה הווירטואלית.
שימוש בתוויות. תוויות מאפשרות לארגן משאבים באמצעות צמדי מפתח/ערך.