Google Compute Engine

1. מבוא

שלום לכולם, תודה שהגעתם היום. מוכנים ללמוד את Google Compute Engine?

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

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

ComputeEngine_128px.png

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

המכונות הווירטואליות האלה מופעלות במהירות, כוללות אחסון מתמיד (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

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

Google Cloud Shell

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

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

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

1067942a9a93f70.png

צילום מסך מתאריך 2017-06-14 בשעה 22:13.43.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:

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) בזמן היצירה של המכונה באמצעות הדגל --zone, או להגדיר תחום ברירת מחדל (כפי שעשינו בהגדרה הראשונית) ולהשמיט את הדגל --zone.
  • התמונה העדכנית ביותר של Debian GNU/Linux 9 (רצועה). אם אתם משתמשים בתמונה מותאמת אישית משלכם, צריך לציין כאן את שם התמונה. לדוגמה, --image my-own-image.
  • סוג המכונה n1-standard-1. אפשר לבחור סוג מכונה אחר, כמו n1-highmem-4 או n1-highcpu-6. אם אף אחד מסוגי המכונות המוגדרים מראש לא מתאים לצרכים שלכם, צריך להשתמש בסוג מכונה בהתאמה אישית.
  • הרמה הבסיסית (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 > מכונות וירטואליות, ולחיצה על 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

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

$ 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. יש כמה שיעורי Lab זמינים שיעזרו לכם להתחיל עם GKE. הנה סיסמה טובה שאפשר להתחיל עם :

נשמח לקבל ממך משוב

  • כדאי למלא את הסקר הקצר מאוד שלנו