Anthos के लिए Migrate के साथ Compute Engine से Kubernetes Engine में माइग्रेट करना

1. खास जानकारी

Kubernetes पर काम करने के लिए मौजूदा ऐप्लिकेशन को फिर से लिखना या उन्हें री-इंजीनियर करना हमेशा संभव नहीं होता या मैन्युअल रूप से करना संभव नहीं होता. Anthos के लिए माइग्रेट करने से, आपको अपने मौजूदा ऐप्लिकेशन को मॉडर्न बनाने और Kubernetes पर उन्हें चलाने में मदद मिल सकती है. इस कोडलैब में, आपको Migrate for Anthos का इस्तेमाल करके, Compute Engine पर होस्ट किए गए मौजूदा वेब ऐप्लिकेशन को Kubernetes Engine पर माइग्रेट करना होगा.

आपको इनके बारे में जानकारी मिलेगी

  • Kubernetes क्लस्टर पर, Migrate for Anthos को डिप्लॉय करने का तरीका
  • किसी मौजूदा Compute Engine इंस्टेंस से, स्टेटफ़ुल सेट में कंटेनर बनाने का तरीका
  • अपने कंटेनर को Kubernetes में कैसे डिप्लॉय करें और उसे लोड बैलेंसर के साथ कॉन्फ़िगर करने का तरीका जानें

आपको इन चीज़ों की ज़रूरत होगी

  • ऐसा Google Cloud प्रोजेक्ट जिसमें बिलिंग सेट अप हो. अगर आपके पास Google खाता नहीं है, तो आपको खाता बनाना होगा.

2. सेट अप करना

यह कोडलैब, Google Cloud Platform पर बिना किसी स्थानीय इंस्टॉलेशन या कॉन्फ़िगरेशन के पूरी तरह से चल सकता है.

एपीआई को चालू करना

शुरू करने से पहले, अपने Google Cloud प्रोजेक्ट के लिए ज़रूरी एपीआई चालू करना न भूलें:

कंप्यूट इंस्टेंस वेब सर्वर बनाना

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

Cloud Shell में ये काम करें:

gcloud compute instances create webserver --zone=us-central1-a && \
gcloud compute firewall-rules create default-allow-http --allow=tcp:80 

इस निर्देश का पहला हिस्सा, us-central1-a ज़ोन में Google Cloud इंस्टेंस बनाएगा, जबकि दूसरा हिस्सा ‘default-allow-http' नाम का फ़ायरवॉल नियम बनाएगा जो हमारे नेटवर्क में http ट्रैफ़िक को अनुमति देगा.

इंस्टेंस बन जाने के बाद, यह इंस्टेंस की जानकारी के साथ एक टेबल दिखाएगा. एक्सटर्नल आईपी को ध्यान में रखें - हमें यह पुष्टि करने के लिए इसकी ज़रूरत होगी कि हमारा वेब सर्वर बाद में काम कर रहा है.

a08aa5bf924b107d.png

इंस्टेंस बनने और चालू होने के बाद, हम Cloud Shell से nginx इंस्टॉल करने और वेब सर्वर शुरू करने के लिए, एसएसएच की सुविधा का इस्तेमाल कर सकते हैं:

gcloud compute ssh --zone us-central1-a webserver

हमारे कंप्यूट इंस्टेंस में लॉग इन करने के बाद, nginx इंस्टॉल करें:

sudo apt install nginx

logout निर्देश का इस्तेमाल करके, एसएसएच सेशन से लॉग आउट करें

हमारे ब्राउज़र में, इंस्टेंस का बाहरी आईपी डालकर पुष्टि करें कि हमारा वेब सर्वर चल रहा है. आपको डिफ़ॉल्ट nginx वेलकम स्क्रीन दिखना चाहिए:

5c08e3b2bd17e03.png

यह वेब सर्वर पुराने वेब ऐप्लिकेशन के तौर पर काम करेगा, जिसे हम Anthos के लिए Migrate का इस्तेमाल करके Kubernetes में माइग्रेट करेंगे.

3. Anthos के लिए Migrate के साथ Kubernetes क्लस्टर

इसके बाद, हम एक GKE (जीकेई) क्लस्टर बनाएंगे, जहां हम कंप्यूट इंजन के वेब सर्वर को माइग्रेट करेंगे. Cloud Console में, इन्हें चलाएं:

gcloud container clusters create my-gke-cluster \
  --zone us-central1-a \
  --cluster-version 1.13 \
  --machine-type n1-standard-4 \
  --image-type "UBUNTU" \
  --num-nodes 1 \
  --enable-stackdriver-kubernetes

इस निर्देश को पूरा होने में कुछ मिनट दें. क्लस्टर बन जाने के बाद, आपको इसकी जानकारी के साथ कुछ आउटपुट मिलेगा:

c69778b8fb8ac72b.png

इसके बाद, Anthos के लिए माइग्रेट करने की सुविधा को डिप्लॉय करने के लिए, GCP मार्केटप्लेस पर जाएं:

45f5753cae53ccb5.png

Migrate for Anthos के मार्केटप्लेस पेज पर, 'कॉन्फ़िगर करें' पर क्लिक करें. इसके बाद, सूची में से अपना प्रोजेक्ट चुनें. आगे बढ़ने के पेज पर एक फ़ॉर्म दिखेगा, जिसमें कुछ डिफ़ॉल्ट वैल्यू डाली गई होंगी. पक्का करें कि चुना गया क्लस्टर हमने अभी-अभी बनाया है और फिर डिप्लॉय करें पर क्लिक करें:

94dc6238b2affd16.png

Anthos के लिए माइग्रेट करने की सुविधा को अब हमारे kubernetes क्लस्टर में डिप्लॉय किया जाना चाहिए. डिप्लॉयमेंट पूरा होने के बाद, आपको 'ठीक है' की स्थिति दिखेगी Kubernetes Engine ऐप्लिकेशन पेज पर:

5bf601103a5335cf.png

4. कंप्यूट इंस्टेंस से लेकर स्टेटफ़ुल सेट तक

हमें Anthos के लिए Migrate चलाने वाला Kubernetes क्लस्टर मिला है, ताकि अब हम माइग्रेशन की प्रक्रिया शुरू कर सकें. हमारे कंप्यूट इंस्टेंस को Kubenetes क्लस्टर में डिप्लॉय करने के लिए, हम अपने कंप्यूट इंजन इंस्टेंस को बंद कर देंगे. इससे हमें डिस्क के स्नैपशॉट लेने में मदद मिलेगी. आगे बढ़ने से पहले, इंस्टेंस आईडी नोट करें, जिसकी हमें बाद में ज़रूरत होगी:

gcloud compute instances describe webserver --zone us-central1-a | grep ^id

अब हम कंप्यूट इंस्टेंस बंद कर देंगे:

gcloud compute instances stop webserver --zone us-central1-a

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

python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \
  -p <project-id>   -i <instance-id> \
  -z us-central1-a \
  -T us-central1-a \
  -A webserver-statefulset \
  -o containerized-webserver.yaml

इन फ़्लैग के साथ, clone_vm_disks.py:

  • पुष्टि करें कि आपका GCE इंस्टेंस बंद है
  • अपने इंस्टेंस की हर डिस्क से स्नैपशॉट बनाएं
  • हर स्नैपशॉट से एक नई डिस्क बनाएं
  • इसके बनाए गए स्नैपशॉट मिटाएं
  • स्टेटफ़ुल सेट को डिप्लॉय करने के लिए, अपनी मौजूदा डायरेक्ट्री में YAML फ़ाइल जनरेट करें. यह सेट आपके वेब सर्वर को होस्ट करेगा

जनरेट की गई yaml फ़ाइल में, हमारे kubernetes क्लस्टर में स्टेटफ़ुल सेट का प्रावधान किया जाएगा. साथ ही, कॉपी की गई डिस्क को हमारे वेब सर्वर कंटेनर पर माउंट करने के लिए वॉल्यूम के स्थायी दावों का भी प्रावधान किया जाएगा. हम इन बदलावों को kubectl के साथ लागू कर सकते हैं:

kubectl apply -f containerized-webserver.yaml

Workloads पेज पर webserver-statefullset की स्थिति देखें:

'पॉड की मंज़ूरी बाकी है' वाला स्टेटस दिखना सामान्य बात है kubectl apply चलाने के बाद कुछ मिनट के लिए. स्थिति के ‘ठीक’ दिखाई देने पर आगे बढ़ें.

5. बैलेंसर लोड करने के लिए क्लस्टर दिखाएं

इस समय, हमारे कुबेनेट्स क्लस्टर को एक स्टेटफ़ुल सेट के रूप में हमारे वेब सर्वर को चलाना होगा, लेकिन हमें बाहरी आईपी पते के ज़रिए हमारे वेबसर्वर को ऐक्सेस करने के लिए इसके कंटेनर को लोड बैलेंसर में भी दिखाना होगा. Cloud Shell में, इस कॉन्टेंट के साथ loadbalancer.yaml नाम की एक नई फ़ाइल बनाएं:

loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: webserver-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: webserver-statefulset
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

अब इसे kubectl के साथ लागू करें:

kubectl apply -f loadbalancer.yaml

हम वेबसर्वर-कंटेनर सेवा का बाहरी आईपी पता पाने के लिए, kubectl का इस्तेमाल कर सकते हैं:

kubectl get services

ब्राउज़र में बाहरी आईपी पता डालने पर, हमें पहले वाली डिफ़ॉल्ट nginx वेलकम स्क्रीन दिखनी चाहिए:

5c08e3b2bd17e03.png

हमने कर लिया! हमारा GCE (जीसीई) वेबसर्वर अब Kubernetes पर होस्ट किया गया है! बढ़िया!

6. स्टैकड्राइवर मॉनिटरिंग

मेट्रिक

मैनेज की जा रही Kubernetes सेवा के तौर पर, Kubernetes Engine, लॉगिंग और निगरानी, दोनों के लिए Stackdriver के लिए अपने-आप इंस्ट्रुमेंट का इस्तेमाल करता है. चलिए, कुछ ऐसी मेट्रिक देखते हैं जिन्हें स्टैकड्राइवर ने अपने-आप कैप्चर किया है.

प्रॉडक्ट मेन्यू में मौजूद 'मॉनिटरिंग' लिंक पर क्लिक करें. अपने प्रोजेक्ट से पहली बार इसे ऐक्सेस करने पर, आपका फ़ाइल फ़ोल्डर सेट अप होने में कुछ मिनट लग सकते हैं.

लोड होने के बाद, बाएं पैनल में 'संसाधन' पर कर्सर घुमाएं और "Kubernetes Engine New" चुनें मेन्यू से.

4e62c8ad3f2b3fe9.png

यहां दिए गए डैशबोर्ड की हर पंक्ति, Kubernetes संसाधन के बारे में बताती है. डैशबोर्ड के ऊपर दिए गए लिंक का इस्तेमाल करके, इन्फ़्रास्ट्रक्चर, वर्कलोड या सेवाओं के व्यू के बीच स्विच किया जा सकता है.

62066a9251d19843.png

Workloads व्यू में, ‘my-gke-cluster' को बड़ा करें और डिफ़ॉल्ट पर जाएं > वेबसर्वर-स्टेटफ़ुलसेट > webserver-statefulset-0 > webserver-statefullset. वेबसर्वर-स्टेटफ़ुल सेट कंटेनर पर क्लिक करें. यहां आपको स्टैकड्राइवर के लिए कैप्चर की जाने वाली कुछ शानदार मेट्रिक दिखेगी. इनमें मेमोरी और सीपीयू के इस्तेमाल की जानकारी भी शामिल है.

d054778de301429e.png

इस डैशबोर्ड में दिखाए गए चार्ट ही कस्टम डैशबोर्ड बनाने में इस्तेमाल किए जा सकते हैं.

कस्टम डैशबोर्ड

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

बाईं ओर मौजूद पैनल में, डैशबोर्ड पर कर्सर घुमाएं. इसके बाद, 'डैशबोर्ड बनाएं' पर क्लिक करें.

56a0513efe60de3e.png

अब हमारा खाली डैशबोर्ड उपलब्ध है, इसलिए हम ऐसी मेट्रिक जोड़ सकते हैं जिन पर हम नज़र रखना चाहते हैं. आइए, अपने बिना टाइटल वाले डैशबोर्ड को ‘मेरा वेब सर्वर कंटेनर’ जैसा एक काम का नाम दें और ‘चार्ट जोड़ें' पर क्लिक करें ऊपर दाईं ओर:

bd66ba91f3125028.png

आउट-ऑफ़-द-आउट मेट्रिक याद हैं? चलिए, कंटेनर सीपीयू के इस्तेमाल के लिए एक चार्ट जोड़ते हैं. चार्ट के टाइटल वाले फ़ील्ड में, 'सीपीयू यूटिलाइज़ेशन' डालें. 'संसाधन टाइप और मेट्रिक ढूंढें' के बॉक्स में, request_utilization टाइप करें और फ़िल्टर की गई सूची में से, CPU अनुरोध के इस्तेमाल को चुनें. इसे चुनने पर, हमारे लिए संसाधन टाइप और मेट्रिक फ़ील्ड, दोनों में जानकारी अपने-आप भर जाएगी.

इसके बाद, हम अपने Project_id (अगर हमारे पास कई प्रोजेक्ट हैं) औरContainer_name के हिसाब से फ़िल्टर करना चाहेंगे. फ़िल्टर बॉक्स में, project_id टाइप करें, उसे फ़िल्टर की गई सूची से चुनें, और वैल्यू फ़ील्ड में अपना प्रोजेक्ट चुनें. हमेंContainer_name के हिसाब से भी फ़िल्टर करना होगा. फ़िल्टर बॉक्स में, container_name टाइप करें और फ़िल्टर की गई सूची से उसे चुनें. इसके बाद, वैल्यू फ़ील्ड में webserver-statefulset को चुनें. 'सेव करें' पर क्लिक करें.

अब हमारे पास अपने पहले चार्ट के साथ एक डैशबोर्ड है.

3d3d45e4357454e0.png

7. अपटाइम चेक और अलर्ट से जुड़ी नीति

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

बाएं पैनल से, अपटाइम चेक और फिर अपटाइम चेक की खास जानकारी चुनें:

49368e5700274cf2.png

जैसा कि Uptime Checks पेज से पता चलता है, चलिए पहली बार अपटाइम चेक सेट अप करते हैं. पेज के सबसे ऊपर दाईं ओर, अपटाइम चेक जोड़ें बटन पर क्लिक करें.

d884560f91011009.png

आगे बढ़ने के फ़ॉर्म में, 'Endpoint Uptime' डालें को भी टाइटल दिया जा सकता है. साथ ही, इसे होस्टनेम के तौर पर, लोड बैलेंसर के बाहरी आईपी पते से भी जोड़ा जा सकता है.

568a8f1e27ae8417.png

सेव करें पर क्लिक करें. इसके बाद, आपको सूचना से जुड़ी नीति बनाने का प्रॉम्प्ट मिलेगा:

f89d53a106a709f4.png

सूचना से जुड़ी नीति बनाएं पर क्लिक करें.

चलिए, इसे 'एंडपॉइंट अपटाइम पॉलिसी' का नाम देते हैं. कॉन्फ़िगरेशन सेक्शन में, 'शर्त ट्रिगर अगर' सेट करें 'किसी टाइम सीरीज़ का उल्लंघन हुआ' से और सेव करें पर क्लिक करें.

74609849348bd03e.png

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

44c474e28a497659.png

सूचना चैनल जोड़ें पर क्लिक करें. आखिर में, फ़ॉर्म में सबसे नीचे, 'वेब ऐप्लिकेशन के सक्रिय समय' नीति का नाम रखें और 'सेव करें' पर क्लिक करें.

यह देखने के लिए कि चेतावनी कैसी दिखेगी, अपने Cloud Console में एक बार फिर से क्लाउड शेल खोलें. नीचे दिया गया निर्देश हमारे वेबसर्वर पॉड में चलने वाली nginx सेवा को बंद कर देगा:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

कुछ मिनट के बाद, आपको आउटेज की सूचना देने वाला एक ईमेल मिलेगा:

808ac1d75ce3681f.png

आइए, इसे पहले जैसा करें. अपने Cloud Shell पर वापस जाएं और nginx को रीस्टार्ट करें:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"

कुछ मिनट बाद , आपको स्टैकड्राइवर के लिए एक और ईमेल मिलेगा. इस बार, आपको पहले से बेहतर जानकारी मिलेगी:

5b8262fbbc4877c.png

8. साफ़-सफ़ाई सेवा

हमने Migrate for Anthos की मदद से, GCE (जीसीई) से GKE (जीकेई) पर माइग्रेट कर लिया है. इसलिए, अब अपने प्रोजेक्ट में सभी संसाधन शामिल करें.

प्रोजेक्ट मिटाना

आपके पास पूरा प्रोजेक्ट मिटाने का विकल्प भी होता है. GCP कंसोल में, Cloud Resource Manager पेज पर जाएं:

प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिस पर हम काम कर रहे हैं और मिटाएं पर क्लिक करें. आपको प्रोजेक्ट आईडी टाइप करने के लिए कहा जाएगा. इसे डालें और शट डाउन करें पर क्लिक करें.

अगर आपको अलग-अलग कॉम्पोनेंट को एक-एक करके मिटाना है, तो अगले सेक्शन पर जाएं.

स्टैकड्राइवर

डैशबोर्ड

अपने डैशबोर्ड पेज पर, सबसे ऊपर मौजूद सेटिंग आइकॉन dc259295eb33cb42.png पर क्लिक करें. इसके बाद, डैशबोर्ड मिटाएं को चुनें.

सूचना से जुड़ी नीति

नीतियां पेज पर जाकर, अपनी बनाई गई हर नीति के लिए, दाईं ओर मौजूद ऐक्शन मेन्यू 2ef75d82e76accaa.png से मिटाएं को चुनें.

अपटाइम चेक

अपटाइम चेक पेज पर जाकर, बनाए गए हर चेक की दाईं ओर मौजूद ऐक्शन मेन्यू से मिटाएं चुनें.

जीसीई और Kubernetes

Google Compute Engine इंस्टेंस

gcloud compute instances delete webserver --zone=us-central1-a

Kubernetes Cluster (इसमें Anthos के लिए Migrate, स्टेटफ़ुल सेट, और लोड बैलेंसर सेवा शामिल है)

gcloud container clusters delete my-gke-cluster --zone=us-central1-a

डिस्क

हमारे स्टेटफ़ुल सेट ने उस डिस्क का इस्तेमाल किया जिसे हमने बनाया था. नाम फिर से पाने के लिए, यह तरीका अपनाएं:

gcloud compute disks list --filter=webserver

मेरी जगह पर आपके डिस्क नाम का इस्तेमाल करके, इसे इस नाम से मिटाएं:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

सभी स्टोरेज खाली किए गए!

9. बधाई हो!

बहुत बढ़िया! आपने Anthos के लिए Migrate का इस्तेमाल करके, अपने वेब सर्वर को GCE (जीसीई) इंस्टेंस से Kubernetes क्लस्टर में माइग्रेट किया है.

इसमें हमने इन विषयों के बारे में बताया

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