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

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

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

כדי להגדיר מטא-נתונים עם שמירת מצב בנפרד למכונות וירטואליות ב-MIG, צריך להגדיר אותם בהגדרות לכל מכונה ולהחיל את ההגדרה. אפשר להגדיר תצורה לכל מופע בנפרד כשיוצרים מופע או ביחס למופעים מנוהלים קיימים. אחרי שההגדרה לכל מכונה מוחלת, קבוצת ה-MIG שומרת מטא-נתונים עם שמירת מצב בשדה preserved state from configuration (preservedStateFromConfig) של מכונה מנוהלת.

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

מגבלות

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

  • אי אפשר להשתמש בהתאמה אוטומטית לעומס אם ל-MIG יש הגדרה עם שמירת מצב.
  • אם רוצים להשתמש בעדכונים אוטומטיים מדורגים, צריך להגדיר את שיטת ההחלפה ל-RECREATE.
  • ב-MIG אזורי עם שמירת מצב, צריך להשבית את ההפצה מחדש הפרואקטיבית (להגדיר את סוג ההפצה מחדש ל-NONE) כדי למנוע מחיקה של מופעים עם שמירת מצב על ידי הפצה מחדש אוטומטית בין אזורים.
  • אם אתם משתמשים בהגדרה לכל המכונות כדי לשנות מאפיינים של תבנית הגדרות מכונה, אתם לא יכולים לציין את המאפיינים האלה בהגדרה של מכונה ספציפית ובאותו הזמן בהגדרה לכל המכונות של הקבוצה.

  • כשמוחקים באופן סופי מופע (ידנית או על ידי שינוי הגודל), ה-MIG לא שומר את המטא-נתונים של המופע עם שמירת מצב.

הגדרת מטא-נתונים עם שמירת מצב כשיוצרים מופע

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

כשיוצרים ידנית מופע בקבוצת מופעי מכונה מנוהלים (MIG) ומספקים מטא-נתונים עם שמירת מצב, קבוצת ה-MIG מבצעת את המשימות הבאות:

  1. יוצר מופע מנוהל מתבנית המופע באמצעות שם המופע שסופק.
  2. יוצרת הגדרה לכל מכונה עם המטא-נתונים הדינמיים שסופקו ומגדירה את המטא-נתונים האלה במכונה.
  3. מאחסן את המטא-נתונים עם שמירת המצב במצב המשומר מההגדרה (preservedStateFromConfig) של המופע המנוהל המשויך.

gcloud

כדי ליצור מכונה מנוהלת עם שם בהתאמה אישית ולהגדיר מטא-נתונים עם שמירת מצב במכונה הווירטואלית הזו, משתמשים בפקודה gcloud compute instance-groups managed create-instance עם הדגל --stateful-metadata.

gcloud compute instance-groups managed create-instance NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...]

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

  • NAME: השם של קבוצת המופעים המנוהלים (MIG) שבה רוצים ליצור מופע
  • INSTANCE_NAME: השם של המופע שרוצים ליצור
  • KEY ו-VALUE: צמדי מפתח/ערך של מטא-נתונים עם שמירת מצב, שאפשר להגדיר בנפרד למופעים בנוסף למטא-נתונים שמוגדרים בתבנית של הגדרות מכונה
    • ערכי המפתח שאתם מגדירים כאן מקבלים עדיפות על פני ערכי מפתח סותרים מתבנית של הגדרות מכונה

דוגמה

צריך לפרוס אשכול של צמתים, example-cluster, שיכול לפעול באחד משני מצבים: active או standby. מגדירים את המצב בנפרד לכל מכונה וירטואלית באשכול באמצעות מטא-נתונים, למשל: mode:active. אתם גם מגדירים את רמת הפירוט של הרישום ביומן לכל צומת, באמצעות מפתח המטא-נתונים logging שאפשר להגדיר לערך basic או elaborate. האפליקציה בצומת מוגדרת באמצעות ערכים ממטא-נתונים של המכונה.

כדי ליצור צומת פעיל, node-12, עם רישום מפורט ביומן, מריצים את הפקודה הבאה:

gcloud compute instance-groups managed create-instance example-cluster \
  --instance node-12 \
  --stateful-metadata mode=active,logging=elaborate

הפקודה יוצרת מכונה וירטואלית, node-12, ב-MIG‏ example-cluster ומגדירה שני צמדי מפתח/ערך של מטא-נתונים, mode:active ו-logging:elaborate, למופע החדש.

Terraform

כדי ליצור מכונה וירטואלית מנוהלת עם שם בהתאמה אישית ולהגדיר מטא-נתונים עם שמירת מצב במכונה הזו, משתמשים במשאב google_compute_per_instance_config.

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

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "node-12"
  preserved_state {
    metadata = {
      mode    = "active"
      logging = "elaborate"
    }
  }
}

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

REST

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances
{
  "instances": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY" : "VALUE",
          ...
        }
      }
    },
    ...
  ]
}

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

  • PROJECT_ID: מזהה הפרויקט של הבקשה
  • ZONE: האזור שבו נמצאת קבוצת המופעים המנוהלים (MIG) (רלוונטי לקבוצת מופעים מנוהלים אזורית)
    • ל-MIG אזורי, מחליפים את zones/ZONE ב-regions/REGION ומציינים את האזור של ה-MIG.
  • NAME: השם של קבוצת המופעים המנוהלת (MIG) שבה רוצים ליצור מופע
  • INSTANCE_NAME: השם של המופע שרוצים ליצור
  • KEY ו-VALUE: צמדי מפתח/ערך של מטא-נתונים עם שמירת מצב, שאפשר להגדיר בנפרד למופעים בנוסף למטא-נתונים שמוגדרים בתבנית של הגדרות מכונה
    • ערכי המפתח שאתם מגדירים כאן מקבלים עדיפות על פני ערכי מפתח סותרים מתבנית של הגדרות מכונה

דוגמה

צריך לפרוס אשכול של צמתים, example-cluster, שיכול לפעול באחד משני מצבים: active או standby. מגדירים את המצב בנפרד לכל מכונה וירטואלית באשכול באמצעות מטא-נתונים, למשל: mode:active. אתם גם מגדירים את רמת הפירוט של הרישום ביומן לכל צומת, באמצעות מפתח המטא-נתונים logging שאפשר להגדיר לערך basic או elaborate. האפליקציה בצומת מוגדרת באמצעות ערכים ממטא-נתונים של המכונה.

כדי ליצור צומת פעיל, node-12, עם רישום מפורט ביומן, מריצים את השיטה הבאה:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances

{
  "instances": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode":"active",
          "logging":"elaborate"
        }
      }
    }
  ]
}

השיטה יוצרת מכונה וירטואלית, node-12, ב-MIG‏ example-cluster ומגדירה שני צמדים של מפתח/ערך של מטא-נתונים, mode:active ו-logging:elaborate, עבור המופע החדש.

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

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

gcloud

כדי להגדיר מטא-נתונים עם שמירת מצב באופן פרטני למכונה וירטואלית ב-MIG, צריך להגדיר או להסיר מטא-נתונים עם שמירת מצב בהגדרה המשויכת לכל מכונה. אם אתם מחילים את ההגדרה על המופע בו-זמנית (--update-instance), אתם יכולים לבחור אם להמשיך להפעיל את המופע, להפעיל אותו מחדש או ליצור אותו מחדש. אם לא תחיל את ההגדרה (--no-update-instance), השינויים לא ייכנסו לתוקף עד שתשחזר או תעדכן את המופע.

אם לא קיימת הגדרה לכל מכונה עבור מכונה מסוימת, משתמשים בפקודה gcloud compute instance-groups managed instance-configs create עם אחד מהדגלים הבאים:

gcloud compute instance-groups managed instance-configs create NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

אם כבר קיימת הגדרה לכל מכונה עבור מכונה מסוימת, משתמשים בgcloud compute instance-groups managed instance-configs update פקודה עם:

  • הדגל --stateful-metadata להגדרת מטא-נתונים או לשינוי שלהם, או
  • הדגל --remove-stateful-metadata להסרת מטא-נתונים ספציפיים למקרים עם שמירת מצב.
gcloud compute instance-groups managed instance-configs update NAME \
  --instance INSTANCE_NAME \
  [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \
  [--remove-stateful-metadata KEY[,KEY,...]] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

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

  • NAME: השם של קבוצת המופעים המנוהלת.
  • INSTANCE_NAME: השם של המופע שעבורו רוצים להגדיר מטא-נתונים עם שמירת מצב.
  • KEY=VALUE: צמדי מפתח/ערך של מטא-נתונים עם שמירת מצב, שאפשר להגדיר בנפרד עבור המכונה בנוסף למטא-נתונים שהוגדרו בתבנית של הגדרות מכונה. ערכי המפתח שאתם מגדירים כאן מקבלים עדיפות על פני ערכי מפתח סותרים מתבנית המופע.
  • KEY: מפתחות מטא-נתונים ספציפיים למכונה עם שמירת מצב שצריך להסיר מההגדרה של כל מכונה.
    • אם לא מוגדר ערך למפתח בתבנית של הגדרות מכונה, צמד המפתח/ערך יוסר לחלוטין מהמכונה כשהשינוי יוחל.
    • אם מוגדר ערך למפתח בתבנית המופע, הערך מתבנית המופע מוגדר במופע כשהשינוי מוחל.
  • MINIMAL_ACTION: ביצוע לפחות הפעולה שצוינה כשמחילים על המכונה את עדכון ההגדרות האישיות לכל מכונה. אפשר להגדיר MINIMAL_ACTION רק כשמשתמשים בדגל --update-instance. הערך צריך להיות אחד מהערכים הבאים:

    • none: אין פעולה.
    • refresh: החלת עדכונים שאפשר להחיל בלי לעצור את המכונה.
    • restart: עצירה של המכונה והפעלה מחדש שלה.
    • replace: יצירה מחדש של המכונה.

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

דוגמה

יש לך אשכול של צמתים, example-cluster, שיכולים לפעול באחד משני מצבים: active או standby. מגדירים את המצב בנפרד לכל מכונה וירטואלית באשכול באמצעות מטא נתונים, לדוגמה: mode:active. אתם גם מגדירים את רמת הפירוט של הרישום ביומן לכל צומת, באמצעות מפתח מטא-נתונים logging שאפשר להגדיר לו את הערכים basic או elaborate. האפליקציה בכל צומת צורכת את הערכים ממטא-נתוני המופע.

תבנית של הגדרות מכונה מגדירה מטא-נתונים של mode:active ושל logging:basic שישמשו כברירת מחדל לכל המכונות. הגדרתם את logging:elaborate בתצורה לכל מופע של המכונה הווירטואלית node-12 באשכול. עכשיו רוצים להעביר את node-12 למצב המתנה ולהעביר את הרישום ביומן ל-basic במכונה הווירטואלית הזו.

כדי להעביר את מופע node-12 למצב המתנה ולהגדיר את הרישום שלו ביומן לרישום בסיסי, מריצים את הפקודה הבאה:

gcloud compute instance-groups managed instance-configs update example-cluster \
  --instance node-12 \
  --stateful-metadata mode=standby \
  --remove-stateful-metadata logging

הפקודה מבצעת את הפעולות הבאות:

  1. המדיניות מגדירה את המטא-נתונים של mode:standby בהגדרה לכל מכונה שמשויכת למכונה הווירטואלית, node-12, ב-MIG‏ example-cluster.
  2. הפקודה מסירה את המטא-נתונים logging:elaborate מההגדרה לכל מופע של מכונת node-12.
  3. הפקודה מחילה את השינוי בהגדרות של כל מופע על המכונה הווירטואלית node-12:
    • הגדרת מטא-נתונים של mode:standby בהתאם להגדרה.
    • מגדיר מטא-נתונים של logging:basic מתבנית של הגדרות מכונה כי הערך של המפתח logging כבר לא מוגדר בהגדרות של כל מכונה.
  4. כברירת מחדל, השינוי מוחל על המכונה הווירטואלית באופן מיידי כי לא מציינים את האפשרות --no-update-instance.
  5. המכונה הווירטואלית ממשיכה לפעול במהלך העדכון כי הדגל --instance-update-minimal-action מושמט, וברירת המחדל היא לבחור את הפעולה הכי פחות משבשת לעדכון, ובמקרה הזה: refresh.

REST

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

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint": "FINGERPRINT"
    },
    ...
  ]
}

אם כבר קיימות הגדרות לכל מופע עבור המופעים הנתונים, משתמשים בשיטה instanceGroupManagers.patchPerInstanceConfigs.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint": "FINGERPRINT"
    },
    ...
  ]
}

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

  • PROJECT_ID: מזהה הפרויקט של הבקשה.
  • ZONE: האזור שבו נמצאת קבוצת המופעים המנוהלים (MIG) (רלוונטי לקבוצת מופעים מנוהלים אזורית).
    • ל-MIG אזורי, מחליפים את zones/ZONE ב-regions/REGION ומציינים את האזור של ה-MIG.
  • NAME: השם של ה-MIG.
  • INSTANCE_NAME: השם של מכונת ה-VM שעבורה רוצים להגדיר מטא-נתונים עם שמירת מצב.
  • KEY ו-VALUE: צמדי מפתח/ערך של מטא-נתונים עם שמירת מצב, שאפשר להגדיר בנפרד למופעים בנוסף למטא-נתונים שהוגדרו בתבנית של הגדרות מכונה.
    • ערכים של מטא-נתונים עם שמירת מצב שהוגדרו למפתחות שכבר קיימים בתבנית של הגדרות המכונה, מחליפים את הערכים מהתבנית של הגדרות המכונה.
    • רשומות אחרות של מטא-נתונים מתבנית של הגדרות מכונה לא מושפעות ונשארות זמינות.
    • הזנת הערך null מסירה את המפתח מההגדרה לכל מופע.
  • FINGERPRINT: (אופציונלי). טביעת האצבע של ההגדרה הנתונה, אם היא כבר קיימת. משמש לנעילה אופטימית.

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

דוגמה

יש לך אשכול של צמתים, example-cluster, שיכולים לפעול באחד משני מצבים: active או standby. מגדירים את המצב בנפרד לכל מכונה וירטואלית באשכול באמצעות מטא נתונים, לדוגמה: mode:active. אתם גם מגדירים את רמת הפירוט של הרישום ביומן לכל צומת, באמצעות מפתח מטא-נתונים logging שאפשר להגדיר לו את הערכים basic או elaborate. האפליקציה בכל צומת צורכת את הערכים ממטא-נתוני המופע.

תבנית של הגדרות מכונה מגדירה מטא-נתונים של mode:active ושל logging:basic שישמשו כברירת מחדל לכל המכונות. הגדרתם את logging:elaborate בתצורה לכל מופע של המכונה הווירטואלית node-12 באשכול. עכשיו רוצים להעביר את node-12 למצב המתנה ולהעביר את הרישום ביומן ל-basic עבור המופע הזה.

כדי להעביר את המכונה הווירטואלית node-12 למצב המתנה ולשנות את הרישום שלה לרישום בסיסי, צריך להחיל תיקון על ההגדרה המשויכת לכל מופע באמצעות השיטה patchPerInstanceConfigs:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode": "standby",
          "logging": null
        }
      }
    }
  ]
}

השיטה מבצעת את הפעולות הבאות:

  1. המדיניות מגדירה מטא-נתונים של mode:standby בהגדרה לכל מכונה שמשויכת למכונה הווירטואלית, node-12, ב-example-cluster MIG.
  2. הסרת המטא-נתונים logging:elaborate מההגדרה לכל מופע כי הערך שסופק הוא null.

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

כדי להחיל את עדכון ההגדרות של המכונה הווירטואלית node-12, קוראים לשיטה instanceGroupManagers.applyUpdatesToInstances של המכונה:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-12"],
  "minimalAction": "NONE"
}

השיטה מחילה את ההגדרה המעודכנת לכל מופע על המכונה הווירטואלית node-12:

  1. המדיניות מגדירה את המטא-נתונים של mode:standby בהתאם להגדרה של כל מכונה.
  2. הגדרת מטא-נתונים של logging:basic מתבצעת מתבנית של הגדרות מכונה כי הערך של המפתח logging כבר לא מוגדר לפי ההגדרה לכל מכונה.
  3. המכונה הווירטואלית ממשיכה לפעול במהלך העדכון כי הערך של minimalAction מוגדר ל-NONE, מה שמאפשר ל-MIG להשתמש בפעולה הכי פחות משבשת שנדרשת לעדכון. עדכון של מטא-נתונים של מופע דורש את הפעולה REFRESH, שלא משבשת את הפעולה של מופע פעיל.

משוב

נשמח לשמוע על תרחישי השימוש שלכם, על האתגרים שנתקלתם בהם ועל המשוב שלכם לגבי קבוצות של מכונות וירטואליות עם שמירת מצב. אפשר לשלוח משוב לצוות שלנו בכתובת mig-discuss@google.com.

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