1. مقدمه
سلام به همه، ممنون که امروز آمدید! برای یادگیری موتور محاسباتی گوگل آماده اید؟
در این لبه کد، موتور محاسباتی را که از طریق یک نمونه برنامه Guestbook کار میکند، بررسی میکنیم.
شما نمونههای Compute Engine را ایجاد میکنید، nginx را مستقر میکنید و در نهایت یک متعادلکننده بار شبکه را در جلو قرار میدهید. می توانید یک نمونه Compute Engine را از کنسول گرافیکی یا از خط فرمان ایجاد کنید. این آزمایشگاه شما را با استفاده از خط فرمان راهنمایی می کند.
Google Compute Engine ماشینهای مجازی را ارائه میدهد که در مراکز داده Google متصل به شبکه فیبر جهانی آن کار میکنند. ابزار و گردش کار ارائه شده، مقیاسپذیری از نمونههای منفرد به محاسبات ابری با بار متعادل را ممکن میسازد.
این ماشینهای مجازی به سرعت بوت میشوند، با فضای ذخیرهسازی دیسک دائمی عرضه میشوند و عملکرد ثابتی را ارائه میدهند. ماشینها در پیکربندیهای زیادی از جمله اندازههای از پیش تعریفشده در دسترس هستند و همچنین میتوانند با انواع ماشینهای سفارشی که برای نیازهای خاص شما بهینه شدهاند، ایجاد شوند.
در نهایت، ماشینهای مجازی Compute Engine نیز فناوری مورد استفاده چندین محصول Google Cloud دیگر هستند (Kubernetes Engine، Cloud Dataproc، Cloud Dataflow، و غیره).
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان
PROJECT_ID
شناخته میشود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود. - یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعملهای «پاکسازی» را که در انتهای Codelab یافت میشود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Google Cloud Shell
در حالی که Google Cloud و Compute Engine را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهیم کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).
- برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate 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
در این کد لبه استفاده خواهیم کرد. تمام کارهایی که در اینجا انجام می شود را می توان با استفاده از کنسول (موجود در 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 را وارد نمونه کنید.
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 خارجی را برای نمونه خود پیدا کنید:
مطمئن شوید که از 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
برای ایجاد یک نمونه 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 وجود دارد از جمله:
- یک بار متعادل کننده شبکه L3
- یک L7 HTTP(S) Load Balancer
بیایید یک متعادل کننده بار شبکه منطقه ای ایجاد کنیم که گروه نمونه خود را هدف قرار می دهد:
$ 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
موتور محاسباتی گوگل مجموعه ای غنی از ویژگی ها دارد. ممکن است بخواهید به برخی از این موارد شیرجه بزنید:
- ماشینهای مجازی قابل پیشگیری - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- گرههای مستاجر تنها - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU و TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- نمونههای ویندوز - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- منابع برچسبگذاری - https://cloud.google.com/compute/docs/labeling-resources
- انتقال ماشینهای مجازی به موتور محاسباتی - https://cloud.google.com/compute/docs/vm-migration/
موتور Google Kubernetes
Google Kubernetes Engine (GKE) پیشنهاد میزبانی شده و کاملاً مدیریت شده Kubernetes Google Cloud است. چندین کد لبه برای کمک به شما برای شروع با GKE وجود دارد. در اینجا یک مورد خوب برای شروع وجود دارد:
- Google Kubernetes Engine Codelab - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
نظرات خود را با ما در میان بگذارید
- لطفا یک لحظه برای تکمیل نظرسنجی بسیار کوتاه ما وقت بگذارید