1. खास जानकारी
लैब के पहले हिस्से में, आपने एक ASP.NET Core ऐप्लिकेशन बनाया है. इस ऐप्लिकेशन को कंटेनर बनाया गया है और उसे Google Kubernetes Engine (GKE) में डिप्लॉय किया है. साथ ही, उसके ट्रैफ़िक को Istio से मैनेज करने के लिए कॉन्फ़िगर किया है.
लैब के दूसरे हिस्से में यह माना जाता है कि आपके पास पहले से ही आपका Kubernetes क्लस्टर है और इसका इस्तेमाल पहली लैब के ज़रिए चल रहा है. आपको पता चलेगा कि कोड में कम से कम बदलाव करके, Istio आपकी सेवाओं को कैसे मैनेज कर सकता है, उनकी निगरानी कर सकता है, और उन्हें सुरक्षित कर सकता है. खास तौर पर, Istio की कई सुविधाओं के बारे में जाना जा सकता है. जैसे, मेट्रिक, ट्रेसिंग, सर्विस विज़ुअलाइज़ेशन, डाइनैमिक ट्रैफ़िक मैनेजमेंट, गड़बड़ी इंजेक्शन वगैरह.
आप इन चीज़ों के बारे में जानेंगे
- प्रोमेथस की मदद से मेट्रिक के बारे में क्वेरी करने का तरीका.
- Grafana की मदद से मेट्रिक को विज़ुअलाइज़ करने का तरीका.
- अपनी सेवा का नया वर्शन बनाने का तरीका.
- किसी सेवा को किसी खास वर्शन पर पिन करने का तरीका.
- अलग-अलग वर्शन के बीच ट्रैफ़िक को बांटने का तरीका.
- सर्विस कॉल में गड़बड़ियों को लाने का तरीका.
आपको इनकी ज़रूरत होगी
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Google Cloud Platform के साथ अपने अनुभव को कैसे रेटिंग दें?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)
प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID
के तौर पर दिखाया जाएगा.
- इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.
इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300USD डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से, कहीं से भी इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा सकता है. यह कमांड लाइन एनवायरमेंट है जो Google Cloud में काम करता है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहले कभी नहीं किया है, तो आपको इसके बारे में जानकारी देने वाली एक इंटरमीडिएट स्क्रीन (पेज के फ़ोल्ड के नीचे) दिखेगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें (यह आपको फिर कभी नहीं दिखेगा). एक बार इस्तेमाल होने वाली स्क्रीन कुछ इस तरह दिखती है:
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस को बेहतर बनाता है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम बस किसी ब्राउज़र या आपके Chromebook से किया जा सकता है.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है.
- यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list
कमांड आउटपुट
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
कमांड आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:
gcloud config set project <PROJECT_ID>
कमांड आउटपुट
Updated property [core/project].
3. ऐप्लिकेशन की जांच करें
लैब शुरू करने से पहले, पक्का करें कि यह ऐप्लिकेशन अब भी पिछले लैब से काम कर रहा हो. आपको याद दिला दें कि आपको गेटवे का बाहरी आईपी और पोर्ट इस तरह दिखता है, जो EXTERNAL-IP
में दिए गए हैं:
kubectl get svc istio-ingressgateway -n istio-system
ऐप्लिकेशन देखने के लिए, अपना ब्राउज़र खोलें और http://<gatewayurl>
पर जाएं:
अगर आपको ऐप्लिकेशन नहीं दिखता है, तो पिछले लैब पर वापस जाएं. इससे यह पक्का किया जा सकेगा कि आपने सभी चरणों को फ़ॉलो किया है. साथ ही, यह भी पक्का करें कि ऐप्लिकेशन और Istio, दोनों सही तरीके से इंस्टॉल हों और ठीक से चल रहे हों.
इस समय, आपके मन में यह सवाल आ सकता है कि "इस्टियो का क्या फ़ायदा है?". Istio को अपने ऐप्लिकेशन के ट्रैफ़िक को मैनेज करने की अनुमति देने पर, आपको मेट्रिक, ट्रेसिंग, डाइनैमिक ट्रैफ़िक मैनेजमेंट, सर्विस विज़ुअलाइज़ेशन, गड़बड़ी इंजेक्शन वगैरह जैसी सुविधाएं बिना किसी शुल्क के मिलेंगी.
अगले चरण में, मेट्रिक के बारे में जानने से शुरुआत करें.
4. Grafana और Prometheus के साथ मेट्रिक
डिफ़ॉल्ट रूप से, Istio कुछ मेट्रिक जनरेट करता है. इन डिफ़ॉल्ट मेट्रिक के बारे में जानने और उन्हें विज़ुअलाइज़ करने के लिए, ऐड-ऑन का इस्तेमाल किया जा सकता है.
Prometheus
Prometheus एक ओपन सोर्स निगरानी समाधान है. Istio से जनरेट की गई मेट्रिक के बारे में क्वेरी करने के लिए, Prometheus का इस्तेमाल किया जा सकता है. हालांकि, इसके लिए आपको पहले Prometheus ऐड-ऑन इंस्टॉल करना होगा.
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.8/samples/addons/prometheus.yaml
पुष्टि करें कि Prometheus चल रहा है:
kubectl get svc prometheus -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus ClusterIP 10.31.243.62 <none> 9090/TCP 1d
http://<gatewayurl>
पर कुछ बार जाकर या कर्ल निर्देश चलाकर ऐप्लिकेशन में कुछ ट्रैफ़िक भेजें.
Prometheus यूज़र इंटरफ़ेस (यूआई) के लिए पोर्ट फ़ॉरवर्डिंग सेट अप करें:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 8080:9090
अब Cloud Shell में, सबसे ऊपर दाएं कोने में मौजूद Web Preview बटन पर क्लिक करके, किसी क्वेरी को एक्ज़ीक्यूट किया जा सकता है. इसके बाद, पोर्ट 8080 पर झलक देखें पर क्लिक करें:
आपको नए टैब में प्रोमेथस का यूज़र इंटरफ़ेस (यूआई) दिखेगा:
प्रोमेथियस के बारे में ज़्यादा जानने के लिए, प्रोमेथियस से मेट्रिक के बारे में क्वेरी करना लेख पढ़ें.
Grafana
Grafana, मेट्रिक को विज़ुअलाइज़ करने का एक और ऐड-ऑन है.
Grafana इंस्टॉल करें. istio-version
को अपने मौजूदा Istio वर्शन से बदलें. उदाहरण के लिए, 1.0.3-gke.3
:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.8/samples/addons/grafana.yaml
पुष्टि करें कि Grafana चल रहा है:
kubectl get svc grafana -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE grafana ClusterIP 10.31.248.230 <none> 3000/TCP 1d
http://<gatewayurl>
पर कुछ बार जाकर या कर्ल निर्देश चलाकर ऐप्लिकेशन में कुछ ट्रैफ़िक भेजें.
Grafana यूज़र इंटरफ़ेस (यूआई) के लिए पोर्ट फ़ॉरवर्डिंग सेटअप करें:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 8080:3000
आप वेब झलक पर जाकर, Grafana के डैशबोर्ड देख सकते हैं:
ग्रैफ़ाना के बारे में ज़्यादा जानने के लिए, Grefana की मदद से मेट्रिक को विज़ुअलाइज़ करना देखें.
5. ऐप्लिकेशन का नया वर्शन बनाएं
आपने जो ऐप्लिकेशन प्रोडक्शन के लिए डिप्लॉय किए हैं, कभी-कभी आपको गड़बड़ियां ठीक करनी होंगी या कुछ अन्य सुविधाएं इस्तेमाल करनी होंगी. चलिए देखते हैं कि यह प्रोसेस कैसी दिखती है.
सबसे पहले, आइए ऐप्लिकेशन में बदलाव करते हैं. Cloud Shell से कोड एडिटर खोलें.
HelloWorldAspNetCore > Views > Home
में जाकर, Index.cshtml
पर जाएं और किसी एक कैरसेल मैसेज को अपडेट करें.
यह लाइन ढूंढें:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core
और इसे इसमें बदलें:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud
बदलावों को सेव करें. इसके बाद, Cloud Shell पर वापस जाएं. HelloWorldAspNetCore,
के अंदर डॉकर इमेज बनाएं:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 .
और कंटेनर रजिस्ट्री में जाएं:
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
कंटेनर इमेज को पुश करने के बाद, अगले चरण में आप नया वर्शन डिप्लॉय कर सकते हैं.
6. नया डिप्लॉयमेंट बनाएं
नया वर्शन डिप्लॉय करने के लिए, आपको सबसे पहले Kubernetes में इसके लिए एक नया डिप्लॉयमेंट बनाना होगा. aspnetcore.yaml
फ़ाइल के आखिर में यह जोड़ें:
--- apiVersion: apps/v1 kind: Deployment metadata: name: aspnetcore-v2 spec: replicas: 1 selector: matchLabels: app: aspnetcore version: v2 template: metadata: labels: app: aspnetcore version: v2 spec: containers: - name: aspnetcore image: gcr.io/YOUR-PROJECT-ID/hello-dotnet:v2 imagePullPolicy: IfNotPresent ports: - containerPort: 8080
kubectl
के साथ डिफ़ॉल्ट नेमस्पेस पर नया वर्शन डिप्लॉय करें:
kubectl apply -f aspnetcore.yaml
service "aspnetcore" unchanged deployment.extensions "aspnetcore-v1" unchanged deployment.extensions "aspnetcore-v2" created
पुष्टि करें कि सही पॉड चल रहे हैं:
kubectl get pods
NAME READY STATUS RESTARTS AGE aspnetcore-v1-6cf64748-mddb 2/2 Running 0 34s aspnetcore-v2-5d765db-l9xmg 2/2 Running 0 1m
अब, ऐप्लिकेशन को फिर से टेस्ट करें. गेटवे का एक्सटर्नल आईपी पता पाएं:
kubectl get svc istio-ingressgateway -n istio-system
यह EXTERNAL-IP की सूची में मौजूद है. गुप्त ब्राउज़र खोलें और http://<replace-with-external-ip>
पर जाएं
रीफ़्रेश करने पर, कभी-कभी आपको "ASP.NET Core की मदद से वेब ऐप्लिकेशन बनाने के बारे में जानें" मैसेज दिखेगा:
अन्य बार, आपको "Google Cloud पर ASP.NET Core की मदद से वेब ऐप्लिकेशन बनाने के बारे में जानें" मैसेज दिखेगा:
ऐसा इसलिए है, क्योंकि v1
और v2
, दोनों डिप्लॉयमेंट को एक ही Kubernetes सेवा (aspnetcore-service
) के साथ डिप्लॉय किया गया है और पिछली लैब (aspnetcore-virtualservice
) में बनाया गया VirtualService इस सेवा का इस्तेमाल होस्ट के तौर पर करता है.
अगले चरण में, DestinationRule का इस्तेमाल करके, सेवा को v2
डिप्लॉयमेंट में पिन करें.
7. अपनी सेवा को नए वर्शन में पिन करें
इस चरण में, v2
डिप्लॉयमेंट का इस्तेमाल करने के लिए सेवा को पिन किया जाता है और DestinationRule का इस्तेमाल किया जा सकता है. गंतव्य नियम, VirtualService रूटिंग कार्रवाई के बाद अनुरोध पर लागू होने वाली नीतियों के सेट को कॉन्फ़िगर करता है.
गंतव्य नियम, पता लगाए जा सकने वाले सबसेट, जिसका मतलब है, संबंधित गंतव्य होस्ट के नाम वाले वर्शन भी तय करता है. सेवा के खास वर्शन पर ट्रैफ़िक भेजते समय, इन सबसेट का इस्तेमाल VirtualService रूट की खास जानकारी में किया जाता है.
aspnetcore-destinationrule.yaml
नाम की एक नई फ़ाइल बनाएं:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: aspnetcore-destinationrule spec: host: aspnetcore-service trafficPolicy: tls: mode: ISTIO_MUTUAL subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2
इसके बाद, गंतव्य नियम बनाएं. इससे दो सबसेट (v1 और v2) बनते हैं, जिनका इस्तेमाल VirtualService से किया जा सकता है:
kubectl apply -f aspnetcore-destinationrule.yaml
destinationrule.networking.istio.io "aspnetcore-destionationrule" created
अब aspnetcore-virtualservice.yaml
फ़ाइल पर वापस जाएं और v2
के सबसेट का इस्तेमाल करने के लिए, VirtualService को अपडेट करें:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: aspnetcore-virtualservice spec: hosts: - "*" gateways: - aspnetcore-gateway http: - route: - destination: host: aspnetcore-service subset: v2
VirtualService अपडेट करें:
kubectl apply -f aspnetcore-virtualservice.yaml
अपना ब्राउज़र खोलें और http://<replace-with-external-ip>.
पर जाएं. कई बार रीफ़्रेश करने के बाद भी, आपको "Google Cloud पर ASP.NET Core की मदद से वेब ऐप्लिकेशन बनाने के बारे में जानें" मैसेज दिखेगा:
8. अलग-अलग वर्शन के बीच ट्रैफ़िक को बांटना
कभी-कभी, हो सकता है कि आप ट्रैफ़िक को टेस्ट करने के लिए, अलग-अलग वर्शन के बीच बांटना चाहें. उदाहरण के लिए, हो सकता है कि आप v1 को 75% ट्रैफ़िक और सेवा के v2 वर्शन को 25% ट्रैफ़िक भेजना चाहते हों. Istio की मदद से, ऐसा आसानी से किया जा सकता है. अलग-अलग महत्व वाले दो सबसेट का रेफ़रंस देने के लिए, नई aspnetcore-virtualservice-weights.yaml
फ़ाइल बनाएं:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: aspnetcore-virtualservice spec: hosts: - "*" gateways: - aspnetcore-gateway http: - route: - destination: host: aspnetcore-service subset: v1 weight: 75 - destination: host: aspnetcore-service subset: v2 weight: 25
VirtualService अपडेट करें:
kubectl apply -f aspnetcore-virtualservice-weights.yaml
अब, ब्राउज़र को रीफ़्रेश करने पर, आपको v1 बनाम v2 वर्शन दिखेंगे. ये वर्शन करीब 3:1 के अनुपात में दिखाए जाते हैं.
ज़्यादा जानने के लिए, Istio में ट्रैफ़िक का बंटवारा लेख पढ़ें.
9. गड़बड़ियां इंजेक्ट करें
टेस्टिंग के लिए डेवलपमेंट से जुड़ा एक और ज़रूरी काम है, ट्रैफ़िक में गड़बड़ियां या देरी डालना. साथ ही, यह देखना कि सेवाएं इस तरह काम करती हैं या नहीं.
उदाहरण के लिए, हो सकता है कि आप वर्शन 1 वर्शन को 50% ट्रैफ़िक के लिए खराब अनुरोध (HTTP 400) का जवाब देना चाहें. इनका मिलान करने के लिए aspnetcore-virtualservice-fault-abort.yaml
फ़ाइल बनाएं:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: aspnetcore-virtualservice spec: hosts: - "*" gateways: - aspnetcore-gateway http: - fault: abort: percentage: value: 50 httpStatus: 400 route: - destination: host: aspnetcore-service subset: v1
VirtualService अपडेट करें:
kubectl apply -f aspnetcore-virtualservice-fault-abort.yaml
अब, जब आप ब्राउज़र को रीफ़्रेश करते हैं, तो आपको दिखाई देगा कि आधा समय, v1 सेवा एक HTTP 400s रिस्पॉन्स कोड दिखाती है.
इसके अलावा, आपको अनुरोधों में पांच सेकंड की देरी भी करनी पड़ सकती है. इनका मिलान करने के लिए aspnetcore-virtualservice-fault-delay.yaml
फ़ाइल बनाएं:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: aspnetcore-virtualservice spec: hosts: - "*" gateways: - aspnetcore-gateway http: - fault: delay: fixedDelay: 5s percentage: value: 100 route: - destination: host: aspnetcore-service subset: v1
VirtualService अपडेट करें:
kubectl apply -f aspnetcore-virtualservice-fault-delay.yaml
अब, ब्राउज़र को रीफ़्रेश करने पर, आपको दिखेगा कि अनुरोधों में 5 सेकंड की देरी है.
Istio की सुविधाओं के बारे में ज़्यादा जानने के लिए, ट्रैफ़िक मैनेजमेंट की सुविधाएं देखें. जैसे, टाइम आउट, बार-बार कोशिश, कंडिशनल रूल, सर्किट ब्रेकर वगैरह.
10. बधाई हो!
उम्मीद है कि इस लैब से आपको इस बारे में खास जानकारी मिलेगी कि Istio आपकी सेवाओं के लिए किस तरह से मदद कर सकता है. Istio और GKE (जीकेई) के बारे में ज़्यादा जानने के लिए.
अगले चरण
- Istio के बारे में ज़्यादा जानें.
- Kubernetes के बारे में ज़्यादा जानें.
- Google Kubernetes Engine के बारे में ज़्यादा जानें.
- Google Cloud Platform पर.NET के बारे में ज़्यादा जानें.
लाइसेंस
इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.
11. साफ़-सफ़ाई सेवा
आपके पास ऐप्लिकेशन को मिटाने और Istio को अनइंस्टॉल करने का विकल्प है. इसके अलावा, आपके पास Kubernetes क्लस्टर को मिटाने का विकल्प भी है.
ऐप्लिकेशन मिटाना
ऐप्लिकेशन मिटाने के लिए:
kubectl delete -f aspnetcore-gateway.yaml kubectl delete -f aspnetcore-virtualservice.yaml kubectl delete -f aspnetcore-destinationrule.yaml kubectl delete -f aspnetcore.yaml
इस बात की पुष्टि करने के लिए कि ऐप्लिकेशन उपलब्ध नहीं है:
kubectl get gateway kubectl get virtualservices kubectl get destinationrule kubectl get pods
istio को अनइंस्टॉल करें
Istio को मिटाने के लिए:
kubectl delete -f install/kubernetes/istio-demo-auth.yaml
Istio की सेवा खत्म होने की पुष्टि करने के लिए:
kubectl get pods -n istio-system
Kubernetes क्लस्टर मिटाना
gcloud container clusters delete hello-dotnet-cluster