יצירת תמונות מכונה

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

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

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

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

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:

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

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud

    gcloud

    1. התקינו את ה-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 .

מגבלות

  • אפשר ליצור קובץ אימג' של מכונה ממופע ספציפי עד 6 פעמים בכל 60 דקות.
  • כדי להגן על תמונת מכונה, אפשר להשתמש ב-Cloud Key Management Service ‏ (Cloud KMS) או במפתח הצפנה באספקת הלקוח (CSEK). מפתח ההצפנה מגן על התוכן של הדיסקים. עם זאת, מטא-נתונים לא מוגנים.
  • אם משתמשים במפתח CSEK כדי להגן על תמונת המכונה, עותק מלא של כל נתוני הדיסק מאוחסן במהלך יצירת תמונת המכונה. בכל שאר התרחישים, הנתונים בדיסק מאוחסנים בעותקים דיפרנציאליים.
  • אי אפשר ליצור קובצי אימג' של מכונות ממכונות מקוריות של Compute Engine במקרים הבאים:

    • יש להם דיסקים מצורפים עם קיבולת משולבת שגדולה מ-200TiB.
    • אין דיסקים מצורפים.
    • יש להם נפחי Hyperdisk מצורפים.
    • צריך להשתמש בסוג המכונה Z3, למעט z3-highmem-192-highlssd-metal.
    • משתמשים בסוג מכונה C3D,‏ H3 או A3.

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

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

מאפייני מופע ודיסק שלא נתמכים בתמונת מכונה

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

  • disks.architecture
  • disks.description
  • disks.labels
  • disks.locked
  • disks.multiWriter
  • disks.onUpdateAction
  • disks.provisionedIops
  • disks.shieldedInstanceInitialState
  • disks.sourceImage
  • disks.sourceImageEncryptionKey
  • disks.sourceInstantSnapshot
  • disks.sourceSnapshot
  • disks.sourceSnapshotEncryptionKey
  • privateIpv6GoogleAccess
  • resourceManagerTags
  • resourcePolicies
  • secure_tag
  • shieldedInstanceConfig

יצירת קובץ אימג' של מכונה ממופע

כברירת מחדל, תמונת מכונה כוללת את דיסק האתחול ואת כל הדיסקים האחרים שמצורפים למכונת המקור של Compute Engine. אפשר גם לציין אילו דיסקים שאינם דיסקי אתחול לכלול או להחריג, אבל אי אפשר להחריג את דיסק האתחול.

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

אפשר ליצור תמונות מכונה באמצעות Google Cloud המסוף, Google Cloud CLI או REST.

כדי ליצור תמונת מכונה, צריך את הפרטים הבאים:

  • שם לתמונת המכונה שרוצים ליצור.
  • השם של מופע המקור.
  • התחום (zone) שבו נמצא מופע המקור.
  • תיאור אופציונלי.
  • storageLocation אופציונלי. אם לא מציינים מיקום, מיקום האחסון שמוגדר כברירת מחדל הוא מיקום Cloud Storage מרובה אזורים של מופע המקור.
  • מפתח הצפנה אופציונלי. אפשר לבחור בין מפתח Google-owned and Google-managed encryption key, מפתח Cloud Key Management Service ‏ (Cloud KMS) או מפתח הצפנה שסופק על ידי הלקוח (CSEK). אם לא מציינים מפתח הצפנה, תמונות המכונה מוצפנות באמצעות Google-owned and Google-managed encryption key.
  • אם רוצים להשתמש בתמונת מכונה כדי לשכפל מופע וליצור ממנו תמונת מצב, צריך להסיר את פרטי מערכת ההפעלה והאפליקציה שייחודיים למופע לפני שיוצרים את תמונת המכונה ממופע. לדוגמה, במקרים של מכונות וירטואליות של Windows, משתמשים בפקודה GCESysprep כדי להכין את המערכת לשכפול.

המסוף

  1. נכנסים לדף Machine images במסוף Google Cloud .

    מעבר אל Machine images

  2. לוחצים על Create Machine image.

  3. מציינים שם לתמונת המכונה.

  4. אופציונלי: מספקים תיאור.

  5. בוחרים את מכונת המקור הווירטואלית.

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

  7. אופציונלי: בוחרים שיטת הצפנה.

  8. לוחצים על יצירה.

gcloud

משתמשים בפקודה gcloud compute machine-images create כדי ליצור קובץ אימג' של מכונה מתוך מכונה.

gcloud compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME

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

  • MACHINE_IMAGE_NAME: השם של תמונת המכונה שרוצים ליצור.
  • SOURCE_INSTANCE_NAME: השם של מופע המקור שממנו רוצים ליצור את התמונה.

דוגמה

לדוגמה, אפשר להשתמש בפקודה gcloud הבאה כדי ליצור תמונת מכונה בשם my-machine-image ממופע מקור בשם my-instance:

gcloud compute machine-images create my-machine-image  \
    --source-instance=my-instance

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

Created [https://www.googleapis.com/compute/v1/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

REST

ב-API, יוצרים בקשת POST ל-method‏ machineimages.insert. בגוף הבקשה, כוללים את הבקשה הבאה POST:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL"
}

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

  • PROJECT_ID: מזהה הפרויקט.
  • MACHINE_IMAGE_NAME: השם של תמונת המכונה שרוצים ליצור.
  • SOURCE_INSTANCE_URL: כתובת URL מלאה או חלקית של מופע המקור שרוצים להשתמש בו כדי ליצור את תמונת המכונה. לדוגמה, אם יש לכם מופע מקור בשם my-instance בפרויקט בשם myProject. כתובות ה-URL הבאות תקינות:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/instances/my-instance
    • projects/myProject/global/instances/my-instance
    • global/instances/my-instance

יצירת קובץ אימג' של מכונה וצירוף דיסקים ספציפיים (גרסת Preview)

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

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

  • כוללים דיסקים ספציפיים שאינם דיסקי אתחול: אתם יכולים ליצור קובץ אימג' של מכונה שמגבה רק את דיסק האתחול ורשימה ספציפית של דיסקים שאינם דיסקי אתחול שאתם מספקים.

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

שיטות מומלצות לשימוש במופעי Linux

במקרים של מופעי Linux, מומלץ לפעול לפי השיטות המומלצות הבאות:

  • כשיוצרים תמונת מכונה שמוציאה מכלל אפשרות דיסקים ספציפיים שאינם דיסקים לאתחול, או כשמשמיטים אותם באמצעות רשימת הכללה, צריך לוודא שבקובץ /etc/fstab במופעי Compute Engine של מקור Linux נעשה שימוש באפשרות nofail עבור הדיסקים האלה. כך נמנע מצב שבו המכונה המשוחזרת של Compute Engine לא תצליח לבצע אתחול אם חסר דיסק צפוי.

  • במהלך תהליך האתחול של מכונת Compute Engine ששוחזרה מקובץ אימג' של מכונה, מערכת ההפעלה מנסה לטעון את כל הדיסקים שמופיעים ב-/etc/fstab. אם דיסק צפוי חסר ולא מציינים את האפשרות nofail, תהליך האתחול נעצר ואי אפשר לאתחל את המופע. כדי לפתור בעיות שקשורות לכשלים בהפעלה, אפשר לעיין במאמר בנושא פתרונות עקיפים לבעיות בהפעלה שנגרמות בגלל החרגה של דיסקים ספציפיים.

הכללה של דיסקים ספציפיים בלבד

כדי ליצור תמונת מכונה רק מדיסקים ספציפיים, פועלים לפי ההוראות הבאות. תמיד צריך לכלול את דיסק האתחול. אי אפשר ליצור תמונת מכונה רק מדיסקים ספציפיים באמצעות מסוף Google Cloud . צריך להשתמש ב-Google Cloud CLI או ב-REST.

Google Cloud CLI

משתמשים בפקודה gcloud beta compute machine-images create כדי ליצור קובץ אימג' של מכונה רק מדיסקים ספציפיים.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME \
    --source-instance-zone=ZONE \
    --include-disks=BOOT_DISK,DISK_NAME_1,DISK_NAME_2

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

  • MACHINE_IMAGE_NAME: השם של תמונת המכונה שרוצים ליצור.
  • SOURCE_INSTANCE_NAME: השם של מופע המקור שממנו רוצים ליצור את התמונה.
  • ZONE: האזור שבו נמצאת מכונת המקור.
  • BOOT_DISK, DISK_NAME_1,DISK_NAME_2: רשימה מופרדת בפסיקים של דיסק האתחול והדיסקים שאינם דיסקים לאתחול שמצורפים למופע המקור שרוצים לכלול בתמונת המכונה.

לדוגמה, אפשר להשתמש בפקודה gcloud הבאה כדי ליצור תמונת מכונה בשם my-gmi-include ממופע מקור בשם my-instance שנמצא ב-us-central1-a, כולל רק data-disk-1 ו-data-disk-2:

gcloud beta compute machine-images create my-gmi-include \
    --source-instance=my-instance \
    --source-instance-zone=us-central1-a \
    --include-disks=boot-disk,data-disk-1,data-disk-2

REST

ב-API, יוצרים בקשת POST ל-method‏ machineimages.insert. בגוף הבקשה, כוללים את הבקשה הבאה POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL",
  "params": {
    "includedDisks": ["BOOT_DISK", "DISK_NAME_1", "DISK_NAME_2"]
  }
}

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

  • PROJECT_ID: מזהה הפרויקט שמכיל את תמונת המכונה, לדוגמה, my-project.
  • MACHINE_IMAGE_NAME: השם של תמונת המכונה שרוצים ליצור.
  • SOURCE_INSTANCE_URL: כתובת URL מלאה או חלקית של מופע המקור שרוצים להשתמש בו כדי ליצור את תמונת המכונה.
  • BOOT_DISK, DISK_NAME_1, DISK_NAME_2: רשימה של דיסק האתחול ודיסקים שאינם דיסקי אתחול שמצורפים למופע המקור שרוצים לכלול בתמונת המכונה.

יצירת תמונת מכונה והחרגת דיסקים ספציפיים (גרסת Preview)

כדי ליצור תמונת מכונה ולהחריג דיסקים מסוימים מהגיבוי, פועלים לפי ההוראות הבאות. אי אפשר להחריג את דיסק האתחול. אי אפשר ליצור תמונת מכונה ולהחריג דיסקים ספציפיים באמצעות מסוף Google Cloud . אפשר להשתמש ב-Google Cloud CLI או ב-REST.

gcloud

משתמשים בפקודה gcloud beta compute machine-images create כדי ליצור תמונת מכונה ולהחריג דיסקים ספציפיים.

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance=SOURCE_INSTANCE_NAME \
    --source-instance-zone=ZONE \
    --exclude-disks=DISK_NAME_1,DISK_NAME_2

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

  • MACHINE_IMAGE_NAME: השם של תמונת המכונה שרוצים ליצור.
  • SOURCE_INSTANCE_NAME: השם של מופע המקור שממנו רוצים ליצור את התמונה.
  • ZONE: האזור שבו נמצאת מכונת המקור.
  • DISK_NAME_1,DISK_NAME_2: רשימה מופרדת בפסיקים של הדיסקים שלא משמשים להפעלה שמצורפים למופע המקור שרוצים להחריג מתמונת המכונה.

דוגמה

לדוגמה, אפשר להשתמש בפקודה gcloud הבאה כדי ליצור תמונת מכונה בשם my-gmi-exclude ממופע מקור בשם my-instance שנמצא ב-us-central1-a, לא כולל temp-disk-1 ו-scratch-disk:

 gcloud beta compute machine-images create my-gmi-exclude \
    --source-instance=my-instance \
    --source-instance-zone=us-central1-a \
    --exclude-disks=temp-disk-1,scratch-disk

REST

ב-API, יוצרים בקשת POST ל-method‏ machineimages.insert. בגוף הבקשה, כוללים את הבקשה הבאה POST:

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL",
  "params": {
    "excludedDisks": ["DISK_NAME_1", "DISK_NAME_2"]
  }
}

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

  • PROJECT_ID: מזהה הפרויקט שמכיל את תמונת המכונה.
  • MACHINE_IMAGE_NAME: השם של תמונת המכונה שרוצים ליצור.
  • SOURCE_INSTANCE_URL: כתובת URL מלאה או חלקית של מופע המקור שרוצים להשתמש בו כדי ליצור את תמונת המכונה.
  • DISK_NAME_1, DISK_NAME_2: רשימה של הדיסקים שאינם דיסקים לאתחול שמצורפים למופע המקור שרוצים להחריג מתמונת המכונה.

פתרונות עקיפים לבעיות בהפעלה שנגרמות מהחרגה של דיסקים ספציפיים

אם יוצרים מכונה מקובץ אימג' של מכונה שבה דיסק מוחרג גורם לכשל באתחול, אפשר לשחזר את המכונה באמצעות אחד מהפתרונות הבאים:

  • מתחברים למסוף הטורי: מפעילים את המסוף הטורי האינטראקטיבי ומתחברים אליו של מכונת Compute Engine שלא ניתן לאתחל. כדי לפתור את הבעיה, צריך להיכנס לחשבון ולערוך את קובץ /etc/fstab ישירות כדי להסיר את הערך החסר של הדיסק או להוסיף את האפשרות nofail.

  • החלפת דיסק: אם מכונה של Compute Engine לא מצליחה לבצע אתחול כי דיסק מסוים לא נכלל בתמונת המכונה אבל עדיין מופיע ב-/etc/fstab בלי האפשרות nofail, אפשר להשתמש בהוראות הבאות כדי לתקן את ההגדרה באמצעות Google Cloud CLI.

    1. מפסיקים את המכונה של Compute Engine שלא ניתן לאתחל באמצעות הפקודה gcloud compute instances stop:

      gcloud compute instances stop UNBOOTABLE_INSTANCE_NAME \
       --zone=ZONE
      

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

      • UNBOOTABLE_INSTANCE_NAME: השם של מכונת Compute Engine שלא ניתן לאתחל.
      • ZONE: האזור שבו נמצאות המכונות של Compute Engine.
    2. מנתקים את דיסק האתחול באמצעות הפקודה gcloud compute instances detach-disk:

      gcloud compute instances detach-disk UNBOOTABLE_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

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

      • UNBOOTABLE_INSTANCE_NAME: השם של מכונת Compute Engine שלא ניתן לאתחל.
      • BOOT_DISK_NAME: השם של דיסק האתחול שמצורף למכונת Compute Engine שלא ניתן לאתחל.
      • ZONE: האזור שבו נמצאות המכונות של Compute Engine.
    3. מצרפים את הדיסק כדיסק משני למכונה אחרת של Compute Engine שפועלת באמצעות הפקודה gcloud compute instances attach-disk:

      gcloud compute instances attach-disk SECONDARY_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

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

      • SECONDARY_INSTANCE_NAME: השם של מכונת Compute Engine המשנית הפעילה שמשמשת לתיקון הדיסק.
      • BOOT_DISK_NAME: השם של דיסק האתחול שמצורף למכונת Compute Engine שלא ניתן לאתחל.
      • ZONE: האזור שבו נמצאות המכונות של Compute Engine.
    4. מבצעים את הפעולות הבאות כדי לטעון את הדיסק ולערוך את הקובץ /etc/fstab שלו כדי לתקן את הרשומה הבעייתית:

      1. מתחברים למופע המשני של Compute Engine באמצעות SSH:

        gcloud compute ssh SECONDARY_INSTANCE_NAME \
        --zone=ZONE
        

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

        • SECONDARY_INSTANCE_NAME: השם של מכונת Compute Engine המשנית הפעילה שמשמשת לתיקון הדיסק.
        • ZONE: האזור שבו נמצאות המכונות של Compute Engine.
      2. מזהים את הדיסק המצורף, בדרך כלל /dev/sdb או משהו דומה, באמצעות lsblk:

        lsblk
        
      3. יוצרים נקודת טעינה זמנית:

        sudo mkdir /mnt/repair
        
      4. טוענים את מחיצת הבסיס:

        sudo mount /dev/DEVICE_PARTITION /mnt/repair
        

        מחליפים את DEVICE_PARTITION בשם המכשיר ובמספר המחיצה של הדיסק המשני המצורף במכונת Compute Engine המשנית (לדוגמה, sdb1).

      5. פותחים את הקובץ fstab:

        sudo nano /mnt/repair/etc/fstab
        
      6. אפשר להוסיף את האפשרות nofail לרשומה של הדיסק החסר או להוסיף # בתחילת השורה כדי להפוך אותה להערה.

      7. שמירה ויציאה.

      8. מנתקים את הדיסק:

        sudo umount /mnt/repair
        
    5. מנתקים את הדיסק ממכונת Compute Engine המשנית באמצעות הפקודה gcloud compute instances detach-disk:

      gcloud compute instances detach-disk SECONDARY_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --zone=ZONE
      

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

      • SECONDARY_INSTANCE_NAME: שם המכונה המשנית הפעילה של Compute Engine שמשמשת לתיקון הדיסק.
      • BOOT_DISK_NAME: השם של דיסק האתחול שמצורף למכונת Compute Engine שלא ניתן לאתחל.
      • ZONE: האזור שבו נמצאות המכונות של Compute Engine.
    6. מצרפים מחדש את הדיסק כדיסק האתחול למכונת Compute Engine המקורית באמצעות הפקודה gcloud compute instances attach-disk:

      gcloud compute instances attach-disk UNBOOTABLE_INSTANCE_NAME \
       --disk=BOOT_DISK_NAME \
       --boot \
       --zone=ZONE
      

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

      • UNBOOTABLE_INSTANCE_NAME: השם של מכונת Compute Engine שלא ניתן לאתחל.
      • BOOT_DISK_NAME: השם של דיסק האתחול שמצורף למכונת Compute Engine שלא ניתן לאתחל.
      • ZONE: האזור שבו נמצאות המכונות של Compute Engine.
    7. מפעילים את המכונה של Compute Engine שתוקנה:

      gcloud compute instances start UNBOOTABLE_INSTANCE_NAME \
       --zone=ZONE
      

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

      • UNBOOTABLE_INSTANCE_NAME: השם של מכונת Compute Engine שלא ניתן לאתחל.
      • ZONE: האזור שבו נמצאות המכונות של Compute Engine.

מה השלב הבא?