موتور محاسباتی گوگل

1. مقدمه

سلام به همه، ممنون که امروز آمدید! برای یادگیری موتور محاسباتی گوگل آماده اید؟

در این لبه کد، موتور محاسباتی را که از طریق یک نمونه برنامه Guestbook کار می‌کند، بررسی می‌کنیم.

شما نمونه‌های Compute Engine را ایجاد می‌کنید، nginx را مستقر می‌کنید و در نهایت یک متعادل‌کننده بار شبکه را در جلو قرار می‌دهید. می توانید یک نمونه Compute Engine را از کنسول گرافیکی یا از خط فرمان ایجاد کنید. این آزمایشگاه شما را با استفاده از خط فرمان راهنمایی می کند.

ComputeEngine_128px.png

Google Compute Engine ماشین‌های مجازی را ارائه می‌دهد که در مراکز داده Google متصل به شبکه فیبر جهانی آن کار می‌کنند. ابزار و گردش کار ارائه شده، مقیاس‌پذیری از نمونه‌های منفرد به محاسبات ابری با بار متعادل را ممکن می‌سازد.

این ماشین‌های مجازی به سرعت بوت می‌شوند، با فضای ذخیره‌سازی دیسک دائمی عرضه می‌شوند و عملکرد ثابتی را ارائه می‌دهند. ماشین‌ها در پیکربندی‌های زیادی از جمله اندازه‌های از پیش تعریف‌شده در دسترس هستند و همچنین می‌توانند با انواع ماشین‌های سفارشی که برای نیازهای خاص شما بهینه شده‌اند، ایجاد شوند.

در نهایت، ماشین‌های مجازی Compute Engine نیز فناوری مورد استفاده چندین محصول Google Cloud دیگر هستند (Kubernetes Engine، Cloud Dataproc، Cloud Dataflow، و غیره).

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
  • شناسه پروژه باید در تمام پروژه‌های Google Cloud منحصربه‌فرد باشد و تغییرناپذیر باشد (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان PROJECT_ID شناخته می‌شود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا می‌توانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود.
  • یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعمل‌های «پاک‌سازی» را که در انتهای Codelab یافت می‌شود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Google Cloud Shell

در حالی که Google Cloud و Compute Engine را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهیم کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

  1. برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate 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 در این کد لبه استفاده خواهیم کرد. تمام کارهایی که در اینجا انجام می شود را می توان با استفاده از کنسول (موجود در 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 حذف کنید.
  • آخرین تصویر دبیان گنو/لینوکس 9 (کشش) . اگر از تصویر سفارشی خود استفاده می کنید، به جای آن نام تصویر را در اینجا وارد کنید. به عنوان مثال، --image my-own-image .
  • نوع دستگاه n1-standard-1 . می توانید نوع ماشین دیگری مانند n1-highmem-4 یا n1-highcpu-6 را انتخاب کنید. اگر هیچ یک از انواع ماشین های از پیش تعریف شده مطابق با نیازهای شما نیست، از نوع ماشین سفارشی استفاده کنید.
  • یک دیسک ثابت ریشه با همان نام نمونه. دیسک به طور خودکار به نمونه متصل می شود.

برای دیدن همه گزینه‌های موجود 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 (Everywhere) تنظیم شده اند.

اجرای 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:~#

همین! بسیار آسان (در مرحله تولید، مطمئن شوید که یک عبارت عبور وارد کنید :)

همچنین، می‌توانید مستقیماً از کنسول ( consol.cloud.google.com )، با رفتن به Compute Engine > VM Instances و کلیک کردن بر روی SSH ، 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>

با فهرست کردن نمونه های خود یا از طریق وب UI، 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. یک خوشه از سرورها ایجاد کنید

برای ایجاد خوشه ای از سرورها، ابتدا باید یک Instance Template ایجاد کنید. پس از ایجاد یک الگوی نمونه، می‌توانید یک گروه نمونه ایجاد کنید تا تعداد نمونه‌های موردنظر را مدیریت کنید.

ابتدا یک الگوی نمونه با استفاده از اسکریپت راه اندازی ایجاد کنید:

$ 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

با این کار دو نمونه VM اضافی با نام هایی ایجاد می شود که با پیشوند 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. یک Network Load Balancer ایجاد کنید

چندین نوع متعادل کننده بار در 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

سپس می توانید از load balancer از مرورگر http://IP_ADDRESS/ بازدید کنید که IP_ADDRESS آدرسی است که در نتیجه اجرای دستور قبلی نشان داده شده است.

با توجه به زمان، ما امروز یک متعادل کننده بار HTTP ایجاد نخواهیم کرد.

10. Cluster را تمیز کنید

فراموش نکنید که خوشه خود را ببندید، در غیر این صورت آنها به کار خود ادامه می دهند و هزینه ها را افزایش می دهند. دستورات زیر نمونه‌های Google Compute Engine، Instance Group، Targeting Group و Load Balancer را حذف می‌کند.

$ 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. بعد چی؟

تبریک می‌گوییم، شما این آزمایشگاه موتور محاسباتی را تکمیل کردید!

ویژگی های بیشتر Compute Engine

موتور محاسباتی گوگل مجموعه ای غنی از ویژگی ها دارد. ممکن است بخواهید به برخی از این موارد شیرجه بزنید:

موتور Google Kubernetes

Google Kubernetes Engine (GKE) پیشنهاد میزبانی شده و کاملاً مدیریت شده Kubernetes Google Cloud است. چندین کد لبه برای کمک به شما برای شروع با GKE وجود دارد. در اینجا یک مورد خوب برای شروع وجود دارد:

نظرات خود را با ما در میان بگذارید

  • لطفا یک لحظه برای تکمیل نظرسنجی بسیار کوتاه ما وقت بگذارید