1. खास जानकारी
मौजूदा ऐप्लिकेशन को फिर से लिखना या उन्हें फिर से इंजीनियर करके Kubernetes पर चलाना, हमेशा मुमकिन नहीं होता. साथ ही, यह काम मैन्युअल तरीके से करना भी आसान नहीं होता. Migrate for Anthos की मदद से, मौजूदा ऐप्लिकेशन को मॉडर्न बनाया जा सकता है और उन्हें Kubernetes पर चलाया जा सकता है. इस कोडलैब में, Compute Engine पर होस्ट किए गए किसी मौजूदा वेब ऐप्लिकेशन को, Migrate for Anthos का इस्तेमाल करके Kubernetes Engine पर माइग्रेट किया जाएगा.
आपको क्या सीखने को मिलेगा
- Kubernetes क्लस्टर पर Migrate for Anthos को डिप्लॉय करने का तरीका
- मौजूदा Compute Engine इंस्टेंस से, स्टेटफ़ुल सेट में कंटेनर बनाने का तरीका
- अपने कंटेनर को Kubernetes पर डिप्लॉय करने और उसे लोड बैलेंसर के साथ कॉन्फ़िगर करने का तरीका
आपको क्या चाहिए
- बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट. अगर आपके पास ऐसा कोई प्रोजेक्ट नहीं है, तो आपको एक प्रोजेक्ट बनाना होगा.
2. सेट अप करना
इस कोडलैब को, Google Cloud Platform पर पूरी तरह से चलाया जा सकता है. इसके लिए, स्थानीय तौर पर कोई इंस्टॉलेशन या कॉन्फ़िगरेशन करने की ज़रूरत नहीं है.
एपीआई चालू करना
शुरू करने से पहले, पक्का करें कि आपके Google Cloud प्रोजेक्ट पर ज़रूरी एपीआई चालू हों:
Compute इंस्टेंस वेब सर्वर बनाना
आइए, एक Compute इंस्टेंस बनाएं. इसका इस्तेमाल, हम अपने शुरुआती 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 से अपने इंस्टेंस में एसएसएच कर सकते हैं. इससे, nginx इंस्टॉल किया जा सकेगा और वेब सर्वर को चालू किया जा सकेगा:
gcloud compute ssh --zone us-central1-a webserver
अपने Compute इंस्टेंस में लॉग इन करने के बाद, 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 के Marketplace पेज पर, कॉन्फ़िगर करें पर क्लिक करें. इसके बाद, अगर आपसे पूछा जाए, तो सूची में से अपना प्रोजेक्ट चुनें. अगले पेज पर, डिफ़ॉल्ट वैल्यू वाली एक फ़ॉर्म दिखेगी. पक्का करें कि चुना गया क्लस्टर वही हो जिसे हमने अभी बनाया है. इसके बाद, डिप्लॉय करें पर क्लिक करें:

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

4. Compute इंस्टेंस से स्टेटफ़ुल सेट पर माइग्रेट करना
हमारे पास Migrate for Anthos चलाने वाला Kubernetes क्लस्टर है. इसलिए, अब हम माइग्रेशन की प्रोसेस शुरू कर सकते हैं. अपने Compute इंस्टेंस को Kubernetes क्लस्टर पर डिप्लॉय करने के लिए, हम अपने Compute Engine इंस्टेंस को बंद कर देंगे, ताकि हम डिस्क के स्नैपशॉट ले सकें. आगे बढ़ने से पहले, इंस्टेंस आईडी नोट करें. हमें इसकी ज़रूरत बाद में पड़ेगी:
gcloud compute instances describe webserver --zone us-central1-a | grep ^id
आइए, अपने Compute इंस्टेंस को शट डाउन करें:
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 चलाने के कुछ मिनटों बाद, स्टेटस में ‘Pods are pending' दिखना सामान्य है. स्टेटस में ‘ठीक है' दिखने के बाद, आगे बढ़ें.
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 की मदद से मॉनिटरिंग करना
मेट्रिक
Kubernetes Engine, मैनेज की जाने वाली Kubernetes सेवा है. इसलिए, इसे Stackdriver की मदद से लॉगिंग और मॉनिटरिंग, दोनों के लिए अपने-आप इंस्ट्रूमेंट किया जाता है. आइए, कुछ ऐसी मेट्रिक देखें जिन्हें Stackdriver हमारे लिए अपने-आप कैप्चर करता है.
प्रॉडक्ट मेन्यू में, मॉनिटरिंग लिंक पर क्लिक करें. अपने प्रोजेक्ट से पहली बार इसे ऐक्सेस करने में कुछ मिनट लग सकते हैं, क्योंकि इस दौरान आपका वर्कस्पेस सेट अप किया जाता है.
लोड होने के बाद, बाईं ओर मौजूद पैनल में, Resources पर कर्सर घुमाएं और मेन्यू से "Kubernetes Engine NEW" चुनें.
यहां दिखाए गए डैशबोर्ड की हर लाइन, Kubernetes संसाधन को दिखाती है. डैशबोर्ड के ऊपर मौजूद लिंक की मदद से, इन्फ़्रास्ट्रक्चर, वर्कलोड या सेवाओं के व्यू के बीच स्विच किया जा सकता है.

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

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

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

क्या आपको आउट-ऑफ़-द-बॉक्स मेट्रिक याद हैं? आइए, कंटेनर के सीपीयू यूटिलाइज़ेशन के लिए एक चार्ट जोड़ें. Chart Title के फ़ील्ड में, ‘CPU Utilization' डालें. ‘Find resource type and metric' के बॉक्स में, request_utilization टाइप करें और फ़िल्टर की गई सूची में से, CPU request utilization चुनें. इस विकल्प को चुनने पर, Resource type और Metric, दोनों फ़ील्ड में जानकारी अपने-आप भर जाएगी.
इसके बाद, हमें अपने project_id (अगर हमारे पास एक से ज़्यादा प्रोजेक्ट हैं) और container_name के हिसाब से फ़िल्टर करना होगा. फ़िल्टर बॉक्स में, project_id टाइप करें. इसके बाद, फ़िल्टर की गई सूची में से इसे चुनें और Value फ़ील्ड में अपना प्रोजेक्ट चुनें. हमें container_name के हिसाब से भी फ़िल्टर करना होगा. फ़िल्टर बॉक्स में, container_name टाइप करें. इसके बाद, फ़िल्टर की गई सूची में से इसे चुनें और Value फ़ील्ड में webserver-statefulset चुनें. सेव करें पर क्लिक करें.
अब हमारे पास एक डैशबोर्ड है, जिसमें हमारा पहला चार्ट मौजूद है.

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

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

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

Create Alert Policy पर क्लिक करें.
आइए, इसे ‘Endpoint Uptime Policy' नाम दें. Configuration सेक्शन में, ‘Condition triggers if' को ‘Any time series violates' पर सेट करें और सेव करें पर क्लिक करें.

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

Add Notification Channel पर क्लिक करें. आखिर में, फ़ॉर्म में सबसे नीचे, नीति को ‘Web App 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
डैशबोर्ड
अपने डैशबोर्ड पेज पर, सबसे ऊपर मौजूद सेटिंग आइकॉन
पर क्लिक करें और डैशबोर्ड मिटाएं को चुनें.
सूचना की नीति
Policies पेज पर, बनाई गई हर नीति के लिए, दाईं ओर मौजूद Actions मेन्यू
से मिटाएं को चुनें.
अपटाइम की जांच
Uptime Checks पेज पर, बनाई गई हर जांच के लिए, दाईं ओर मौजूद Actions मेन्यू से मिटाएं को चुनें.
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 को चालू किया और एक कस्टम डैशबोर्ड बनाया
- हमने अपटाइम की जांच के साथ-साथ, सूचना की नीति को कॉन्फ़िगर किया, ताकि हमें यह पता चल सके कि हमारा वेब सर्वर कब बंद होता है
