שימוש בסקריפט לטעינה בזמן ההפעלה במכונות וירטואליות של Windows

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

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

המסמך הזה מיועד למפתחים בקבוצות של אדמינים של פלטפורמות או של מפעילי אפליקציות, שרוצים להשתמש בסקריפטים לטעינה בזמן ההפעלה של מכונות וירטואליות בסביבת Distributed Cloud. מידע נוסף מופיע במאמר קהלים למסמכי תיעוד של GDC עם air gap.

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

כדי להשתמש בפקודות של ממשק שורת הפקודה (CLI) של gdcloud, צריך לוודא שהורדתם, התקנתם והגדרתם את ה-CLI של gdcloud. כל הפקודות של Distributed Cloud משתמשות ב-CLI של gdcloud או kubectl, ודורשות סביבה של מערכת הפעלה (OS).

קבלת נתיב הקובץ של kubeconfig

כדי להריץ פקודות בשרת Management API, צריך לוודא שיש לכם את המשאבים הבאים:

  1. אם אין לכם קובץ kubeconfig לשרת Management API, נכנסים לחשבון ויוצרים אותו.

  2. בהוראות הבאות, מחליפים את MANAGEMENT_API_SERVER בנתיב לקובץ kubeconfig של שרת Management API.

בקשת תפקידים ב-IAM

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

  • אדמין של פרויקט מכונות וירטואליות (project-vm-admin): יצירה, שינוי, הצגה ומחיקה של מכונות וירטואליות במרחב השמות של הפרויקט.

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

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

פורמט השמות של סקריפטים לטעינה בזמן ההפעלה של Windows

סקריפטים לטעינה בזמן ההפעלה של מכונות Windows VM חייבים להיות בפורמט ספציפי של מתן שמות, שכולל את שם הסקריפט וסיומת הקובץ, כשהם מופרדים במקפים. לדוגמה, create-directory-ps1, כאשר create-directory הוא שם הסקריפט ו-ps1 הוא סיומת הקובץ. פורמטים שגויים כוללים שימוש בנקודות במקום במקפים והשמטת סיומת הקובץ, כמו create-directory.ps1 ו-create-directory.

אלה סיומות הקבצים שצריך להשתמש בהן בסקריפטים לטעינה בזמן ההפעלה של Windows:

  • ‫ps1: מכיל פקודות PowerShell.
  • ‫cmd: מכיל פקודות אצווה למפרש של שורת הפקודה.
  • ‫bat: מכיל פקודות באצ'.

הפעלת סקריפטים לטעינה בזמן ההפעלה של Windows לפי הסדר

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

סקריפט של Windows סדר ההרצה
סקריפט Powershell קודם כול, בכל הפעלה.
סקריפט אצווה בכל הפעלה של המכשיר.
סקריפט פקודה שלישית בכל הפעלה.

אם לשני סקריפטים לטעינה בזמן ההפעלה יש את אותה סיומת קובץ, הסקריפטים מופעלים לפי סיומת הקובץ והשם בסדר אלפביתי. לדוגמה, אם השמות של הסקריפטים לטעינה בזמן ההפעלה הם alpha-script-ps1 ו-beta-script-ps1, הסקריפט alpha-script-ps1 יופעל לפני beta-script-ps1.

בדוגמה הבאה של מפרט VM מוצגים הסדר והמבנה של הסקריפט לטעינה בזמן ההפעלה של Windows בשדה startupScripts:

# …
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: hello-world-bat
    script: |-
      ECHO "Hello World!"
  - name: list-directories-cmd
    script: |-
      dir C:\Windows  > files.txt
# …

העברת סקריפט לטעינה בזמן ההפעלה

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

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

גודל הסקריפט פורמט הסקריפט
סקריפטים בגודל של עד 2,048 בייטים מחיקת הטקסט
סקריפטים שגדולים מ-2,048 בייטים סוד ב-Kubernetes

הגדרת סקריפט לטעינה בזמן ההפעלה

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

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

apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
  name: "vm-test"
spec:
  # …
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: list-directories-cmd
    scriptSecretRef:
      name: list-directories
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: list-directories
data:
  script:
    ZGlyIEM6XFdpbmRvd3MgID4gZmlsZXMudHh0Cg==

כדאי להביא בחשבון את השיקולים הבאים:

  • הסקריפט לטעינה בזמן ההפעלה פועל בכל הפעלה.
  • לסקריפט לטעינה בזמן ההפעלה יש הרשאות בסיסיות כברירת מחדל.
  • בסוד של Kubernetes, השם של scriptSecretRef במכונה הווירטואלית spec צריך להיות זהה לשדה metadata.name.
  • בסוד של Kubernetes, מציינים את תוכן הסקריפט לטעינה בזמן ההפעלה על ידי הוספת מפתח script לשדה data.

יצירת מכונה וירטואלית חדשה עם סקריפט לטעינה בזמן ההפעלה של Windows

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