1. מבוא
שלום לכולם, תודה שהגעתם היום! רוצים ללמוד על Google Compute Engine?
ב-Codelab הזה נלמד על Compute Engine באמצעות דוגמה של אפליקציית ספר אורחים.
תצטרכו ליצור מכונות של Compute Engine, לפרוס nginx ולבסוף להציב מאזן עומסי רשת בחזית. אפשר ליצור מכונה של Compute Engine דרך המסוף הגרפי או דרך שורת הפקודה. בשיעור ה-Lab הזה תלמדו איך להשתמש בשורת הפקודה.

Google Compute Engine מציע מכונות וירטואליות שפועלות במרכזי הנתונים של Google ומחוברות לרשת הסיבים האופטיים העולמית שלה. הכלים ותהליך העבודה שמוצעים מאפשרים להרחיב את הפתרון ממקרים בודדים למחשוב ענן גלובלי ומאוזן עומסים.
המכונות הווירטואליות האלה מופעלות במהירות, כוללות אחסון בדיסק מתמיד ומספקות ביצועים עקביים. המכונות זמינות בהרבה תצורות, כולל גדלים מוגדרים מראש, ואפשר גם ליצור אותן עם סוגי מכונות בהתאמה אישית שממוטבים לצרכים הספציפיים שלכם.
לבסוף, מכונות וירטואליות של Compute Engine הן גם הטכנולוגיה שמשמשת כמה מוצרים אחרים של Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow וכו').
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- מזהה הפרויקט חייב להיות ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות ליצור מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'. - יש ערך שלישי, מספר פרויקט, שמשמש חלק מממשקי ה-API. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
Google Cloud Shell
אפשר להפעיל את Google Cloud ואת Compute Engine מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
המכונה הווירטואלית הזו מבוססת על Debian, וטעונים בה כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות של הרשת. כלומר, כל מה שצריך כדי לבצע את ההדרכה הזו הוא דפדפן (כן, היא פועלת ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, פשוט לוחצים על הפעלת Cloud Shell
(הקצאת המשאבים והחיבור לסביבה אמורים להימשך רק כמה רגעים).


אחרי שמתחברים ל-Cloud Shell, אפשר לראות שהאימות כבר בוצע והפרויקט כבר הוגדר ל-PROJECT_ID.
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם מסיבה כלשהי הפרויקט לא מוגדר, פשוט מריצים את הפקודה הבאה:
gcloud config set project <PROJECT_ID>
חיפשת את PROJECT_ID? בודקים באיזה מזהה השתמשתם בשלבי ההגדרה או מחפשים אותו בלוח הבקרה של Cloud Console:

ב-Cloud Shell מוגדרים גם כמה משתני סביבה כברירת מחדל, שיכולים להיות שימושיים כשמריצים פקודות בעתיד.
echo $GOOGLE_CLOUD_PROJECT
פלט הפקודה
<PROJECT_ID>
- לבסוף, מגדירים את אזור ברירת המחדל ואת הגדרת הפרויקט.
gcloud config set compute/zone us-central1-f
אפשר לבחור מתוך מגוון אזורים שונים. מידע נוסף זמין במאמר בנושא אזורים ותחומים.
3. יצירת מכונה של Compute Engine
כפי שצוין קודם, נשתמש בשורת הפקודה gcloud ב-codelab הזה. אפשר לבצע את כל הפעולות האלה באמצעות המסוף (שזמין בכתובת console.cloud.google.com).
קודם ניצור מכונה עם הגדרות ברירת מחדל :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
חשוב לרשום את EXTERNAL_IP כדי להשתמש בו בהמשך.
המופע נוצר באמצעות מספר הגדרות ברירת מחדל :
- האזור שבוחרים. כל המופעים נמצאים באזור. אפשר לבחור אזור כשיוצרים את המופע באמצעות הדגל
--zone, או להגדיר אזור ברירת מחדל (כמו שעשינו בהגדרה הראשונית) ולהשמיט את הדגל--zone. - קובץ האימג' העדכני ביותר של Debian GNU/Linux 9 (stretch). אם אתם משתמשים בתמונה בהתאמה אישית, צריך לציין כאן את שם התמונה. לדוגמה,
--image my-own-image. - סוג המכונה
n1-standard-1. אפשר לבחור סוג מכונה אחר, כמוn1-highmem-4אוn1-highcpu-6. אם אף אחת מהמכונות עם קונפיגורציה מוגדרת (predefined) לא מתאימה לצרכים שלכם, תוכלו להשתמש במכונה מותאמת אישית (custom). - הרמה הבסיסית (root) של אחסון מתמיד (persistent disk) עם שם זהה למכונה. האחסון יתחבר באופן אוטומטי למכונה.
מריצים את הפקודה gcloud compute instances create --help כדי לראות את כל האפשרויות שזמינות.
4. הפעלת חומת אש ליציאה 80
כברירת מחדל, ב-Google Cloud Platform מותרת גישה למספר קטן של יציאות. אנחנו נתקין את Nginx בקרוב, אז קודם נפעיל את יציאה 80 בהגדרות של חומת האש.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
פעולה זו תיצור כלל חומת אש בשם allow-80 עם רשימת ברירת מחדל של בלוקים של כתובות IP שמורשים ליצור חיבורים נכנסים (--source-ranges) שמוגדרים לערך 0.0.0.0/0 (בכל מקום).
מריצים את הפקודה gcloud compute firewall-rules create --help כדי לראות את כל ברירות המחדל ואת כל האפשרויות הזמינות, כולל האפשרות להחיל כללי חומת אש שמבוססים על תגים.
5. התחברות למופע באמצעות SSH
כדי להתחבר למופע באמצעות SSH משורת הפקודה (עדיין מ-Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
זהו! די פשוט, נכון? (בסביבת ייצור, חשוב להזין ביטוי סיסמה :)
אפשר גם להתחבר למכונה באמצעות SSH ישירות מהמסוף ( console.cloud.google.com). כדי לעשות זאת, עוברים אל Compute Engine > VM Instances ולוחצים על SSH.

6. התקנת Nginx
מתחברים ל-myinstance, המכונה החדשה שנוצרה, ומתקינים את nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
בודקים שהשרת פועל באמצעות curl מ-myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
כדי למצוא את כתובת ה-IP החיצונית של המופע, מציגים את רשימת המופעים דרך ממשק המשתמש באינטרנט:

חשוב לצאת מ-SSH ולהריץ את הפקודה הזו מ-Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
אחר כך עוברים אל http://EXTERNAL_IP/, כאשר EXTERNAL_IP הוא כתובת ה-IP הציבורית של myinstance, ואז אמור להופיע דף nginx:

7. סקריפט לטעינה בזמן ההפעלה
במקום להגדיר את המכונה בכל פעם, אפשר להשתמש בסקריפט לטעינה בזמן ההפעלה כדי לאתחל את המכונה בזמן ההפעלה.
יוצרים קובץ בשם startup.sh עם התוכן הבא (אפשר להשתמש בעורך הטקסט המועדף: vim, nano או emacs):
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
כדי ליצור מכונה וירטואלית חדשה עם הסקריפט הזה לטעינה בזמן ההפעלה, פשוט מקלידים :
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
עוברים אל http://EXTERNAL_IP/ ורואים את דף הבית המעודכן. אם הדף לא מוצג מיד, צריך לנסות שוב אחרי כמה שניות. יכול להיות שהמארח עדיין מפעיל את nginx.
8. יצירת אשכול של שרתים
כדי ליצור אשכול שרתים, צריך קודם ליצור תבנית של מכונה וירטואלית. אחרי שיוצרים תבנית של הגדרות מכונה, אפשר ליצור קבוצת מופעים כדי לנהל את מספר המופעים שייווצרו.
קודם כל, יוצרים תבנית של הגדרות מכונה באמצעות סקריפט לטעינה בזמן ההפעלה :
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
שנית, ניצור מאגר של יעדים. מאגר יעד מאפשר לנו ליצור נקודת גישה יחידה לכל המופעים בקבוצה, והוא נחוץ לאיזון עומסים בשלבים הבאים.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
לבסוף, יוצרים קבוצת מופעים באמצעות התבנית:
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
ייווצרו שתי מכונות וירטואליות נוספות עם שמות שמתחילים בתחילית nginx-.
עכשיו אמורות להופיע כל הדוגמאות שיצרתם.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. יצירת מאזן עומסי רשת
יש כמה סוגים של מאזני עומסים ב-Google Cloud Platform, כולל :
- מאזן עומסים ברשת ברמה 3
- מאזן עומסים מסוג HTTP(S) בשכבה 7
ניצור מאזן עומסי רשת אזורי שמטרגט את קבוצת המופעים שלנו:
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
אחר כך אפשר להיכנס למאזן העומסים מהדפדפן http://IP_ADDRESS/, כאשר IP_ADDRESS היא הכתובת שמוצגת כתוצאה מהפעלת הפקודה הקודמת.
בגלל השעה, לא ניצור היום מאזן עומסים של HTTP.
10. ניקוי האשכול
אל תשכחו להשבית את האשכול, אחרת הוא ימשיך לפעול ולצבור עלויות. הפקודות הבאות ימחקו את המכונות ב-Google Compute Engine, את קבוצת המכונות, את קבוצת הטירגוט ואת מאזן העומסים.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
כל אחת מהפקודות שלמעלה אמורה לבקש מכם לאשר את מחיקת המשאב.
11. מה השלב הבא?
כל הכבוד, סיימתם את ה-Codelab הזה של Compute Engine!
תכונות נוספות של Compute Engine
ל-Google Compute Engine יש מגוון רחב של תכונות. כדאי לעיין בחלק מהמאמרים הבאים :
- מכונות וירטואליות שניתן להפסיק את הפעולה שלהן – https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- שרתים לדייר יחיד (sole-tenant) – https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU ו-TPU – https://cloud.google.com/compute/docs/gpus/add-gpus
- מכונות Windows – https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- תוויות של משאבים – https://cloud.google.com/compute/docs/labeling-resources
- העברת מכונות וירטואליות ל-Compute Engine – https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) הוא שירות Kubernetes מארח ומנוהל לחלוטין של Google Cloud. יש כמה הדרכות Codelab שיעזרו לכם להתחיל להשתמש ב-GKE. הנה דוגמה טובה להתחיל איתה :
- סדנת קוד של Google Kubernetes Engine – https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
שליחת משוב
- נשמח אם תקדישו כמה רגעים כדי למלא את הסקר הקצר שלנו.