יצירת מכונות וירטואליות בכמות גדולה

אם רוצים ליצור מספר גדול של מכונות וירטואליות (VM) שהן זהות ועצמאיות זו מזו, אפשר ליצור מכונות וירטואליות בכמות גדולה באמצעות Google Cloud CLI או Compute Engine API. אפשר ליצור את מכונות ה-VM האלה בכל האזורים באזור מסוים או לפזר אותן בין אזורים מסוימים.

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

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות ליצירת מכונות וירטואליות בכמות גדולה, צריך לבקש מהאדמין להקצות לכם ב-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 ופחות מ-COUNT ‫Compute 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 ופחות מ-COUNT ‫Compute 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 ופחות מ-COUNT ‫Compute 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 ופחות מ-COUNT ‫Compute 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 ופחות מ-COUNT ‫Compute 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 ופחות מ-COUNT ‫Compute 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

  1. מהתגובה Operation שמוחזרת מהבקשה, מקבלים את הערך של המאפיין operationGroupId.

  2. אפשר להשתמש במאפיין operationGroupId כמסנן עם הפקודה gcloud compute operations list כדי לחפש בכל הפעולות ובכל התחומים בפרויקט מכונות וירטואליות שמשויכות לבקשה אזורית או לבקשה של תחום מסוים:

    gcloud compute operations list \
       --filter=(operationGroupId=OPERATION_GROUP_ID)
    
  3. כדי לקבל את שאר המאפיינים של מכונת ה-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

  1. מהתגובה Operation שמוחזרת מהבקשה, מקבלים את הערך של המאפיין operationGroupId.

  2. משתמשים במאפיין 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"
      ...
      }
      
  3. כדי לקבל את שאר המאפיינים של מכונת ה-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.aggregatedList method כדי לקבל את המאפיינים של מכונות וירטואליות מכל האזורים והאזורים, ומסננים לפי תווית ייחודית למופעים או לפי השמות שלהם:

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/aggregated/instances?filter=(name=VM_NAME_1) OR (name=VM_NAME_2)
      

דוגמאות לקוד מדומה

בדוגמאות הבאות של קוד פסאודו אפשר לראות איך להתאים אישית בקשות ליצירת מכונות וירטואליות בכמות גדולה.

יצירת מכונות וירטואליות בכמות גדולה באזור אחד מתוך קבוצת אזורים

בפסאודו-קוד הבא מוסבר איך ליצור 1,000 מכונות וירטואליות באזור אחד מתוך קבוצת אזורים. כשמנסים ליצור מכונות וירטואליות בכמות גדולה באזור אחד מתוך קבוצת אזורים, הבקשה בודקת קודם את הקיבולת. אם אין מספיק קיבולת, הבקשה נכשלת מיד ומנסה שוב עם האזור הבא בקבוצה.

  1. מציינים את מספר המכונות הווירטואליות שרוצים ליצור באזור.

    nTarget = 1000
    
  2. מציינים את האזורים שבהם המערכת תנסה ליצור את המכונות הווירטואליות.

    acceptableRegions = ["us-central1", "us-east1", "us-west1"]
    
  3. מבצעים איטרציה באזורים ומנסים ליצור את המכונות הווירטואליות בכל אזור עד שהפעולה מצליחה.

    for region in acceptableRegions:
      call bulk API: region=region, location-policy=location-policy, count=nTarget
      if request succeeds and the operation succeeds:
        break
    

יצירת מכונות וירטואליות מסוג מכונה ספציפי בכמות גדולה באזור

בפסאודו-קוד הבא מתואר איך ליצור כמה מכונות וירטואליות מסוג מכונה שצוין באזור. כשמנסים ליצור מכונות וירטואליות בכמות גדולה מאותו סוג מכונה, הבקשה בודקת קודם את הזמינות של סוגי המכונות האלה. אם אין מספיק מכונות מהסוג הזה, הבקשה נכשלת מיד ומנסה שוב עם סוג המכונה הבא.

  1. מציינים את מספר מכונות ה-VM שרוצים ליצור ואת האזור שבו רוצים ליצור אותן.

    nTarget = 1000
    region = "us-central1"
    
  2. מציינים את משפחות המכונות שרוצים לנסות ליצור את המכונות הווירטואליות שלהן.

    acceptableMachineFamilies = ["n2","c2","e2","n1"]
    
  3. הסקריפט ינסה ליצור את המכונות הווירטואליות מסוג המכונה עד שיצליח.

    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 מכונות וירטואליות באזור על ידי שליחת כמה בקשות.

  1. מציינים את מספר המכונות הווירטואליות שרוצים ליצור, מונה למעקב אחרי המספר הכולל של המכונות הווירטואליות שנוצרו, האזור שבו רוצים ליצור את המכונות הווירטואליות ומשתנה לאחסון האזור שבו Compute Engine יוצר את המכונות הווירטואליות.

    nTarget = 10000
    nCreated = 0
    region = "us-central1"
    targetZone = ""
    
  2. שולחים בקשה ראשונית ליצירת 5,000 מכונות וירטואליות, שומרים את האזור שמוחזר מהבקשה ומעדכנים את מונה מספר המכונות הווירטואליות שנוצרו.

    call bulk API: region=region, count=5000
    targetZone = zone chosen by bulk API
    nCreated += # of VMs created
    
  3. ממשיכים לשלוח בקשות ליצירת עד 5,000 מכונות וירטואליות בכל פעם באזור עד ש-Compute Engine יוצר את מספר המכונות הווירטואליות שצוין.

    while(nTarget - nCreated > 0):
      call bulk API: zone=targetZone, count=5000
      nCreated += # of VMs created
    

יצירת מכונות וירטואליות בכמות גדולה וצפייה בסטטוס שלהן

התהליך הבא מראה איך ליצור קבוצה של מכונות וירטואליות עם שמות מוגדרים מראש, ואז להציג את הסטטוס שלהן:

  1. מציינים את מספר המכונות הווירטואליות שרוצים ליצור, את האזור שבו רוצים ליצור אותן ואת מבנה הנתונים שבו רוצים לאחסן את השמות.

    nTarget = 1000
    targetZone = "us-central-1a"
    names = []
    
  2. יוצרים את השמות עם התבנית למכונות הווירטואליות ומוסיפים את השמות למבנה הנתונים.

    for n in range(0, 1000):
      names.push("instance-%d".format(n))
    
  3. יוצרים את המכונות הווירטואליות ומשתמשים ב-perInstanceProperties כדי לציין את השמות.

    call bulk API(zone=targetZone, count=nTarget, names=perInstanceProperties)
    
  4. כדי לקבל את פרטי המכונות הווירטואליות, משתמשים בשיטה instances.list עם מסנן לשמות של המכונות הווירטואליות שרוצים לקבל את הפרטים שלהן.

    instances.list(filter=(name = "instance-1") OR (name = "instance-2") ...)
    

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

אחרי שיוצרים מכונות וירטואליות בכמות גדולה, אפשר לבצע את אחת מהפעולות הבאות או את שתיהן כדי לפשט את הניהול של המכונות האלה: