סקריפט לטעינה בזמן ההפעלה מבצע משימות במהלך תהליך ההפעלה של מכונה וירטואלית (VM). בדף הזה מוסבר איך להשתמש בסקריפטים להפעלה במכונות וירטואליות.
לפני שמתחילים
כדי להשתמש בפקודות של ממשק שורת הפקודה (CLI) של gdcloud, צריך לוודא שהורדתם, התקנתם והגדרתם את gdcloud CLI.
כל הפקודות למכשיר GDC עם air gap משתמשות ב-CLI gdcloud או kubectl, ודורשות סביבת מערכת הפעלה (OS).
קבלת הנתיב של קובץ kubeconfig
כדי להריץ פקודות בשרת Management API, צריך לוודא שיש לכם את המשאבים הבאים:
מאתרים את שם השרת של Management API או שואלים את מנהל הפלטפורמה מה שם השרת.
נכנסים ויוצרים את קובץ ה-kubeconfig לשרת Management API אם אין לכם כזה.
משתמשים בנתיב כדי להחליף את
MANAGEMENT_API_SERVER{"</var>"}}בהוראות האלה.
שליחת בקשה לתפקידי IAM
כדי להשתמש בסקריפטים להפעלה של מכונה וירטואלית, צריך לפנות לאדמין של IAM בפרויקט ולבקש את התפקידים הבאים בפרויקט:
Project VirtualMachine Admin (
project-vm-admin): יצירה, שינוי, הצגה ומחיקה של מכונות וירטואליות במרחב השמות של הפרויקט.Secret Admin (
secret-admin): get, list, create, update, delete, patch, and watch Kubernetes secrets in the project namespace. משתמשים בתפקיד הזה כדי לציין סודות של סקריפט לטעינה בזמן ההפעלה. לא צריך את התפקיד הזה כדי לציין סקריפטים להפעלה של טקסט פשוט.
כל התפקידים של המכונות הווירטואליות צריכים להיות קשורים למרחב השמות של הפרויקט שבו נמצאת המכונה הווירטואלית. פועלים לפי השלבים כדי לאמת את הגישה.
העברת סקריפט לטעינה בזמן ההפעלה
אפשר להשתמש בסקריפטים של bash או בסקריפטים אחרים כסקריפטים לטעינה בזמן ההפעלה. כדי לעשות זאת, צריך לכלול את התו #!/bin/… בתחילת הסקריפט כדי לציין את מתורגמן הסקריפט.
לדוגמה, כדי להשתמש בסקריפט לטעינה בזמן ההפעלה בשפת Python 3, מוסיפים את #! /usr/bin/python3 לתחילת הסקריפט.
מכשיר Google Distributed Cloud (GDC) עם פער אוויר מריץ סקריפטים לטעינה בזמן ההפעלה בסדר אלפביתי, על סמך השם של כל סקריפט לטעינה בזמן ההפעלה.
בטבלה הבאה מפורט פורמט התסריט שבו צריך להשתמש בהתאם לגודל התסריט:
| גודל התסריט | פורמט התסריט |
|---|---|
| סקריפטים עד 2,048 בייט | טקסט גלוי |
| סקריפטים שגדולים מ-2048 בייט | סוד ב-Kubernetes |
הגדרת סקריפט לטעינה בזמן ההפעלה
כדי להשתמש בסקריפט לטעינה בזמן ההפעלה, צריך להוסיף את השדה startupScripts ל-VM spec
field. בשדה הזה אפשר לציין כמה סקריפטים להפעלה כטקסט רגיל או כסוד של Kubernetes.
בדוגמה הבאה, סקריפטים להפעלה מוגדרים כטקסט גלוי וכסוד של Kubernetes:
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
name: "my-vm"
spec:
…
startupScripts:
- name: hello-world
script: |
#!/bin/bash
echo hello
- name: add-user
scriptSecretRef:
name: add-user
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: add-user
data:
script:
IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg==
כדאי לעיין בשיקולים הבאים:
- סקריפט לטעינה בזמן ההפעלה פועל בכל אתחול.
- לסקריפט לטעינה בזמן ההפעלה יש הרשאות ברירת מחדל של root.
- בסוד של Kubernetes, השם של
scriptSecretRefבמכונה הווירטואליתspecחייב להיות זהה לשדהmetadata.name. - בסוד של Kubernetes, מציינים את התוכן של סקריפט לטעינה בזמן ההפעלה על ידי הוספת מפתח
scriptלשדהdata.
יצירת מכונה וירטואלית חדשה עם סקריפט לטעינה בזמן ההפעלה
ההוראות האלה רלוונטיות לא משנה באיזו תמונה משתמשים כדי ליצור את המכונה הווירטואלית. צריך לבצע את השלבים הבאים:
כדי ליצור סקריפט לטעינה בזמן ההפעלה כסוד של Kubernetes, מריצים את הפקודה:
cat <<EOF >>FILE_NAME STARTUP_SCRIPT_CONTENT EOFkubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n PROJECT generic SECRET_NAME --from-file=script=FILE_NAMErm FILE_NAMEאפשר להיעזר בשלבים ליצירת מכונה וירטואלית שמתוארים בדף יצירת מכונה וירטואלית. בשלב הראשון מוסיפים את הסקריפט או הסקריפטים לטעינה בזמן ההפעלה לשדה
specלפני שמריצים את הפקודה ליצירת מכונה וירטואלית.בדוגמה הזו מוגדר סקריפט לטעינה בזמן ההפעלה עם טקסט ברור וגם עם סוד של Kubernetes:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: … startupScripts: - name: CLEAR_TEXT_SCRIPT_NAME script: | #!/bin/bash CLEAR_TEXT_SCRIPT - name: SECRET_SCRIPT_NAME scriptSecretRef: name: SECRET_NAMEהמשתנים האלה מוגדרים כך:
משתנה הגדרה MANAGEMENT_API_SERVERקובץ kubeconfigשל Management API.PROJECTפרויקט מכשיר GDC עם air gap שבו רוצים ליצור את המכונה הווירטואלית. VM_NAMEשם מכונת ה-VM. FILE_NAMEהשם של הקובץ שבו יישמר סקריפט לטעינה בזמן ההפעלה. STARTUP_SCRIPT_CONTENTהפקודות שיופעלו כחלק מסקריפט לטעינה בזמן ההפעלה CLEAR_TEXT_SCRIPT_NAMEהשם של סקריפט לטעינה בזמן ההפעלה של הטקסט הגלוי. CLEAR_TEXT_SCRIPTהסקריפט של הטקסט הגלוי שאתם מגדירים. SECRET_NAMEהשם של הסוד ב-Kubernetes. SECRET_SCRIPT_NAMEהשם של סקריפט לטעינה בזמן ההפעלה כסוד של Kubernetes. כדי ליצור מכונה וירטואלית, ממשיכים לשלבים הבאים.
הדוגמה הבאה מראה איך ליצור מכונה וירטואלית עם סקריפטים להפעלה שמוסיפים משתמש חדש באמצעות סוד של Kubernetes וטקסט רגיל.
kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -n PROJECT -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: VM_BOOT_DISK_NAME spec: source: image: name: BOOT_DISK_IMAGE_NAME namespace: vm-system size: BOOT_DISK_SIZE --- apiVersion: v1 kind: Secret type: Opaque metadata: name: add-user data: script: IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg== --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: virtualMachineType: MACHINE_TYPE disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true autoDelete: BOOT_DISK_AUTO_DELETE startupScripts: - name: add-user scriptSecretRef: name: add-user - name: add-to-sudoers script: | #!/bin/bash usermod -aG sudo user EOFבדוגמה, המשתנים מוגדרים כך:
משתנה הגדרה MANAGEMENT_API_SERVERקובץ kubeconfigשל Management API.PROJECTפרויקט מכשיר GDC עם air gap שבו רוצים ליצור את המכונה הווירטואלית. VM_NAMEהשם של מכונת ה-VM החדשה. VM_BOOT_DISK_NAMEהשם של דיסק האתחול של המכונה הווירטואלית החדשה. BOOT_DISK_IMAGE_NAMEהשם של האימג' שישמש לדיסק האתחול של מכונת ה-VM החדשה. BOOT_DISK_SIZEגודל דיסק האתחול, למשל 20G.
הערך הזה תמיד צריך להיות גדול מהערךminimumDiskSizeשל תמונת דיסק האתחול או שווה לו.BOOT_DISK_AUTO_DELETEהערך trueאוfalse, שמציין אם דיסק האתחול נמחק אוטומטית כשמוחקים את מופע ה-VM.MACHINE_TYPEסוג המכונה עם קונפיגורציה מוגדרת (predefined) של המכונה הווירטואלית החדשה. כדי לבחור סוג מכונה זמין, מריצים את הפקודה הבאה:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
עדכון מכונה וירטואלית קיימת באמצעות סקריפט לטעינה בזמן ההפעלה
אפשר גם לעדכן מכונה וירטואלית קיימת באמצעות סקריפט לטעינה בזמן ההפעלה. צריך לכבות את המכונה הווירטואלית לפני שמבצעים את העדכון.
פועלים לפי השלבים לעדכון מאפייני מכונה וירטואלית ומעדכנים את השדה spec בסקריפט לטעינה בזמן ההפעלה שרוצים להריץ.
הצגת הפלט של סקריפט לטעינה בזמן ההפעלה
- פועלים לפי השלבים כדי להתחבר למכונה וירטואלית.
מריצים את הפקודה הבאה בתוך מכונת ה-VM האורחת כדי לקבל את היומנים של סקריפט לטעינה בזמן ההפעלה שהפעלתם:
sudo journalctl -u cloud-finalיומני סקריפט לטעינה בזמן ההפעלה מתחילים במילים הבאות:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...