Google Compute Engine

1. परिचय

नमस्ते, आज आने के लिए धन्यवाद! क्या आप Google Compute Engine के बारे में जानने के लिए तैयार हैं?

इस कोडलैब में, हम Guestbook ऐप्लिकेशन के उदाहरण की मदद से, Compute Engine के काम करने के तरीके के बारे में जानेंगे.

आपको Compute Engine इंस्टेंस बनाने होंगे, nginx को डिप्लॉय करना होगा, और आखिर में नेटवर्क लोड बैलेंसर को फ़्रंट में रखना होगा. ग्राफ़िकल कंसोल या कमांड लाइन से Compute Engine इंस्टेंस बनाया जा सकता है. इस लैब में, कमांड-लाइन का इस्तेमाल करने का तरीका बताया गया है.

ComputeEngine_128px.png

Google Compute Engine, Google के डेटा सेंटर में चलने वाली वर्चुअल मशीनें उपलब्ध कराता है. ये मशीनें, दुनिया भर में फैले 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

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक कैरेक्टर स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे किसी भी समय अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. इसे आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट करें. इसके अलावा, अपने हिसाब से कोई आईडी बनाकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. संसाधन बंद करने के लिए, कोडलैब के आखिर में दिए गए "बंद करें" निर्देशों का पालन करें, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Google Cloud Shell

Google Cloud और Compute Engine को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

यह Debian पर आधारित वर्चुअल मशीन है. इसमें डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इसका मतलब है कि इस कोडलैब के लिए, आपको सिर्फ़ एक ब्राउज़र की ज़रूरत होगी. हां, यह Chromebook पर भी काम करता है.

  1. Cloud Console से Cloud Shell चालू करने के लिए, बस 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 फ़्लैग को हटाया जा सकता है.
  • Debian GNU/Linux 9 (stretch) की नई इमेज. अगर आपने कस्टम इमेज का इस्तेमाल किया है, तो यहां इमेज का नाम डालें. उदाहरण के लिए, --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 नाम का फ़ायरवॉल नियम बन जाएगा. इसमें आईपी पते के ब्लॉक की डिफ़ॉल्ट सूची होती है. इस सूची में शामिल आईपी पतों को इनबाउंड कनेक्शन (--source-ranges) बनाने की अनुमति होती है. ये आईपी पते 0.0.0.0/0 (हर जगह) पर सेट होते हैं.

सभी डिफ़ॉल्ट और उपलब्ध विकल्पों को देखने के लिए, gcloud compute firewall-rules create --help चलाएं. इसमें टैग के आधार पर फ़ायरवॉल के नियम लागू करने की सुविधा भी शामिल है.

5. इंस्टेंस में एसएसएच करना

कमांड लाइन से इंस्टेंस में एसएसएच करने के लिए (अब भी 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:~#

बस इतना ही! यह बहुत आसान है. (प्रोडक्शन में, पक्का करें कि आपने लंबा पासवर्ड डाला हो :)

इसके अलावा, Compute Engine > वीएम इंस्टेंस पर जाकर और एसएसएच पर क्लिक करके, सीधे कंसोल ( console.cloud.google.com) से इंस्टेंस में एसएसएच किया जा सकता है.

bfbc03997a41946e.png

6. Nginx इंस्टॉल करना

नए इंस्टेंस myinstance में लॉग इन करें और nginx इंस्टॉल करें:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

जांच करें कि myinstance से curl का इस्तेमाल करके सर्वर काम कर रहा है या नहीं:

$ 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>

वेब यूज़र इंटरफ़ेस (यूआई) के ज़रिए अपने इंस्टेंस की सूची बनाकर, अपने इंस्टेंस के लिए बाहरी आईपी का पता लगाएं:

dcc4e56e82ba2603.png

पक्का करें कि आपने एसएसएच बंद कर दिया हो. इसके बाद, 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, 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 वह पता है जो पिछली कमांड चलाने के बाद नतीजे के तौर पर दिखाया गया था.

समय की कमी की वजह से, आज हम एचटीटीपी लोड बैलेंसर नहीं बनाएंगे.

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. आगे क्या करना है?

बधाई हो, आपने Compute Engine का यह कोडलैब पूरा कर लिया है!

Compute Engine की अन्य सुविधाएं

Google Compute Engine में कई सुविधाएं उपलब्ध हैं. इनके बारे में ज़्यादा जानें :

Google Kubernetes Engine

Google Kubernetes Engine (GKE), Google Cloud का होस्ट किया गया और पूरी तरह से मैनेज किया गया Kubernetes ऑफ़र है. GKE का इस्तेमाल शुरू करने के लिए, कई कोडलैब उपलब्ध हैं. शुरुआत करने के लिए, यहां एक अच्छा उदाहरण दिया गया है :

हमें सुझाव/राय दें या शिकायत करें

  • कृपया थोड़ा समय निकालकर, हमारे छोटे से सर्वे में हिस्सा लें