Google Compute Engine

1. מבוא

שלום לכולם, תודה שהגעתם היום! רוצים ללמוד על Google Compute Engine?

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

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

ComputeEngine_128px.png

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

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

לבסוף, מכונות וירטואליות ב-Compute Engine הן גם הטכנולוגיה שמשמשת כמה מוצרים אחרים של Google Cloud (Kubernetes Engine,‏ Cloud Dataproc,‏ Cloud Dataflow וכו').

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Google Cloud Shell

אפשר להפעיל את Google Cloud ואת Compute Engine מרחוק מהמחשב הנייד, אבל בסדנת הקוד הזו נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

המכונה הווירטואלית הזו מבוססת על Debian, וטעונים בה כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. כלומר, כל מה שצריך כדי לבצע את ההוראות במאמר הזה הוא דפדפן (כן, זה עובד ב-Chromebook).

  1. כדי להפעיל את Cloud Shell ממסוף Cloud, פשוט לוחצים על הפעלת Cloud Shell b125d9eb26a46cc5.png (הקצאת המשאבים והחיבור לסביבה אמורים להימשך רק כמה רגעים).

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

אחרי שמתחברים ל-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:

cc3895eeac80db2c.png

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

echo $GOOGLE_CLOUD_PROJECT

פלט הפקודה

<PROJECT_ID>
  1. לבסוף, מגדירים את אזור ברירת המחדל ואת הגדרת הפרויקט.
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) לא מתאימה לצרכים שלכם, תוכלו להשתמש בסוג מכונה בהתאמה אישית.
  • הרמה הבסיסית (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 Into the Instance

כדי להתחבר למופע באמצעות 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.

bfbc03997a41946e.png

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 החיצונית של המופע, מציגים את רשימת המופעים דרך ממשק המשתמש באינטרנט:

dcc4e56e82ba2603.png

חשוב לצאת מ-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:

49b52b9354041f3b.png

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, כולל :

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

$ 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 יש מגוון רחב של תכונות. כדאי לעיין בחלק מהמאמרים הבאים :

Google Kubernetes Engine

‫Google Kubernetes Engine ‏ (GKE) הוא שירות Kubernetes מנוהל ומתארח ב-Google Cloud. יש כמה הדרכות של Codelab שיעזרו לכם להתחיל להשתמש ב-GKE. הנה דוגמה טובה להתחלה :

שליחת משוב

  • נשמח אם תקדישו כמה רגעים למילוי הסקר הקצר שלנו.