יש שתי דרכים ליצור ולהגדיר מכונות של Compute Engine שמופעל בהן מערכת הפעלה שמותאמת לקונטיינרים מבית Google.
בתרחישים פשוטים שבהם רוצים להריץ קונטיינר יחיד במכונה וירטואלית או בכל מכונה וירטואלית בקבוצת מופעי מכונה מנוהלים, אפשר לציין קובץ אימג' של קונטיינר ופרמטרים אופציונליים של הגדרה כשמגדירים את המכונה או את תבנית של הגדרות מכונה. Compute Engine יוצר את המכונה עם הגרסה העדכנית של מערכת הפעלה שמותאמת לקונטיינרים ומפעיל את הקונטיינר שצוין כשהמכונה הווירטואלית מופעלת.
בתרחישים מתקדמים שבהם אפשר לפרוס כמה קונטיינרים ולהגדיר אפשרויות של Docker באמצעות cloud-init, אפשר ליצור מכונת Compute Engine עם תמונה של מערכת הפעלה שמותאמת לקונטיינרים לפי בחירתכם, ואז להמשיך להגדיר את הקונטיינר לפי הצורך.
יצירת מופע פשוט
אפשר להשתמש בשיטה הזו כדי לפרוס קונטיינר יחיד במכונה וירטואלית באמצעות הגרסה העדכנית של מערכת הפעלה שמותאמת לקונטיינרים. אפשר לבצע את המשימה הזו באמצעות Cloud de Confiance המסוף או ה-CLI של gcloud.
המסוף
נכנסים לדף VM instances.
לוחצים על Create instance.
מציינים שם למכונה.
בקטע Container (קונטיינר), מסמנים את התיבה Deploy a container image to this VM instance (פריסת קובץ אימג' של קונטיינר במכונה הווירטואלית הזו).
מציינים את קובץ אימג' של קונטיינר שבו רוצים להשתמש.
- אפשר לציין תמונה מ-Container Registry או מ-Artifact Registry.
לדוגמה:
-
gcr.io/cloud-marketplace/google/nginx1:1.15בוחר קובץ אימג' של קונטיינר NGINX 1.15 מ-Google Cloud Marketplace. us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0בוחר תמונה לדוגמה מ-Artifact Registry.hello-app
-
- אם משתמשים בקובץ אימג' של קונטיינר מ-Docker Hub, צריך תמיד לציין את השם המלא של קובץ האימג' של Docker. לדוגמה, כדי לפרוס קובץ אימג' של קונטיינר Apache, מציינים את שם קובץ האימג' הבא:
docker.io/httpd:2.4.
- אפשר לציין תמונה מ-Container Registry או מ-Artifact Registry.
לדוגמה:
אפשר גם ללחוץ על אפשרויות מתקדמות של מאגרי תגים. מידע נוסף זמין במאמר הגדרת אפשרויות להפעלת הקונטיינר.
לוחצים על Create כדי ליצור את המכונה, להפעיל אותה ולהפעיל את הקונטיינר.
gcloud
כדי ליצור מכונת VM בסיסית, מריצים את הפקודה הבאה:
gcloud compute instances create-with-container instance-name \
--container-image image-name
מחליפים את מה שכתוב בשדות הבאים:
- instance-name: השם של המופע החדש.
- image-name: השם של קובץ האימג' בקונטיינר.
לדוגמה, הפקודה הבאה יוצרת מכונת VM חדשה בשם nginx-vm, שתפעיל ותריץ את קובץ האימג' של הקונטיינר gcr.io/cloud-marketplace/google/nginx1:1.15:
gcloud compute instances create-with-container nginx-vm \
--container-image gcr.io/cloud-marketplace/google/nginx1:1.15
באופן דומה, אפשר ליצור מכונת VM חדשה בשם hello-app שתפעיל קונטיינר לדוגמה ב-Artifact Registry:
gcloud compute instances create-with-container hello-app \
--container-image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
כשמשתמשים בקובץ אימג' של קונטיינר מ-Docker Hub, צריך תמיד לציין שם מלא של קובץ אימג' של Docker. לדוגמה, כדי לפרוס קובץ אימג' של קונטיינר Apache, מציינים את שם האימג' הבא:
docker.io/httpd:2.4
כדי להריץ קונטיינר יחיד בכל מכונה וירטואלית בקבוצת מופעי מכונה מנוהלים, צריך לציין את שם קובץ אימג' של קונטיינר כשמגדירים את תבנית של הגדרות מכונה. מידע נוסף זמין במאמר בנושא יצירת תבנית של הגדרות מכונה עם קובץ אימג' של קונטיינר.
יצירת מכונה לתרחישים מתקדמים
משתמשים בשיטה הזו כדי לבחור קובץ אימג' ספציפי של מערכת הפעלה שמותאמת לקונטיינרים, כדי לפרוס כמה קונטיינרים וכדי להשתמש ב-cloud-init להגדרה מתקדמת.
הצגת התמונות הזמינות
תמונות של מערכת הפעלה שמותאמת לקונטיינרים זמינות ב Cloud de Confiance רשימת התמונות במסוף עם הקידומת cos.
הם מתארחים בפרויקט cos-cloud. אפשר גם לראות את כל הגרסאות שזמינות כרגע בשורת הפקודה על ידי הרצת הפקודה הבאה:
gcloud compute images list --project cos-cloud --no-standard-images
הפלט אמור להיראות כך:
NAME PROJECT FAMILY DEPRECATED STATUS
cos-69-10895-385-0 cos-cloud cos-69-lts READY
cos-73-11647-534-0 cos-cloud cos-73-lts READY
cos-77-12371-251-0 cos-cloud cos-77-lts READY
cos-81-12871-103-0 cos-cloud cos-81-lts READY
cos-beta-81-12871-44-0 cos-cloud cos-beta READY
cos-dev-84-13078-0-0 cos-cloud cos-dev READY
cos-stable-81-12871-103-0 cos-cloud cos-stable READY
יצירת מופע
אפשר ליצור מכונה וירטואלית באמצעות Cloud de Confiance המסוף, ה-CLI של gcloud או ה-API.
המסוף
כדי להריץ מכונה של Compute Engine עם מערכת הפעלה שמותאמת לקונטיינרים ועם Docker מותקן:
פותחים את הדף ליצירת מכונה של Compute Engine במסוף Cloud de Confiance .
מציינים שם למכונה.
בקטע Containers (קונטיינרים), מבטלים את הסימון בתיבת הסימון Deploy a container image to this VM instance (פריסת קובץ אימג' של קונטיינר במכונה הווירטואלית הזו). האפשרות הזו שימושית אם רוצים לפרוס מאגר תגים יחיד במכונה הווירטואלית.
בקטע דיסק אתחול, בוחרים תמונה של מערכת הפעלה שמותאמת לקונטיינרים.
לוחצים על Create כדי ליצור את המכונה ולהפעיל אותה.
gcloud
מעיינים בתמונות הזמינות ואז משתמשים בפקודה הבאה כדי ליצור מופע של תמונת צומת cos:
gcloud compute instances create instance-name \
--image image-name \
--image-project cos-cloud \
--zone compute-zone \
--machine-type machine-type-name
מחליפים את מה שכתוב בשדות הבאים:
- instance-name: השם של מופע ה-VM.
- image-name: השם של תמונת מערכת ההפעלה שמותאמת לקונטיינרים של המופע, שמתקבל מרשימת התמונות הזמינות.
בדוגמה הקודמת השתמשנו ב-
cos-beta-81-12871-44-0. - compute-zone: אזור המחשוב של המכונה.
- machine-type-name: סוג המכונה שבה רוצים להשתמש עבור המכונה החדשה.
סוג ברירת המחדל הוא
n1-standard-1.
לדוגמה, הפקודה הבאה יוצרת מופע בשם cos-test באמצעות התמונה cos-beta-67-10575-13-0:
gcloud compute instances create cos-test \
--image cos-beta-67-10575-13-0 \
--image-project cos-cloud \
--zone us-east1-d \
--machine-type n1-standard-1
אפשר להוסיף את הדגל --preemptible למופעים חד-פעמיים וניסיוניים.
API
ב-API, יוצרים בקשה רגילה ליצירת אינסטנס, אבל כוללים תמונה של מקור מערכת הפעלה שמותאמת לקונטיינרים. לדוגמה:
POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/compute-zone/instances
{
'machineType': 'zones/compute-zone/machineTypes/machine-type-name',
'name': 'instance-name',
'networkInterfaces': [
{
'accessConfigs': [
{
'type': 'ONE_TO_ONE_NAT',
'name': 'External NAT'
}
],
'network': 'global/networks/default'
}
],
'disks': [
{
'type': 'PERSISTENT',
'boot': true,
'autoDelete': true,
'initializeParams': {
'sourceImage': 'projects/cos-cloud/global/images/image-name'
}
}
]
}
הגדרת מופע
במקרים מסוימים, יכול להיות שתרצו לבצע הגדרה נוספת כשהמופע מופעל. אפשר להשתמש בכלי cloud-init עם מערכת הפעלה שמותאמת לקונטיינרים כדי להחיל פרטי הגדרה שאתם מספקים בפורמט cloud-config.
שימוש ב-cloud-init עם פורמט ההגדרה של Cloud
קובצי אימג' של מערכת הפעלה שמותאמת לקונטיינרים כוללים את cloud-init כדרך להגדיר את המופע בזמן האתחול. הכלי cloud-init מצפה שההגדרה שלו תהיה בערך של המפתח user-data של המטא-נתונים של המכונה. cloud-init
הכלי מבין כמה פורמטים.
בדוגמה הבאה מוצג קובץ cloud-init שמראה איך ליצור חשבון משתמש וליצור שירות systemd בבעלות המשתמש הזה, ששולט בניהול של קונטיינר Docker busybox:
#cloud-config
users:
- name: cloudservice
uid: 2000
write_files:
- path: /etc/systemd/system/cloudservice.service
permissions: 0644
owner: root
content: |
[Unit]
Description=Start a simple docker container
[Service]
ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice busybox:latest /bin/sleep 3600
ExecStop=/usr/bin/docker stop mycloudservice
ExecStopPost=/usr/bin/docker rm mycloudservice
runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service
# Optional once-per-boot setup. For example: mounting a PD.
bootcmd:
- fsck.ext4 -tvy /dev/[DEVICE_ID]
- mkdir -p /mnt/disks/[MNT_DIR]
- mount -t ext4 -O ... /dev/[DEVICE_ID] /mnt/disks/[MNT_DIR]
כדי ליצור מכונת VM עם מערכת הפעלה Container-Optimized OS שמפנה לקובץ cloud-init הזה, משתמשים בדגל --metadata-from-file של שורת הפקודה.
בהנחה שהקובץ cloud-init נקרא filename בספרייה הנוכחית, הפקודה הבאה יוצרת מופע של מערכת הפעלה שמותאמת לקונטיינרים ומפעילה את cloud-init על ידי הקצאת התוכן של הקובץ למפתח user-data במטא-נתונים של המופע:
gcloud compute instances create instance-name \
--image image-name \
--image-project cos-cloud \
--metadata-from-file user-data=filename
מחליפים את מה שכתוב בשדות הבאים:
- instance-name: השם של מופע ה-VM.
- image-name: השם של תמונת מערכת ההפעלה שמותאמת לקונטיינרים של המכונה. לדוגמה,
--image=cos-113-18244-85-29. - filename: השם של קובץ המטא-נתונים.
אפשר להגדיר דגלים אחרים של מטא-נתונים כשיוצרים מופעים של מערכת הפעלה שמותאמת לקונטיינרים. המאפיינים האלה הם צמדים פשוטים של מפתח-ערך, ולכן אפשר להשתמש בדגל --metadata בפקודה gcloud compute instances create כדי ליצור את המאפיינים. בנוסף, החל מגרסה 97, אפשר להגדיר דגלי מטא-נתונים במטא-נתונים של פרויקט באמצעות הדגל --metadata בפקודה gcloud compute project-info add-metadata. סימונים
שמוגדרים ברמת המופע יקבלו עדיפות על פני סימונים שמוגדרים ברמת הפרויקט.
אפשר להרחיב את הדוגמה הקודמת כדי לאסוף נתוני שימוש וקובץ dump של קריסה באמצעות הפקודה הבאה:
gcloud compute instances create instance-name \
--image image-name \
--image-project cos-cloud \
--metadata-from-file user-data=filename \
--metadata=cos-metrics-enabled=true
סימונים אחרים של מטא-נתונים
| מפתח מטא-נתונים | תיאור | התנהגות ברירת המחדל |
|---|---|---|
cos-update-strategy |
ההגדרה קובעת את אופן הפעולה של העדכונים האוטומטיים. הערך יכול להיות update_enabled, update_disabled או לא מוגדר.אם הערך לא מוגדר, המערכת תשתמש בהתנהגות ברירת המחדל של העדכון האוטומטי של אבן הדרך. אם הערך מוגדר, ההתנהגות תלויה בערוץ ההפצה:
|
|
cos-metrics-enabled |
הפעלה של איסוף קובצי dump של קריסות. הערכים האפשריים הם:truefalse (ברירת מחדל). |
מושבת כברירת מחדל |
cos-metrics-enabled מאפשרת איסוף של חלק מדוחות הקריסה, שעוזרים ל-Google לשפר את תמונת הצומת cos. דוחות קריסה מכילים קטע ממאגר היומן של ליבת המערכת, שמתעד את הפעולות האחרונות שבוצעו בזמן הקריסה. הם עשויים להכיל מידע על משתמשים או מידע אישי, בהתאם למה שקרה בזמן הקריסה.
המידע נשלח ישירות ל-Google ולא משותף מחוץ ל-Google.התחברות למופע
אפשר להתחבר ב-SSH למכונה וירטואלית שמופעלת בה תמונת הצומת cos באותו אופן שבו מתחברים ב-SSH למכונות אחרות של Compute Engine.
לדוגמה:
gcloud compute ssh instance-name \
--project project-id \
--zone compute-zone
הרצת סקריפטים לטעינה בזמן ההפעלה
אפשר לציין סקריפט לטעינה בזמן ההפעלה דרך שרת המטא-נתונים, באמצעות מפתח המטא-נתונים startup-script. אתם יכולים להשתמש ב-Google Cloud CLI, ב-API או במסוף Cloud de Confiance כדי לספק סקריפט לטעינה בזמן ההפעלה. פרטים נוספים זמינים במאמר הפעלת סקריפטים לטעינה בזמן ההפעלה.
סנכרון זמן
לפני milestone 85, מערכת ההפעלה Container-Optimized OS השתמשה בשירות systemd של systemd-timesyncd כדי לסנכרן את השעון של המערכת המקומית עם שרת Network Time Protocol (NTP) מרוחק באמצעות פרוטוקול SNTP. הערכים הבאים בקובץ ההגדרות /etc/systemd/timesyncd.conf מופיעים כהערות כדי לעזור לאדמין לבצע את השינויים הרצויים:
cat /etc/systemd/timesyncd.conf # comments omitted for brevity [Time] #NTP= #FallbackNTP=metadata.google.internal #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048
לכן, המרחק המקסימלי המקובל מהשורש הוא 5 שניות, והמרווחים המינימלי והמקסימלי בין בדיקות התקינות של הודעות NTP הם 32 ו-2048 שניות בהתאמה.
החל מאבן הדרך 85, מערכת ההפעלה Container-Optimized משתמשת בשירות chronyd כדי לסנכרן את השעון המקומי של המערכת עם שרת Network Time Protocol (NTP) מרוחק באמצעות פרוטוקול NTP. הערכים הבאים בקובץ ההגדרות /etc/chrony/chrony.conf מופיעים כהערות כדי לעזור לאדמין לבצע את השינויים הרצויים:
cat /etc/chrony/chrony.conf # Use custom NTP servers server metadata.google.internal prefer iburst # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. makestep 1.0 3 # Enable kernel synchronization of the real-time clock (RTC). rtcsync
שרת ה-NTP מוגדר מתגובת ה-DHCP של eth0, שבדרך כלל היא שרת המטא-נתונים של Compute Engine:
networkctl status eth0 | grep NTP
NTP: 169.254.169.254
שינוי אזור הזמן
אזור הזמן שמוגדר כברירת מחדל במערכת הפעלה שמותאמת לקונטיינרים מבית Google הוא UTC0. יוצרים קישור סמלי לאזור הזמן הרצוי, כמו בדוגמה הבאה:
sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/US/Pacific /etc/localtime
שימו לב: /etc הוא חסר מצב (stateless), ולכן אזור הזמן יאופס לברירת המחדל (UTC0) בכל הפעלה מחדש.
הפעלה או השבתה של עדכונים אוטומטיים
יש שתי דרכים להפעיל או להשבית עדכונים אוטומטיים. השיטה המומלצת היא להגדיר את מפתח המטא-נתונים של המכונה cos-update-strategy לערך update_enabled או update_disabled, בהתאם. לדוגמה:
gcloud compute instances create instance-name \
--image image-name \
--image-project cos-cloud \
--metadata cos-update-strategy=update_disabled
החל מגרסה 97, אפשר גם להשבית או להפעיל עדכונים אוטומטיים במטא-נתונים של הפרויקט:
gcloud compute project-info add-metadata \
--metadata cos-update-strategy=update_disabled
אפשר גם להשבית את העדכונים האוטומטיים במופע פעיל באמצעות systemctl:
sudo systemctl stop update-engine sudo systemctl mask update-engine