Google Compute Engine

1. परिचय

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

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

आपको 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

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

Google Cloud शेल

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

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

  1. Cloud Console से Cloud Shell को चालू करने के लिए, Cloud Shell को चालू करें b125d9eb26a46cc5.png पर क्लिक करें. प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा.

1067942a9a93f70.png

14-06-2017 को 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:~#

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

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

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 इंजन

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

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

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