Google Kubernetes Engine (GKE) की मदद से, अपनी वेबसाइट को डिप्लॉय, स्केल, और अपडेट करें

1. परिचय

वेबसाइटों और ऐप्लिकेशन को चलाना मुश्किल है.

जब कोई समस्या नहीं होनी चाहिए, तब भी समस्याएं होती हैं. सर्वर क्रैश हो जाते हैं. मांग बढ़ने की वजह से, ज़्यादा संसाधनों का इस्तेमाल होता है. साथ ही, बिना किसी रुकावट के बदलाव करना मुश्किल और तनावपूर्ण होता है.

कल्पना करें कि एक ऐसा टूल है जो इन सभी कामों में आपकी मदद कर सकता है. साथ ही, आपको इन कामों को अपने-आप पूरा होने की सुविधा भी देता है! GKE की मदद से, यह सब न सिर्फ़ किया जा सकता है, बल्कि इसे आसानी से किया जा सकता है! इस कोडलैब में, आपको एक डेवलपर की भूमिका निभानी है. यह डेवलपर, काल्पनिक कंपनी Fancy Store के लिए एक ई-कॉमर्स वेबसाइट चलाता है. स्केलिंग और आउटेज की समस्याओं की वजह से, आपको अपने ऐप्लिकेशन को GKE पर डिप्लॉय करने का काम सौंपा गया है!

एक्सरसाइज़ को इस क्रम में रखा गया है, ताकि क्लाउड डेवलपर को आम तौर पर होने वाले अनुभव के बारे में पता चल सके:

  1. GKE क्लस्टर बनाएं.
  2. Docker कंटेनर बनाएं.
  3. कंटेनर को GKE पर डिप्लॉय करें.
  4. किसी सेवा के ज़रिए कंटेनर को ऐक्सेस करने की अनुमति दें.
  5. कंटेनर को कई रेप्लिका में स्केल करें.
  6. वेबसाइट में बदलाव करें.
  7. बिना किसी रुकावट के नया वर्शन रोल आउट करें.

आर्किटेक्चर डायग्राम

ddba666bd2b02d0d.png

आपको क्या सीखने को मिलेगा

  • GKE क्लस्टर बनाने का तरीका
  • डॉकर इमेज बनाने का तरीका
  • Kubernetes पर Docker इमेज डिप्लॉय करने का तरीका
  • Kubernetes पर किसी ऐप्लिकेशन को स्केल करने का तरीका
  • Kubernetes पर रोलिंग अपडेट करने का तरीका

ज़रूरी शर्तें

  • प्रोजेक्ट बनाने के लिए, एडमिन के तौर पर ऐक्सेस वाला Google खाता या प्रोजेक्ट के मालिक की भूमिका वाला प्रोजेक्ट
  • Docker और Kubernetes की बुनियादी जानकारी (अगर आपको बुनियादी जानकारी नहीं है, तो कृपया अभी Docker और Kubernetes की जानकारी देखें.)

2. एनवायरमेंट सेटअप करना

अपनी स्पीड से एनवायरमेंट सेट अप करना

अगर आपके पास Google खाता नहीं है, तो एक खाता बनाएं. Google Cloud Console में साइन इन करें और एक नया प्रोजेक्ट बनाएं.

53dad2cefdae71da.png

2016-02-10 12:45:26.png का स्क्रीनशॉट

ध्यान रखें कि प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इसे बाद में PROJECT_ID के तौर पर जाना जाएगा.

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

Cloud Shell

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

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

  1. Cloud Console से Cloud Shell चालू करने के लिए, बस Cloud Shell चालू करें fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q पर क्लिक करें. इसे चालू होने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा.

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

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 के डैशबोर्ड में जाकर इसे देखें:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell, कुछ एनवायरमेंट वैरिएबल को डिफ़ॉल्ट रूप से भी सेट करता है. ये वैरिएबल, आने वाले समय में कमांड चलाने के दौरान आपके काम आ सकते हैं.

echo $GOOGLE_CLOUD_PROJECT

कमांड आउटपुट

<PROJECT_ID>
  1. आखिर में, डिफ़ॉल्ट ज़ोन और प्रोजेक्ट कॉन्फ़िगरेशन सेट करें.
gcloud config set compute/zone us-central1-f

आपके पास अलग-अलग ज़ोन चुनने का विकल्प होता है. ज़्यादा जानकारी के लिए, रीजन और ज़ोन देखें.

3. GKE क्लस्टर बनाना

अब आपके पास डेवलपर एनवायरमेंट है. इसलिए, आपको अपनी वेबसाइट को डिप्लॉय करने के लिए, GKE क्लस्टर की ज़रूरत होगी! क्लस्टर बनाने से पहले, आपको यह पक्का करना होगा कि सही एपीआई चालू हों. Containers API को चालू करने के लिए, यह कमांड चलाएं:

gcloud services enable container.googleapis.com

अब अपना क्लस्टर बनाया जा सकता है! 3 नोड वाला fancy-cluster नाम का क्लस्टर बनाने के लिए, यह तरीका अपनाएं:

gcloud container clusters create fancy-cluster --num-nodes 3

क्लस्टर बनने में कुछ मिनट लग सकते हैं. इसके बाद, यहां दिया गया निर्देश चलाएं और क्लस्टर के तीन वर्कर वर्चुअल मशीन (वीएम) इंस्टेंस देखें:

gcloud compute instances list

आउटपुट:

NAME                                          ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
gke-fancy-cluster-default-pool-ad92506d-1ng3  us-east4-a  n1-standard-1               10.150.0.7   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4fvq  us-east4-a  n1-standard-1               10.150.0.5   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4zs3  us-east4-a  n1-standard-1               10.150.0.6   XX.XX.XX.XX    RUNNING

Cloud Console में भी अपने क्लस्टर और उससे जुड़ी जानकारी देखी जा सकती है. सबसे ऊपर बाएं कोने में मौजूद मेन्यू बटन पर क्लिक करें. इसके बाद, नीचे की ओर स्क्रोल करके Kubernetes Engine पर जाएं और Clusters पर क्लिक करें. आपको fancy-cluster नाम का क्लस्टर दिखेगा.

795c794b03c5d2b0.png

6b394dfb8a6031f2.png

बधाई हो! आपने अपना पहला क्लस्टर बना लिया है!

4. सोर्स रिपॉज़िटरी का क्लोन बनाना

यह एक मौजूदा वेबसाइट है. इसलिए, आपको सिर्फ़ सोर्स को रिपॉज़िटरी से क्लोन करना होगा, ताकि आप Docker इमेज बनाने और उन्हें GKE पर डिप्लॉय करने पर ध्यान दे सकें.

सोर्स रिपॉज़िटरी को अपने Cloud Shell इंस्टेंस में क्लोन करने और उसे सही डायरेक्ट्री में बदलने के लिए, यहां दिए गए कमांड चलाएं. इसके अलावा, Node.js की डिपेंडेंसी भी इंस्टॉल की जाएंगी, ताकि ऐप्लिकेशन को डिप्लॉय करने से पहले उसकी जांच की जा सके.

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

इससे रिपॉज़िटरी क्लोन हो जाती है, डायरेक्ट्री बदल जाती है, और आपके ऐप्लिकेशन को स्थानीय तौर पर चलाने के लिए ज़रूरी डिपेंडेंसी इंस्टॉल हो जाती हैं. उस स्क्रिप्ट को चलने में कुछ मिनट लग सकते हैं.

ज़रूरी जांच करें और अपने ऐप्लिकेशन को टेस्ट करें. अपने वेब सर्वर को शुरू करने के लिए, यह कमांड चलाएं:

cd ~/monolith-to-microservices/monolith
npm start

आउटपुट:

Monolith listening on port 8080!

अपने ऐप्लिकेशन की झलक देखने के लिए, Cloud Shell मेन्यू में जाकर वेब प्रीव्यू आइकॉन पर क्लिक करें. इसके बाद, पोर्ट 8080 पर झलक देखें को चुनें.

5869738f0e9ec386.png

इससे एक नई विंडो खुलेगी. इसमें आपको अपना फ़ैंसी स्टोर दिखेगा!

9ed25c3f0cbe62fa.png

वेबसाइट देखने के बाद, उस विंडो को बंद किया जा सकता है. वेब सर्वर प्रोसेस को रोकने के लिए, टर्मिनल विंडो में Control+C (Windows या Mac) दबाएं.

5. Cloud Build की मदद से Docker कंटेनर बनाना

अब आपकी सोर्स फ़ाइलें तैयार हैं. इसलिए, अब अपने ऐप्लिकेशन को Dockerize करें!

आम तौर पर, आपको दो चरणों वाला तरीका अपनाना होता है. इसमें Docker कंटेनर बनाना और उसे किसी रजिस्ट्री में पुश करना शामिल है, ताकि GKE उस इमेज को सेव कर सके. हालांकि, Cloud Build का इस्तेमाल करके, Docker कंटेनर बनाया जा सकता है. साथ ही, एक ही कमांड से इमेज को Container Registry में रखा जा सकता है! (डॉकर फ़ाइल बनाने और उसे पुश करने की मैन्युअल प्रोसेस देखने के लिए, Container Registry के लिए क्विकस्टार्ट गाइड देखें.)

Cloud Build, डायरेक्ट्री में मौजूद फ़ाइलों को कंप्रेस करता है और उन्हें Cloud Storage बकेट में ले जाता है. इसके बाद, बिल्ड प्रोसेस, बकेट से फ़ाइलें लेती है और Dockerfile का इस्तेमाल करके, Docker बिल्ड प्रोसेस को चलाती है. आपने Docker इमेज के लिए, होस्ट के तौर पर gcr.io के साथ --tag फ़्लैग तय किया है. इसलिए, नतीजे के तौर पर मिली Docker इमेज को Container Registry में पुश कर दिया जाता है.

सबसे पहले, आपको Cloud Build API चालू करना होगा. इसके लिए, यह निर्देश चलाएं:

gcloud services enable cloudbuild.googleapis.com

एपीआई चालू होने के बाद, बिल्ड प्रोसेस शुरू करने के लिए Cloud Shell में यह निर्देश चलाएं:

cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

इस प्रोसेस में कुछ मिनट लगते हैं. इसके पूरा होने के बाद, आपको टर्मिनल में यह आउटपुट दिखेगा:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID                                    CREATE_TIME                DURATION  SOURCE                                                                                  IMAGES                              STATUS
1ae295d9-63cb-482c-959b-bc52e9644d53  2019-08-29T01:56:35+00:00  33S       gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz  gcr.io/<PROJECT_ID>/monolith:1.0.0  SUCCESS

अपनी बिल्ड हिस्ट्री देखने या प्रोसेस को रीयल टाइम में देखने के लिए, Cloud Console पर जाएं. सबसे ऊपर बाएं कोने में मौजूद मेन्यू बटन पर क्लिक करें. इसके बाद, नीचे की ओर स्क्रोल करके Ci/CD पर जाएं. इसके बाद, Cloud Build पर क्लिक करें और आखिर में इतिहास पर क्लिक करें. वहां आपको अपनी पिछली बिल्ड की सूची दिखेगी. हालांकि, उसमें सिर्फ़ वही बिल्ड होनी चाहिए जिसे आपने बनाया है.

4c753ede203255f6.png

अगर आपने बिल्ड आईडी पर क्लिक किया है, तो आपको उस बिल्ड की पूरी जानकारी दिखेगी. इसमें लॉग आउटपुट भी शामिल है.

बिल्ड की ज़्यादा जानकारी वाले पेज पर, कंटेनर इमेज देखी जा सकती है. इसे बनाने के लिए, बिल्ड की जानकारी वाले सेक्शन में मौजूद इमेज के नाम पर क्लिक करें.

6e88ed1643dfe629.png

6. कंटेनर को GKE पर डिप्लॉय करना

अपनी वेबसाइट को कंटेनर में बदलने और कंटेनर को Container Registry में पुश करने के बाद, अब इसे Kubernetes पर डिप्लॉय किया जा सकता है!

GKE क्लस्टर पर ऐप्लिकेशन डिप्लॉय करने और उन्हें मैनेज करने के लिए, आपको Kubernetes क्लस्टर-मैनेजमेंट सिस्टम से कम्यूनिकेट करना होगा. आम तौर पर, इसके लिए kubectl कमांड-लाइन टूल का इस्तेमाल किया जाता है.

Kubernetes, ऐप्लिकेशन को पॉड के तौर पर दिखाता है. ये ऐसी यूनिट होती हैं जो किसी कंटेनर (या एक-दूसरे से जुड़े कंटेनर के ग्रुप) को दिखाती हैं. पॉड, Kubernetes में सबसे छोटी डिप्लॉय की जा सकने वाली यूनिट है. यहां हर पॉड में सिर्फ़ आपका मोनोलिथ कंटेनर होता है.

अपने ऐप्लिकेशन को डिप्लॉय करने के लिए, आपको एक डिप्लॉयमेंट बनाना होगा. डिप्लॉयमेंट, आपके ऐप्लिकेशन की कई कॉपी मैनेज करता है. इन्हें रेप्लिका कहा जाता है. साथ ही, यह उन्हें आपके क्लस्टर के अलग-अलग नोड पर चलाने के लिए शेड्यूल करता है. इस मामले में, डिप्लॉयमेंट आपके ऐप्लिकेशन का सिर्फ़ एक पॉड चलाएगा. डिप्लॉयमेंट यह पक्का करते हैं कि ReplicaSet बनाकर. ReplicaSet यह पक्का करता है कि तय की गई रेप्लिका की संख्या हमेशा चालू रहे.

kubectl create deployment कमांड की वजह से, Kubernetes आपके क्लस्टर पर monolith नाम का एक डिप्लॉयमेंट बनाता है. इसमें 1 रेप्लिका होता है.

अपने ऐप्लिकेशन को डिप्लॉय करने के लिए, यह कमांड चलाएं:

kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0

डिप्लॉयमेंट की पुष्टि करना

यह पुष्टि करने के लिए कि डिप्लॉयमेंट सही तरीके से बनाया गया है, यह कमांड चलाएं. पॉड के स्टेटस को "Running" होने में कुछ समय लग सकता है:

kubectl get all

आउटपुट:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-htm7z   1/1     Running   0          6m21s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           20m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       20m

इस आउटपुट में आपको कई चीज़ें दिखती हैं. आपको अपना डिप्लॉयमेंट दिखेगा, जो अभी चालू है. साथ ही, आपको अपना ReplicaSet दिखेगा, जिसमें पॉड की संख्या एक है. इसके अलावा, आपको अपना पॉड दिखेगा, जो चालू है. ऐसा लगता है कि आपने सब कुछ बना लिया है!

अपने संसाधनों को अलग-अलग देखने के लिए, इन कमांड का इस्तेमाल किया जा सकता है:

# Show pods
kubectl get pods

# Show deployments
kubectl get deployments

# Show replica sets
kubectl get rs

#You can also combine them
kubectl get pods,deployments

Kubernetes का पूरा फ़ायदा पाने के लिए, सर्वर क्रैश होने की स्थिति का सिम्युलेट किया जा सकता है. इसके लिए, पॉड को मिटाएं और देखें कि क्या होता है!

पिछले निर्देश से अपने पॉड का नाम कॉपी करें और उसे मिटाने के लिए, यहां दिया गया निर्देश चलाएं:

kubectl delete pod/<POD_NAME>

अगर आपने तुरंत पिछली कमांड चलाई, तो आपको सभी पॉड फिर से दिखेंगे. आपको दो पॉड दिखेंगे. इनमें से एक पॉड बंद हो रहा होगा और दूसरा पॉड बन रहा होगा या चल रहा होगा:

kubectl get all

आउटपुट:

NAME                            READY   STATUS        RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running       0          4s
pod/monolith-7d8bc7bf68-htm7z   1/1     Terminating   0          9m35s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           24m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       24m

इसका कारण क्या है? ReplicaSet को पता चला कि पॉड बंद हो रहा है. इसलिए, उसने पॉड की तय संख्या को बनाए रखने के लिए, एक नया पॉड ट्रिगर किया. बाद में, आपको यह पता चलेगा कि अपने ऐप्लिकेशन को स्केल कैसे करें, ताकि यह पक्का किया जा सके कि आपके पास कई इंस्टेंस चल रहे हैं. इससे अगर कोई इंस्टेंस बंद हो जाता है, तो आपके उपयोगकर्ताओं को कोई डाउनटाइम नहीं दिखेगा!

7. GKE डिप्लॉयमेंट को सार्वजनिक करना

आपने अपने ऐप्लिकेशन को GKE पर डिप्लॉय किया है, लेकिन आपके पास इसे क्लस्टर के बाहर ऐक्सेस करने का कोई तरीका नहीं है. डिफ़ॉल्ट रूप से, GKE पर चलाए जाने वाले कंटेनर को इंटरनेट से ऐक्सेस नहीं किया जा सकता. इसकी वजह यह है कि उनके पास बाहरी आईपी पते नहीं होते. आपको अपने ऐप्लिकेशन को इंटरनेट से मिलने वाले ट्रैफ़िक के लिए उपलब्ध कराना होगा. इसके लिए, Service संसाधन का इस्तेमाल करें. सेवा, आपके ऐप्लिकेशन के पॉड के लिए नेटवर्किंग और आईपी की सुविधा देती है. GKE, आपके ऐप्लिकेशन के लिए एक बाहरी आईपी पता और लोड बैलेंसर (बिलिंग के हिसाब से) बनाता है.

अपनी वेबसाइट को इंटरनेट पर दिखाने के लिए, यह कमांड चलाएं:

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

आउटपुट:

service/monolith exposed

सेवा को ऐक्सेस करना

GKE, बाहरी आईपी पते को सर्विस रिसॉर्स असाइन करता है, न कि डिप्लॉयमेंट को. अगर आपको वह बाहरी आईपी पता ढूंढना है जो GKE ने आपके ऐप्लिकेशन के लिए उपलब्ध कराया है, तो kubectl get service कमांड का इस्तेमाल करके, सेवा की जांच करें:

kubectl get service

आउटपुट:

NAME         CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
monolith     10.3.251.122    203.0.113.0     80:30877/TCP     3d

अपने ऐप्लिकेशन के लिए बाहरी आईपी पता तय करने के बाद, उसे कॉपी करें. अपने ब्राउज़र में उस यूआरएल (जैसे, http://203.0.113.0) पर जाएं और देखें कि आपका ऐप्लिकेशन ऐक्सेस किया जा सकता है या नहीं.

9ed25c3f0cbe62fa.png

आपको वही वेबसाइट दिखेगी जिसकी आपने पहले जांच की थी! बधाई हो! आपकी वेबसाइट अब पूरी तरह से Kubernetes पर चल रही है!

8. GKE डिप्लॉयमेंट को स्केल करना

अब जब आपने GKE में अपने ऐप्लिकेशन का चालू इंस्टेंस बना लिया है और उसे इंटरनेट पर उपलब्ध करा दिया है, तो आपकी वेबसाइट बहुत लोकप्रिय हो गई है! आपको अपने ऐप्लिकेशन को कई इंस्टेंस पर स्केल करने का तरीका चाहिए, ताकि ट्रैफ़िक को मैनेज किया जा सके. अपने ऐप्लिकेशन को तीन रेप्लिका तक स्केल करने का तरीका जानें.

अपने डिप्लॉयमेंट को तीन रेप्लिका तक बढ़ाने के लिए, यह कमांड चलाएं:

kubectl scale deployment monolith --replicas=3

आउटपुट:

deployment.apps/monolith scaled

बड़े पैमाने पर किए गए डिप्लॉयमेंट की पुष्टि करना

यह पुष्टि करने के लिए कि डिप्लॉयमेंट को सही तरीके से स्केल किया गया है, यह निर्देश चलाएं:

kubectl get all

आउटपुट:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running   0          36m
pod/monolith-7d8bc7bf68-7ds7q   1/1     Running   0          45s
pod/monolith-7d8bc7bf68-c5kxk   1/1     Running   0          45s

NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
service/kubernetes   ClusterIP      10.27.240.1    <none>         443/TCP        25h
service/monolith     LoadBalancer   10.27.253.64   XX.XX.XX.XX   80:32050/TCP   6m7s

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   3         3         3            3           61m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   3         3         3       61m

आपको अपने पॉड के तीन इंस्टेंस चलते हुए दिखने चाहिए. यह भी ध्यान दें कि अब आपके डिप्लॉयमेंट और ReplicaSet में तीन पॉड हैं.

9. वेबसाइट में बदलाव करना

आपकी मार्केटिंग टीम ने आपसे वेबसाइट का होम पेज बदलने के लिए कहा है. उनका मानना है कि इसमें ज़्यादा जानकारी होनी चाहिए. जैसे, आपकी कंपनी क्या है और आप क्या बेचते हैं. इस सेक्शन में, आपको होम पेज पर कुछ टेक्स्ट जोड़ना होगा, ताकि मार्केटिंग टीम खुश हो जाए! ऐसा लगता है कि हमारे किसी डेवलपर ने पहले ही index.js.new नाम की फ़ाइल में बदलाव कर दिए हैं. फ़ाइल को index.js में कॉपी करें. इसके बाद, आपको किए गए बदलाव दिखने चाहिए. ज़रूरी बदलाव करने के लिए, यहां दिए गए निर्देशों का पालन करें.

नीचे दी गई कमांड चलाएं, अपडेट की गई फ़ाइल को सही नाम वाली फ़ाइल में कॉपी करें, और बदलावों की पुष्टि करने के लिए उसके कॉन्टेंट को प्रिंट करें:

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

इससे मिलने वाला कोड कुछ ऐसा दिखना चाहिए:

/*
Copyright 2019 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    width: "800px",
    margin: "0 auto",
    padding: theme.spacing(3, 2)
  }
}));
export default function Home() {
  const classes = useStyles();
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Typography variant="h5">
          Fancy Fashion &amp; Style Online
        </Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
          Start shopping Fancy items now!
        </Typography>
      </Paper>
    </div>
  );
}

आपने React कॉम्पोनेंट अपडेट कर दिए हैं. हालांकि, स्टैटिक फ़ाइलें जनरेट करने के लिए, आपको React ऐप्लिकेशन बनाना होगा. React ऐप्लिकेशन बनाने और उसे मोनोलिथ की सार्वजनिक डायरेक्ट्री में कॉपी करने के लिए, यह कमांड चलाएं:

cd ~/monolith-to-microservices/react-app
npm run build:monolith

कोड अपडेट हो जाने के बाद, आपको Docker कंटेनर को फिर से बनाना होगा और उसे Container Registry में पब्लिश करना होगा. पहले की तरह ही कमांड का इस्तेमाल किया जा सकता है. हालांकि, इस बार आपको वर्शन लेबल अपडेट करना होगा!

अपडेट किए गए इमेज वर्शन 2.0.0 के साथ नया Cloud Build ट्रिगर करने के लिए, यह कमांड चलाएं:

cd ~/monolith-to-microservices/monolith

#Feel free to test your application
npm start

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

वेब सर्वर प्रोसेस को रोकने के लिए, टर्मिनल विंडो में Control+C (Windows या Mac) दबाएं.

अगले सेक्शन में, उस इमेज का इस्तेमाल करके अपने ऐप्लिकेशन को अपडेट करें. इससे ऐप्लिकेशन के बंद होने का समय कम हो जाएगा.

10. बिना किसी रुकावट के वेबसाइट को अपडेट करना

बदलाव पूरे हो गए हैं और मार्केटिंग टीम आपके अपडेट से खुश है! अब वेबसाइट को अपडेट करने का समय आ गया है, ताकि उपयोगकर्ताओं को कोई परेशानी न हो. अपनी वेबसाइट अपडेट करने के लिए, यहां दिए गए निर्देशों का पालन करें.

GKE के रोलिंग अपडेट की मदद से, यह पक्का किया जाता है कि आपका ऐप्लिकेशन अप-टू-डेट रहे और उपलब्ध रहे. ऐसा तब भी होता है, जब सिस्टम आपकी पुरानी कंटेनर इमेज के इंस्टेंस को, चल रही सभी रेप्लिका में आपकी नई कंटेनर इमेज से बदल देता है.

कमांड लाइन से, Kubernetes को यह बताया जा सकता है कि आपको अपने डिप्लॉयमेंट के लिए इमेज को नए वर्शन में अपडेट करना है. इसके लिए, यह कमांड इस्तेमाल करें:

kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

आउटपुट:

deployment.apps/monolith image updated

डिप्लॉयमेंट की पुष्टि करना

नीचे दिए गए कमांड को चलाकर, डिप्लॉयमेंट अपडेट की पुष्टि की जा सकती है:

kubectl get pods

आउटपुट:

NAME                        READY   STATUS              RESTARTS   AGE
monolith-584fbc994b-4hj68   1/1     Terminating         0          60m
monolith-584fbc994b-fpwdw   1/1     Running             0          60m
monolith-584fbc994b-xsk8s   1/1     Terminating         0          60m
monolith-75f4cf58d5-24cq8   1/1     Running             0          3s
monolith-75f4cf58d5-rfj8r   1/1     Running             0          5s
monolith-75f4cf58d5-xm44v   0/1     ContainerCreating   0          1s

आपको तीन नए पॉड बनते हुए दिखते हैं और आपके पुराने पॉड बंद होते हुए दिखते हैं. उम्र के हिसाब से पता लगाया जा सकता है कि कौनसी ऑडियंस नई है और कौनसी पुरानी. इसके बाद, आपको सिर्फ़ तीन पॉड दिखेंगे. ये अपडेट किए गए आपके तीन पॉड होंगे.

अपने बदलावों की पुष्टि करने के लिए, लोड बैलेंसर के बाहरी आईपी पर फिर से जाएं. देखें कि आपका ऐप्लिकेशन अपडेट हो गया है.

अगर आपको आईपी पता याद नहीं है, तो सेवाओं की सूची देखने और आईपी पता देखने के लिए, यह कमांड चलाएं:

kubectl get svc

आपकी वेबसाइट पर, होम पेज कॉम्पोनेंट में जोड़ा गया टेक्स्ट दिखना चाहिए!

8006c9938dbd5aa5.png

11. व्यवस्थित करें

Git डेटा स्टोर करने की जगह मिटाना

cd ~
rm -rf monolith-to-microservices

Container Registry की इमेज मिटाना

ध्यान दें: अगर आपने अन्य वर्शन बनाए हैं, तो उन इमेज को मिटाने के लिए भी इसी सिंटैक्स का इस्तेमाल किया जा सकता है. इस कोडलैब में यह माना गया है कि आपके पास सिर्फ़ दो टैग हैं.

# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

Cloud Storage से Cloud Build आर्टफ़ैक्ट मिटाना

ध्यान दें: अगर आपने इस कोडलैब के अलावा अन्य आर्टफ़ैक्ट के लिए Cloud Build का इस्तेमाल किया है, तो आपको Cloud Storage बकेट gs://<PROJECT_ID>_cloudbuild/source से अपने सोर्स को मैन्युअल तरीके से मिटाना होगा.

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'

gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done

GKE सेवा मिटाना

kubectl delete service monolith
kubectl delete deployment monolith

GKE क्लस्टर मिटाना

gcloud container clusters delete fancy-cluster

ध्यान दें: इस निर्देश को पूरा होने में कुछ समय लग सकता है.

12. बधाई हो!

आपने GKE पर अपनी वेबसाइट को डिप्लॉय, स्केल, और अपडेट किया है. अब आपको Docker और Kubernetes के बारे में जानकारी मिल गई है!

अन्य संसाधन