שיפור הזמינות באמצעות גמישות בבחירת המופעים

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

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

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

  1. אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
  2. כדי לקבל את ההרשאות שדרושות ליצירת משימה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

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

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

הגבלות

כשמשימה משתמשת בגמישות של מופע, חלות כל ההגבלות הבאות:

  • השיפור במידת הזמינות גדל ככל שמספר סוגי המכונות שמאפשרים לעבודה להשתמש בהם גדול יותר.

  • אי אפשר לציין במשימה את מודל ההקצאה FLEX_START או את מודל ההקצאה RESERVATION_BOUND.

  • העבודה לא יכולה לצרוך הזמנה שמטרגטת באופן ספציפי. (השדה reservation צריך להיות לא מוגדר או מוגדר ל-NO_RESERVATION).

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

  • כל משימה יכולה לכלול עד 50 בחירות של מופעים.

  • לכל בחירת מופע בעבודה צריך להיות שם ייחודי, דירוג ייחודי וסוג מכונה ייחודי אחד או יותר.

  • אי אפשר לחזור על סוגי מכונות. צריך לכלול כל סוג מכונה רק בבחירה אחת של מופע לכל עבודה.

  • בכל משימה יכולים להיות עד 200 סוגים ייחודיים של מכונות מתוך הבחירות של המופעים שלה.

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

    • התכונה 'אצווה' מנסה לבחור סוג מכונה אחד או יותר עם רמת הזמינות הגבוהה ביותר רק כשיש כמה סוגי מכונות לבחירת מכונה לדירוג. לדוגמה, הבחירה הזו חשובה אם רוצים שמשימה תכלול מכונות וירטואליות מסוג Spot עם סיכוי נמוך יותר להפסקת פעולה, או יותר מופעים למשימה שיכולה להריץ משימות במקביל.
    • אחרת, כשבבחירת המכונה לדירוג יש רק סוג מכונה אחד, הגמישות של המכונה עוזרת רק למנוע שגיאות שקשורות לזמינות משאבים.
  • העבודה לא יכולה לכלול את השדה machineType, וסוג המכונה של כל תבנית של הגדרות מכונה שהעבודה מציינת מתעלם.

  • צריך לוודא שכל נכס שמציינים לעבודה תואם לכל סוג מכונה מותר. אחרת, יכול להיות שהעבודה תיכשל אחרי ההגשה כי לא ניתן ליצור מופעים. לדוגמה, מומלץ לוודא שלפחות המאפיינים הבאים של משימה תואמים לכל סוגי המכונות:

    • מיקום (אם צוין, השדה allowedLocations[]; אחרת, location)
    • משאבי מחשוב לכל משימה (השדה computeResource)
    • דיסקים ותמונות (שדה volumes[], שדה disk[] ושדה bootDisk)
    • רשת (שדה network)
    • כל שאר מאפייני המופע (instances[] שדות משנה):

      • פלטפורמת CPU מינימלית (שדה minCpuPlatform)
      • מודל הקצאת הרשאות (שדה provisioningModel)
      • יחידות GPU (השדה accelerators[])
  • אי אפשר להחליף דיסקים ופלטפורמות מינימליות של CPU למשימות באצווה. כל סוגי המכונות משתמשים בערכים שציינתם (בשדות המשנה policy או בתבנית של הגדרות מכונה), או בערכי ברירת המחדל של סוג מכונה בבחירת המופע עם העדיפות הכי גבוהה (אם לא ציינתם ערכים). לכן, מומלץ לבצע את כל הפעולות הבאות:

    • מוודאים שסוג דיסק האתחול תואם לכל סוג מכונה מותר. לסיכום, סוגי מכונות מדור רביעי ומעלה לא תומכים בדיסקים קשיחים, סוגי מכונות מדור שני ומטה לא תומכים ב-Hyperdisk, וסוגי מכונות מדור שלישי ומטה משתמשים בדיסקים קשיחים של אתחול כברירת מחדל.

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

יצירת משימה שמותר לה להשתמש בכמה סוגי מכונות

כדי ליצור משימה שיכולה להשתמש בכמה סוגי מכונות, בוחרים אחת מהשיטות הבאות.

gcloud

כדי להגדיר כמה סוגי מכונות כשמשתמשים ב-Google Cloud CLI כדי ליצור עבודה, מבצעים את השלבים הבאים:

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

    "allocationPolicy":{
      "instanceFlexibilityPolicy":{
        "instanceSelections":{
          "INSTANCE_SELECTION_NAME":{
            "rank": RANK,
            "machineTypes": [MACHINE_TYPES]
          }
        }
      }
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • INSTANCE_SELECTION_NAME: שם לבחירת המופע. אם למשימה יש כמה בחירות של מופעים, צריך לוודא שכל שם במשימה הזו הוא ייחודי.

    • RANK: אופציונלי: מספר שלם אפס או גדול יותר שמייצג את העדיפות לבחירת המופע הזה, כאשר הערך הנמוך ביותר הוא העדיפות הגבוהה ביותר. אם לא מציינים ערך, ערך ברירת המחדל הוא 0 (העדיפות הכי גבוהה). אם יש כמה בחירות של מופעים בעבודה, צריך לוודא שכל דרגה בעבודה הזו היא ייחודית.

    • MACHINE_TYPES: רשימה מופרדת בפסיקים של סוגי מכונות, שמופיעים כמחרוזות, לבחירת המכונה של המופע הזה. אפשר לכלול כל סוג מכונה רק בבחירת מופע אחד לכל משימה. לדוגמה, רשימה של שלושה סוגי מכונות יכולה להיראות כך:

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      מחליפים כל אחד מהערכים MACHINE_TYPE_1,‏ MACHINE_TYPE_2 ו-MACHINE_TYPE_3 בסוג מכונה – לדוגמה, e2-micro,‏ e2-small ו-n1-standard-2.

    מידע נוסף זמין גם בדוגמה של משימה.

  2. בזמן שהתכונה הזו נמצאת בגרסת Preview, צריך להשתמש בפקודה gcloud alpha batch jobs submit כדי ליצור את העבודה ולשלוח אותה.

    gcloud alpha batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • JOB_NAME: שם המשימה.
    • LOCATION: המיקום של המשרה.
    • JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של העבודה.

REST

כדי להשתמש ב-Batch API כדי ליצור משימה שמשתמשת בכמה סוגי מכונות, צריך להשתמש בשיטה jobs.create v1alpha בזמן שהתכונה הזו נמצאת בגרסת Preview.

כדי לציין כמה סוגי מכונות לעבודה, כוללים את השדה instanceFlexibilityPolicy ואת שדות המשנה בשדה allocationPolicy בגוף הראשי בקובץ ה-JSON. השדה instanceFlexibilityPolicy תומך בבחירה של מופע אחד או יותר, שלכל אחד מהם יש שם ייחודי, דירוג ייחודי ורשימה של סוגי מכונות.

"allocationPolicy":{
  "instanceFlexibilityPolicy":{
    "instanceSelections":{
      "INSTANCE_SELECTION_NAME":{
        "rank": RANK,
        "machineTypes": [MACHINE_TYPES]
      }
    }
  }
}

מחליפים את מה שכתוב בשדות הבאים:

  • INSTANCE_SELECTION_NAME: שם לבחירת המכונה. אם למשימה יש כמה בחירות של מופעים, צריך לוודא שכל שם במשימה הזו הוא ייחודי.

  • RANK: אופציונלי: מספר שלם אפס או גדול יותר שמייצג את העדיפות של בחירת המופע הזה, כאשר הערך הנמוך ביותר הוא העדיפות הגבוהה ביותר. אם לא מציינים ערך, ערך ברירת המחדל הוא 0 (העדיפות הכי גבוהה). אם למשימה יש כמה בחירות של מופעים, צריך לוודא שכל דרגה במשימה הזו היא ייחודית.

  • MACHINE_TYPES: רשימה מופרדת בפסיקים של סוגי מכונות, שמוגדרים כמחרוזות, לבחירת המכונה הזו. אפשר לכלול כל סוג מכונה רק בבחירת מופע אחד לכל משימה. לדוגמה, רשימה של שלושה סוגי מכונות יכולה להיראות כך:

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    מחליפים כל אחד מהערכים MACHINE_TYPE_1,‏ MACHINE_TYPE_2 ו-MACHINE_TYPE_3 בסוג מכונה – לדוגמה, e2-micro,‏ e2-small ו-n1-standard-2.

מידע נוסף זמין גם בדוגמה של משימה.

דוגמה לקובץ הגדרות של משימה בפורמט JSON

לדוגמה, כשמשתמשים ב-CLI של gcloud או ב-Batch API, אפשר להשתמש בקובץ ההגדרות הבא בפורמט JSON כדי ליצור משימת סקריפט בסיסית עם שני בחירות של מופעים:

  • לבחירת המכונה שנקראת first-choice יש את העדיפות הכי גבוהה ("rank": 0) ושלושה סוגי מכונות (e2-micro,‏ e2-small ו-n1-standard-2).
  • לבחירת המופע שנקרא second-choice יש עדיפות שנייה ("rank": 1) וסוג מכונה אחד (e2-medium).
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy":{
    "instanceFlexibilityPolicy":{
      "instanceSelections":{
        "first-choice":{
          "rank": 0,
          "machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
        },
        "second-choice":{
          "rank": 1,
          "machineTypes": ["e2-medium"]
        }
      }
    }
  }
}

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