Google Compute Engine

1. מבוא

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

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

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

ComputeEngine_128px.png

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

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

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

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

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

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.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 מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

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

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

1067942a9a93f70.pngScreen 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) לא מתאימה לצרכים שלכם, תוכלו להשתמש במכונה מותאמת אישית (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.

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. הנה דוגמה טובה להתחיל איתה :

שליחת משוב

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