1. खास जानकारी
मौजूदा ऐप्लिकेशन को Kubernetes पर काम करने के लिए फिर से लिखना या फिर से बनाना हमेशा संभव नहीं होता. साथ ही, इसे मैन्युअल तरीके से करना भी आसान नहीं होता. Migrate for Anthos की मदद से, अपने मौजूदा ऐप्लिकेशन को मॉडर्न बनाया जा सकता है. साथ ही, उन्हें Kubernetes में चलाया जा सकता है. इस कोडलैब में, Compute Engine पर होस्ट किए गए किसी मौजूदा वेब ऐप्लिकेशन को Migrate for Anthos का इस्तेमाल करके, 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' नाम का फ़ायरवॉल नियम बनाएगा. इससे हमारे नेटवर्क में एचटीटीपी ट्रैफ़िक की अनुमति मिलेगी.
इंस्टेंस बन जाने के बाद, आपको एक टेबल दिखेगी. इसमें इंस्टेंस की जानकारी होगी. बाहरी आईपी को नोट कर लें. हमें इसकी ज़रूरत बाद में यह पुष्टि करने के लिए होगी कि हमारा वेब सर्वर काम कर रहा है.

इंस्टेंस चालू होने के बाद, Cloud Shell से अपने इंस्टेंस में SSH किया जा सकता है. इसके बाद, nginx को इंस्टॉल करके वेब सर्वर को चालू किया जा सकता है:
gcloud compute ssh --zone us-central1-a webserver
हमारे कंप्यूट इंस्टेंस में लॉग इन करने के बाद, nginx इंस्टॉल करें:
sudo apt install nginx
logout कमांड का इस्तेमाल करके, एसएसएच सेशन से लॉग आउट करें
आइए, पुष्टि करें कि हमारा वेब सर्वर चल रहा है. इसके लिए, ब्राउज़र में पहले से मौजूद इंस्टेंस का बाहरी आईपी डालें. आपको nginx की डिफ़ॉल्ट वेलकम स्क्रीन दिखनी चाहिए:

यह वेब सर्वर, लेगसी वेब ऐप्लिकेशन के तौर पर काम करेगा. इसे Migrate for Anthos का इस्तेमाल करके, Kubernetes पर माइग्रेट किया जाएगा.
3. Migrate for Anthos के साथ Kubernetes क्लस्टर
इसके बाद, हम एक GKE क्लस्टर बनाएंगे. Compute Engine वेब सर्वर को इसी क्लस्टर पर माइग्रेट किया जाएगा. 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
इस कमांड को पूरा होने में कुछ मिनट लगेंगे. क्लस्टर बन जाने के बाद, आपको इसकी जानकारी के साथ कुछ आउटपुट मिलेगा:

इसके बाद, Migrate for Anthos को डिप्लॉय करने के लिए, GCP Marketplace पर जाएं:

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

Migrate for Anthos को अब हमारे Kubernetes क्लस्टर पर डिप्लॉय किया जाना चाहिए. डिप्लॉय होने के बाद, आपको Kubernetes Engine ऐप्लिकेशन पेज पर ‘ठीक है' स्टेटस दिखेगा:

4. कंप्यूट इंस्टेंस से लेकर स्टेटफ़ुल सेट तक
हमारे पास Migrate for Anthos चलाने वाला Kubernetes क्लस्टर है. इसलिए, अब हम माइग्रेशन की प्रोसेस शुरू कर सकते हैं. अपने Compute Engine इंस्टेंस को Kubernetes क्लस्टर में डिप्लॉय करने के लिए, हम अपने Compute Engine इंस्टेंस को बंद कर देंगे, ताकि हम डिस्क के स्नैपशॉट ले सकें. आगे बढ़ने से पहले, उदाहरण आईडी नोट कर लें. इसकी ज़रूरत हमें बाद में पड़ेगी:
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-statefulset का स्टेटस देखें:
kubectl apply चलाने के बाद, कुछ मिनटों तक स्थिति ‘पॉड प्रोसेस होने के लिए बाकी हैं' दिखना सामान्य है. जब स्टेटस ‘ठीक है' हो जाए, तब आगे बढ़ें.
5. लोड बैलेंसर के लिए क्लस्टर को ऐक्सेस करने की अनुमति देना
इस समय, हमारे Kubernetes क्लस्टर को हमारे वेब सर्वर को स्टेटफ़ुल सेट के तौर पर चलाना चाहिए. हालांकि, हमें इसके कंटेनर को लोड बैलेंसर के तौर पर भी दिखाना होगा, ताकि बाहरी आईपी पते के ज़रिए हमारे वेब सर्वर को ऐक्सेस किया जा सके. 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
हम webserver-container सेवा का बाहरी आईपी पता पाने के लिए, kubectl का इस्तेमाल कर सकते हैं:
kubectl get services
अगर हम अपने ब्राउज़र में बाहरी आईपी पता डालते हैं, तो हमें पहले की तरह ही nginx की डिफ़ॉल्ट वेलकम स्क्रीन दिखनी चाहिए:

हमने कर दिखाया! हमारा GCE वेबसर्वर अब Kubernetes पर होस्ट किया गया है! बढ़िया!
6. Stackdriver Monitoring
मेट्रिक
मैनेज की गई Kubernetes सेवा के तौर पर, Kubernetes Engine को Stackdriver के साथ लॉगिंग और मॉनिटरिंग, दोनों के लिए अपने-आप इंस्ट्रुमेंट किया जाता है. आइए, उन मेट्रिक के बारे में जानते हैं जिन्हें Stackdriver हमारे लिए अपने-आप कैप्चर करता है.
प्रॉडक्ट मेन्यू में जाकर, मॉनिटरिंग लिंक पर क्लिक करें. अपने प्रोजेक्ट से पहली बार इसे ऐक्सेस करने में कुछ मिनट लग सकते हैं, क्योंकि इस दौरान आपका वर्कस्पेस सेट अप किया जाता है.
लोड होने के बाद, बाईं ओर मौजूद पैनल में जाकर, "Kubernetes Engine NEW" चुनें.

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

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

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

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

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

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

अपटाइम की जांच करने वाले पेज पर दिए गए सुझाव के मुताबिक, अपटाइम की पहली जांच सेट अप करते हैं. पेज के सबसे ऊपर दाईं ओर मौजूद, अपटाइम की जांच जोड़ें बटन पर क्लिक करें.
इसके बाद, फ़ॉर्म में ‘Endpoint Uptime' को टाइटल के तौर पर डालें. साथ ही, अपने लोड बैलेंसर के बाहरी आईपी पते को होस्टनेम के तौर पर डालें.

सेव करें पर क्लिक करें. इसके बाद, आपको सूचना देने की नीति बनाने के लिए कहा जाएगा:

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

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

सूचना चैनल जोड़ें पर क्लिक करें. आखिर में, फ़ॉर्म में सबसे नीचे, नीति का नाम ‘वेब ऐप्लिकेशन अपटाइम' डालें और सेव करें पर क्लिक करें.
सूचना कैसी दिखेगी, यह देखने के लिए Cloud Console में जाकर Cloud Shell को फिर से खोलें. यहां दी गई कमांड से, हमारे वेबसर्वर पॉड में चल रही nginx सेवा बंद हो जाएगी:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"
कुछ मिनटों के बाद, आपको एक ईमेल मिलेगा. इसमें आउटेज के बारे में सूचना दी जाएगी:

चलिए, इसे पहले जैसा करते हैं. Cloud Shell में वापस जाकर, nginx को रीस्टार्ट करें:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
कुछ मिनट बाद , आपको Stackdriver से एक और ईमेल मिलेगा. इस बार, इसमें पहले से बेहतर जानकारी होगी:

8. साफ़-सफ़ाई सेवा
हमने Migrate for Anthos की मदद से, GCE से GKE पर माइग्रेट कर लिया है. अब हम अपने प्रोजेक्ट से उन सभी संसाधनों को हटा देते हैं जिन्हें हमने बनाया था.
प्रोजेक्ट मिटाना
अगर आपको ठीक लगे, तो पूरा प्रोजेक्ट मिटाया जा सकता है. GCP Console में, Cloud Resource Manager पेज पर जाएं:
प्रोजेक्ट की सूची में, उस प्रोजेक्ट को चुनें जिस पर हम काम कर रहे थे. इसके बाद, मिटाएं पर क्लिक करें. आपको प्रोजेक्ट आईडी डालने के लिए कहा जाएगा. इसे डालें और बंद करें पर क्लिक करें.
अगर आपको अलग-अलग कॉम्पोनेंट को एक-एक करके मिटाना है, तो अगले सेक्शन पर जाएं.
Stackdriver
डैशबोर्ड
डैशबोर्ड पेज पर, सबसे ऊपर मौजूद सेटिंग आइकॉन
पर क्लिक करें. इसके बाद, डैशबोर्ड मिटाएं को चुनें.
अलर्ट से जुड़ी नीति
नीति वाले पेज पर, बनाई गई हर नीति के लिए, दाईं ओर मौजूद कार्रवाइयां मेन्यू
में जाकर, मिटाएं चुनें.
अपटाइम चेक
अपटाइम की जांच करने वाले पेज पर, बनाई गई हर जांच के दाईं ओर मौजूद 'कार्रवाइयां' मेन्यू से मिटाएं चुनें.
GCE और Kubernetes
Google Compute Engine इंस्टेंस
gcloud compute instances delete webserver --zone=us-central1-a
Kubernetes क्लस्टर (इसमें Migrate for Anthos, स्टेटफ़ुल सेट, और लोड बैलेंसर सेवा शामिल है)
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. बधाई हो!
बहुत खूब! आपने Migrate for Anthos का इस्तेमाल करके, अपने वेब सर्वर को GCE इंस्टेंस से Kubernetes क्लस्टर पर माइग्रेट किया हो.
हमने क्या-क्या बताया
- हमने Migrate for Anthos का इस्तेमाल करके, वेब सर्वर को GCE से Kubernetes क्लस्टर पर माइग्रेट किया
- हमने अपने स्टेटफ़ुल सेट वेब सर्वर को दुनिया के लिए खोल दिया है. इसके लिए, हमने इसे Kubernetes लोड बैलेंसर सेवा के ज़रिए उपलब्ध कराया है.
- हमने Stackdriver को चालू किया और पसंद के मुताबिक डैशबोर्ड बनाया
- हमने अपटाइम की जांच करने के लिए एक कॉन्फ़िगरेशन और सूचना देने वाली नीति सेट अप की है, ताकि हमें पता चल सके कि हमारा वेब सर्वर कब बंद होता है
