1. खास जानकारी
Microsoft .NET Core, .NET का एक ओपन सोर्स और क्रॉस-प्लैटफ़ॉर्म वर्शन है. यह कंटेनर में मूल रूप से चल सकता है. .NET Core, GitHub पर उपलब्ध है. इसे Microsoft और .NET समुदाय मैनेज करते हैं. यह लैब Google Kubernetes Engine (GKE) में कंटेनर वाला .NET Core ऐप्लिकेशन डिप्लॉय करता है.
यह लैब आम तौर पर, डेवलपमेंट के पैटर्न का पालन करता है. इसमें ऐप्लिकेशन को डेवलपर के लोकल एनवायरमेंट में डेवलप किया जाता है और उसके बाद प्रोडक्शन में डिप्लॉय किया जाता है. लैब के पहले हिस्से में, Cloud Shell में चलने वाले कंटेनर का इस्तेमाल करके, .NET कोर ऐप्लिकेशन के उदाहरण की पुष्टि की जाती है. पुष्टि होने के बाद, ऐप्लिकेशन को GKE (जीकेई) का इस्तेमाल करके Kubernetes पर डिप्लॉय किया जाता है. लैब में, GKE (जीकेई) क्लस्टर बनाने के तरीके शामिल होते हैं.
लैब के दूसरे भाग में, ऐप्लिकेशन में मामूली बदलाव किया जाता है, जो उस ऐप्लिकेशन इंस्टेंस को चलाने वाले कंटेनर का होस्टनेम दिखाता है. इसके बाद, अपडेट किए गए ऐप्लेट की पुष्टि क्लाउड शेल में की जाती है और नए वर्शन का इस्तेमाल करने के लिए डिप्लॉयमेंट को अपडेट किया जाता है. नीचे दिए गए उदाहरण में, इस लैब में की गई गतिविधियों का क्रम दिखाया गया है:
लागत
अगर आप इस लैब को ठीक वैसे ही चलाते हैं जैसा कि बताया गया है, तो नीचे दी गई सेवाओं के लिए सामान्य शुल्क लागू होगा
2. सेटअप और ज़रूरी शर्तें
ज़रूरी शर्तें
इस लैब को पूरा करने के लिए, Google Cloud खाता और प्रोजेक्ट होना ज़रूरी है. नया प्रोजेक्ट बनाने के बारे में ज़्यादा जानकारी के लिए, यह कोडलैब देखें.
यह लैब, Cloud Shell में चलने वाले Docker का इस्तेमाल करती है, जो Google Cloud Console के ज़रिए उपलब्ध होता है. यह gcloud और Docker जैसे कई उपयोगी टूल के साथ पहले से कॉन्फ़िगर होता है. क्लाउड शेल को ऐक्सेस करने का तरीका नीचे बताया गया है. सबसे ऊपर दाईं ओर मौजूद Cloud Shell आइकॉन पर क्लिक करके, इसे कंसोल विंडो के सबसे नीचे वाले पैनल में देखें.
GKE (जीकेई) क्लस्टर के लिए, कॉन्फ़िगरेशन के दूसरे विकल्प (ज़रूरी नहीं)
इस लैब के लिए Kubernetes क्लस्टर की ज़रूरत है. अगले सेक्शन में, आसान कॉन्फ़िगरेशन वाला GKE (जीकेई) क्लस्टर बनाया गया है. यह सेक्शन कुछ gcloud
कमांड दिखाता है. ये निर्देश, GKE (जीकेई) का इस्तेमाल करके Kubernetes क्लस्टर बनाते समय, कॉन्फ़िगरेशन के वैकल्पिक विकल्प उपलब्ध कराते हैं. उदाहरण के लिए, नीचे दिए गए निर्देशों का इस्तेमाल करके अलग-अलग तरह की मशीन, ज़ोन, और जीपीयू (ऐक्सेलरेटर) की पहचान की जा सकती है.
- इस निर्देश वाले मशीन टाइप की सूची बनाएं:
gcloud compute machine-types list
- इस निर्देश वाले जीपीयू की सूची बनाएं
gcloud compute accelerator-types list
- इस निर्देश की मदद से, कंप्यूट ज़ोन की सूची बनाएं
gcloud compute zones list
- gcloud के किसी भी निर्देश पर सहायता पाएं
gcloud container clusters --help
- उदाहरण के लिए, इससे kubernetes क्लस्टर
gcloud container clusters create --help
बनाने के बारे में जानकारी मिलती है
- उदाहरण के लिए, इससे kubernetes क्लस्टर
GKE (जीकेई) के लिए कॉन्फ़िगरेशन के विकल्पों की पूरी सूची देखने के लिए, यह दस्तावेज़ देखें
kubernetes क्लस्टर बनाने की तैयारी करें
Cloud Shell में, कुछ एनवायरमेंट वैरिएबल सेट करना और gcloud क्लाइंट कॉन्फ़िगर करना ज़रूरी है. ऐसा करने के लिए, नीचे दिए गए निर्देशों का पालन किया जाता है.
export PROJECT_ID=YOUR_PROJECT_ID
export DEFAULT_ZONE=us-central1-c
gcloud config set project ${PROJECT_ID}
gcloud config set compute/zone ${DEFAULT_ZONE}
GKE (जीकेई) क्लस्टर बनाएं
यह लैब, Kubernetes पर .NET Core ऐप्लिकेशन को डिप्लॉय करती है. इसलिए, क्लस्टर बनाना ज़रूरी है. GKE (जीकेई) का इस्तेमाल करके, Google क्लाउड में नया Kubernetes क्लस्टर बनाने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें.
gcloud container clusters create dotnet-cluster \
--zone ${DEFAULT_ZONE} \
--num-nodes=1 \
--node-locations=${DEFAULT_ZONE},us-central1-b \
--enable-stackdriver-kubernetes \
--machine-type=n1-standard-1 \
--workload-pool=${PROJECT_ID}.svc.id.goog \
--enable-ip-alias
--num-nodes
, हर ज़ोन में जोड़ने के लिए नोड की संख्या है और इसे बाद में बढ़ाया जा सकता है--node-locations
, ज़ोन की एक ऐसी सूची है जिसे कॉमा लगाकर अलग किया गया है. इस मामले में, ऊपर दिए गए एनवायरमेंट वैरिएबल में आपके चुने गए ज़ोन औरus-central1-b
का इस्तेमाल किया जाता है- ध्यान दें: इस सूची में डुप्लीकेट शामिल नहीं हो सकते
--workload-pool
, वर्कलोड आइडेंटिटी सेट करता है, ताकि GKE (जीकेई) वर्कलोड, Google Cloud की सेवाओं को ऐक्सेस कर सकें
जब क्लस्टर तैयार कर रहा होगा, तब ये डिसप्ले दिखाए जाएंगे
Creating cluster dotnet-cluster in us-central1-b... Cluster is being deployed...⠼
kubectl को कॉन्फ़िगर करें
kubectl
सीएलआई, Kubernetes क्लस्टर के साथ इंटरैक्ट करने का मुख्य तरीका है. अभी-अभी बनाए गए नए क्लस्टर के साथ इसका इस्तेमाल करने के लिए, इसे क्लस्टर के हिसाब से प्रमाणित करने के लिए कॉन्फ़िगर करना होगा. यह काम उसके दिए निर्देश की मदद से किया जाता है.
$ gcloud container clusters get-credentials dotnet-cluster --zone ${DEFAULT_ZONE}
Fetching cluster endpoint and auth data.
kubeconfig entry generated for dotnet-cluster.
अब क्लस्टर से इंटरैक्ट करने के लिए kubectl
का इस्तेमाल किया जा सकता है.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-dotnet-cluster-default-pool-02c9dcb9-fgxj Ready <none> 2m15s v1.16.13-gke.401
gke-dotnet-cluster-default-pool-ed09d7b7-xdx9 Ready <none> 2m24s v1.16.13-gke.401
3. डिवाइस पर ऐप्लिकेशन की जांच करें और मनचाहे फ़ंक्शन की पुष्टि करें
यह लैब, Docker हब पर मौजूद आधिकारिक .NET डेटा स्टोर करने की जगह से, इन कंटेनर इमेज का इस्तेमाल करती है.
फ़ंक्शन की पुष्टि करने के लिए, कंटेनर को स्थानीय तौर पर चलाएं
क्लाउड शेल में, पुष्टि करें कि Docker ठीक से काम कर रहा है और ठीक से चल रहा है. साथ ही, पुष्टि करें कि .NET कंटेनर उम्मीद के मुताबिक काम कर रहा है. इसके लिए, यह Docker कमांड चलाएं:
$ docker run --rm mcr.microsoft.com/dotnet/samples
Hello from .NET!
__________________
\
\
....
....'
....
..........
.............'..'..
................'..'.....
.......'..........'..'..'....
........'..........'..'..'.....
.'....'..'..........'..'.......'.
.'..................'... ......
. ......'......... .....
. ......
.. . .. ......
.... . .......
...... ....... ............
................ ......................
........................'................
......................'..'...... .......
.........................'..'..... .......
........ ..'.............'..'.... ..........
..'..'... ...............'....... ..........
...'...... ...... .......... ...... .......
........... ....... ........ ......
....... '...'.'. '.'.'.' ....
....... .....'.. ..'.....
.. .......... ..'........
............ ..............
............. '..............
...........'.. .'.'............
............... .'.'.............
.............'.. ..'..'...........
............... .'..............
......... ..............
.....
Environment:
.NET 5.0.1-servicing.20575.16
Linux 5.4.58-07649-ge120df5deade #1 SMP PREEMPT Wed Aug 26 04:56:33 PDT 2020
वेब ऐप्लिकेशन के काम करने के तरीके की पुष्टि करें
क्लाउड शेल में सैंपल वेब ऐप्लिकेशन की पुष्टि भी की जा सकती है. नीचे दिए गए Docker रन कमांड से एक नया कंटेनर बनता है, जो पोर्ट 80
को दिखाता है और उसे localhost
पोर्ट 8080
पर मैप करता है. याद रखें कि इस मामले में localhost
, क्लाउड शेल में है.
$ docker run -it --rm -p 8080:80 --name aspnetcore_sample mcr.microsoft.com/dotnet/samples:aspnetapp
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {64a3ed06-35f7-4d95-9554-8efd38f8b5d3} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
यह एक वेब ऐप्लिकेशन है. इसलिए, इसे वेब ब्राउज़र पर देखना और इसकी पुष्टि करना ज़रूरी है. अगले सेक्शन में, Web Preview का इस्तेमाल करके क्लाउड शेल में ऐसा करने का तरीका बताया गया है.
4. "वेब झलक" का इस्तेमाल करके, Cloud शेल से सेवाएं ऐक्सेस करना
Cloud Shell, वेब झलक की सुविधा देता है. इस सुविधा की मदद से ब्राउज़र का इस्तेमाल करके, क्लाउड शेल इंस्टेंस में चल रही प्रोसेस से इंटरैक्ट किया जा सकता है.
"वेब झलक" का इस्तेमाल करना Cloud Shell में ऐप्लिकेशन देखने के लिए
Cloud Shell में, वेब झलक बटन पर क्लिक करें और "पोर्ट 8080 पर झलक देखें" चुनें (या कोई भी पोर्ट वेब झलक इस्तेमाल करने के लिए सेट किया गया हो).
इससे एक ब्राउज़र विंडो इस तरह के पते के साथ खुलेगी:
https://8080-cs-754738286554-default.us-central1.cloudshell.dev/?authuser=0
वेब झलक का इस्तेमाल करके .NET सैंपल ऐप्लिकेशन देखें
आखिरी चरण में शुरू किए गए सैंपल ऐप्लिकेशन को, अब वेब झलक (वेब झलक) शुरू करके और दिया गया यूआरएल लोड करके देखा जा सकता है. यह कुछ ऐसी नज़र आनी चाहिए:
5. Kubernetes में डिप्लॉय करें
YAML फ़ाइल बनाएं और उसका इस्तेमाल करें
अगले चरण में, दो Kubernetes संसाधनों, डिप्लॉयमेंट और सेवा के बारे में बताने वाली YAML फ़ाइल की ज़रूरत होगी. क्लाउड शेल में dotnet-app.yaml
नाम की फ़ाइल बनाएं और उसमें नीचे दिया गया कॉन्टेंट जोड़ें.
apiVersion: apps/v1
kind: Deployment
metadata:
name: dotnet-deployment
labels:
app: dotnetapp
spec:
replicas: 3
selector:
matchLabels:
app: dotnetapp
template:
metadata:
labels:
app: dotnetapp
spec:
containers:
- name: dotnet
image: mcr.microsoft.com/dotnet/samples:aspnetapp
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: dotnet-service
spec:
selector:
app: dotnetapp
ports:
- protocol: TCP
port: 8080
targetPort: 80
अब इस फ़ाइल को kubernetes पर लागू करने के लिए, kubectl
का इस्तेमाल करें.
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment created
service/dotnet-service created
उन मैसेज पर ध्यान दें जो यह बताते हैं कि ज़रूरी संसाधन बनाए गए हैं.
इससे जुड़े संसाधनों को एक्सप्लोर करें
हम ऊपर बनाए गए संसाधनों की जांच करने के लिए, kubectl
सीएलआई का इस्तेमाल कर सकते हैं. सबसे पहले, डिप्लॉयमेंट संसाधनों को देखते हैं और पुष्टि करते हैं कि नया डिप्लॉयमेंट मौजूद है.
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
dotnet-deployment 3/3 3 3 80s
आगे ReplicaSets पर नज़र डालें. ऊपर दिए गए डिप्लॉयमेंट से एक ReplicaSet बनाया जाना चाहिए.
$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
dotnet-deployment-5c9d4cc4b9 3 3 3 111s
आखिर में, पॉड पर नज़र डालें. डिप्लॉयमेंट ने बताया कि इस तरह के तीन इवेंट होने चाहिए. नीचे दिए गए कमांड से यह पता चलना चाहिए कि इस तरह के तीन उदाहरण हैं. -o wide
विकल्प जोड़ा जाता है, ताकि जिन नोड पर ये इंस्टेंस चल रहे हैं वे दिखाए जा सकें.
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dotnet-deployment-5c9d4cc4b9-cspqd 1/1 Running 0 2m25s 10.16.0.8 gke-dotnet-cluster-default-pool-ed09d7b7-xdx9 <none> <none>
dotnet-deployment-5c9d4cc4b9-httw6 1/1 Running 0 2m25s 10.16.1.7 gke-dotnet-cluster-default-pool-02c9dcb9-fgxj <none> <none>
dotnet-deployment-5c9d4cc4b9-vvdln 1/1 Running 0 2m25s 10.16.0.7 gke-dotnet-cluster-default-pool-ed09d7b7-xdx9 <none> <none>
सेवा से जुड़े संसाधन देखें
Kubernetes में सेवा संसाधन, एक लोड बैलेंसर है. एंडपॉइंट को पॉड पर लेबल के हिसाब से तय किया जाता है. इस तरह, जैसे ही ऊपर बताई गई kubectl scale deployment
कार्रवाई के ज़रिए डिप्लॉयमेंट में नए पॉड जोड़े जाते हैं, नतीजे देने वाले पॉड, सेवा से मैनेज किए जा रहे अनुरोधों के लिए तुरंत उपलब्ध हो जाते हैं.
इस निर्देश में सेवा से जुड़ा संसाधन दिखना चाहिए.
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dotnet-service ClusterIP 10.20.9.124 <none> 8080/TCP 2m50s
...
नीचे दिए गए निर्देश की मदद से, सेवा के बारे में ज़्यादा जानकारी देखी जा सकती है.
$ kubectl describe svc dotnet-service
Name: dotnet-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=dotnetapp
Type: ClusterIP
IP: 10.20.9.124
Port: <unset> 8080/TCP
TargetPort: 80/TCP
Endpoints: 10.16.0.7:80,10.16.0.8:80,10.16.1.7:80
Session Affinity: None
Events: <none>
ध्यान दें कि सेवा ClusterIP
प्रकार की है. इसका मतलब है कि क्लस्टर में मौजूद कोई भी Pod, सेवा के नाम dotnet-service
को उसके आईपी पते के साथ इस्तेमाल कर सकता है. सेवा को भेजे गए अनुरोध, सभी इंस्टेंस (पॉड) में संतुलित तरीके से लोड होंगे. ऊपर दी गई Endpoints
वैल्यू, इस सेवा के लिए उपलब्ध पॉड के आईपी दिखाती है. इनकी तुलना, ऊपर दिए गए पॉड के आईपी पते से करें.
मौजूदा ऐप्लिकेशन की पुष्टि करें
इस समय ऐप्लिकेशन लाइव है और उपयोगकर्ता के अनुरोधों के लिए तैयार है. इसे ऐक्सेस करने के लिए, प्रॉक्सी का इस्तेमाल करें. नीचे दिया गया निर्देश एक लोकल प्रॉक्सी बनाता है, जो 8080
पोर्ट पर किए गए अनुरोधों को स्वीकार करता है और उन्हें kubernetes क्लस्टर में भेजता है.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
अब वेब ऐप्लिकेशन को ऐक्सेस करने के लिए, Cloud Shell में Web Preview का इस्तेमाल करें.
वेब झलक से जनरेट किए गए यूआरएल में यह जोड़ें: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/
. यह कुछ ऐसा दिखेगा:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
Google Kubernetes Engine पर .NET Core ऐप्लिकेशन डिप्लॉय करने पर बधाई. इसके बाद, हम ऐप्लिकेशन में बदलाव करेंगे और फिर से डिप्लॉय करेंगे.
6. ऐप्लिकेशन में बदलाव करना
इस सेक्शन में, ऐप्लिकेशन में बदलाव करके उस होस्ट को दिखाया जाएगा जिस पर इंस्टेंस चल रहा है. इससे यह पुष्टि की जा सकेगी कि लोड बैलेंसिंग सही तरीके से काम कर रही है और उपलब्ध पॉड उम्मीद के मुताबिक काम कर रहे हैं.
सोर्स कोड पाना
git clone https://github.com/dotnet/dotnet-docker.git
cd dotnet-docker/samples/aspnetapp/
होस्ट का नाम शामिल करने के लिए, ऐप्लिकेशन अपडेट करें
vi aspnetapp/Pages/Index.cshtml
<tr>
<td>Host</td>
<td>@Environment.MachineName</td>
</tr>
कंटेनर की नई इमेज बनाएं और स्थानीय तौर पर टेस्ट करें
अपडेट किए गए कोड के साथ नई कंटेनर इमेज बनाएं.
docker build --pull -t aspnetapp:alpine -f Dockerfile.alpine-x64 .
पहले की तरह ही, नए ऐप्लिकेशन को स्थानीय तौर पर टेस्ट करें
$ docker run --rm -it -p 8080:80 aspnetapp:alpine
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {f71feb13-8eae-4552-b4f2-654435fff7f8} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
पहले की तरह ही, इस ऐप्लिकेशन को वेब प्रीव्यू का इस्तेमाल करके ऐक्सेस किया जा सकता है. इस बार, होस्ट पैरामीटर दिखना चाहिए, जैसा कि यहां दिखाया गया है:
क्लाउड शेल में एक नया टैब खोलें. इसके बाद, docker ps
चलाकर देखें कि कंटेनर आईडी, ऊपर दिखाई गई 'होस्ट' वैल्यू से मेल खाता है या नहीं.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab85ce11aecd aspnetapp:alpine "./aspnetapp" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp relaxed_northcutt
इमेज को टैग करें और पुश करें, ताकि वह Kubernetes पर उपलब्ध हो
इमेज को टैग करने और पुश करने की ज़रूरत होती है, ताकि Kubernetes उसे खींच सके. सबसे पहले कंटेनर इमेज की सूची बनाएं और अपनी पसंद की इमेज की पहचान करें.
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetapp alpine 95b4267bb6d0 6 days ago 110MB
इसके बाद, उस इमेज को टैग करें और उसे Google कंटेनर रजिस्ट्री में भेजें. ऊपर दिए गए इमेज आईडी का इस्तेमाल करने पर, यह ऐसा दिखेगा
docker tag 95b4267bb6d0 gcr.io/${PROJECT_ID}/aspnetapp:alpine
docker push gcr.io/${PROJECT_ID}/aspnetapp:alpine
7. अपडेट किए गए ऐप्लिकेशन को फिर से डिप्लॉय करें
YAML फ़ाइल में बदलाव करें
उस डायरेक्ट्री में वापस जाएं जहां dotnet-app.yaml
फ़ाइल सेव की गई है. YAML फ़ाइल में यह लाइन ढूंढें
image: mcr.microsoft.com/dotnet/core/samples:aspnetapp
इसे उस कंटेनर इमेज का रेफ़रंस देने के लिए बदलना होगा जिसे ऊपर gcr.io में बनाया गया था और पुश किया गया था.
image: gcr.io/PROJECT_ID/aspnetapp:alpine
PROJECT_ID
का इस्तेमाल करने के लिए, इसमें बदलाव करना न भूलें. जब आप पूरा कर लेंगे, तो यह कुछ ऐसा दिखाई देगा
image: gcr.io/myproject/aspnetapp:alpine
अपडेट की गई YAML फ़ाइल को लागू करें
$ kubectl apply -f dotnet-app.yaml
deployment.apps/dotnet-deployment configured
service/dotnet-service unchanged
ध्यान दें कि डिप्लॉयमेंट संसाधन पर अपडेट किया गया डेटा दिखता है और सेवा संसाधन में कोई बदलाव नहीं होता. अपडेट किए गए पॉड को kubectl get pod
निर्देश के साथ पहले की तरह देखा जा सकता है. हालांकि, इस बार हम -w
को जोड़ देंगे, जो सभी बदलावों को होते ही देखेंगे.
$ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
dotnet-deployment-5c9d4cc4b9-cspqd 1/1 Running 0 34m
dotnet-deployment-5c9d4cc4b9-httw6 1/1 Running 0 34m
dotnet-deployment-5c9d4cc4b9-vvdln 1/1 Running 0 34m
dotnet-deployment-85f6446977-tmbdq 0/1 ContainerCreating 0 4s
dotnet-deployment-85f6446977-tmbdq 1/1 Running 0 5s
dotnet-deployment-5c9d4cc4b9-vvdln 1/1 Terminating 0 34m
dotnet-deployment-85f6446977-lcc58 0/1 Pending 0 0s
dotnet-deployment-85f6446977-lcc58 0/1 Pending 0 0s
dotnet-deployment-85f6446977-lcc58 0/1 ContainerCreating 0 0s
dotnet-deployment-5c9d4cc4b9-vvdln 0/1 Terminating 0 34m
dotnet-deployment-85f6446977-lcc58 1/1 Running 0 6s
dotnet-deployment-5c9d4cc4b9-cspqd 1/1 Terminating 0 34m
dotnet-deployment-85f6446977-hw24v 0/1 Pending 0 0s
dotnet-deployment-85f6446977-hw24v 0/1 Pending 0 0s
dotnet-deployment-5c9d4cc4b9-cspqd 0/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-vvdln 0/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-vvdln 0/1 Terminating 0 34m
dotnet-deployment-85f6446977-hw24v 0/1 Pending 0 2s
dotnet-deployment-85f6446977-hw24v 0/1 ContainerCreating 0 2s
dotnet-deployment-5c9d4cc4b9-cspqd 0/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-cspqd 0/1 Terminating 0 34m
dotnet-deployment-85f6446977-hw24v 1/1 Running 0 3s
dotnet-deployment-5c9d4cc4b9-httw6 1/1 Terminating 0 34m
dotnet-deployment-5c9d4cc4b9-httw6 0/1 Terminating 0 34m
ऊपर दिया गया आउटपुट, रोलिंग अपडेट को उसी तरह दिखाता है जैसे वह होता है. सबसे पहले, नए कंटेनर शुरू किए जाते हैं. जब वे चल रहे होते हैं, तो पुराने कंटेनर खत्म कर दिए जाते हैं.
मौजूदा ऐप्लिकेशन की पुष्टि करें
इस समय ऐप्लिकेशन अपडेट हो गया है और उपयोगकर्ता के अनुरोधों के लिए तैयार है. पहले की तरह ही, इसे प्रॉक्सी का इस्तेमाल करके ऐक्सेस किया जा सकता है.
$ kubectl proxy --port 8080
Starting to serve on 127.0.0.1:8080
अब वेब ऐप्लिकेशन को ऐक्सेस करने के लिए, Cloud Shell में Web Preview का इस्तेमाल करें.
वेब झलक से जनरेट किए गए यूआरएल में यह जोड़ें: /api/v1/namespaces/default/services/dotnet-service:8080/proxy/
. यह कुछ ऐसा दिखेगा:
https://8080-cs-473655782854-default.us-central1.cloudshell.dev/api/v1/namespaces/default/services/dotnet-service:8080/proxy/
पुष्टि करें कि Kubernetes सेवा, लोड डिस्ट्रिब्यूट कर रही है
इस यूआरएल को कई बार रीफ़्रेश करें. साथ ही, ध्यान दें कि होस्ट की सेटिंग बदल जाती है, क्योंकि सेवा के अलग-अलग पॉड के लिए अनुरोध, लोड होते रहते हैं. होस्ट वैल्यू की तुलना, ऊपर दिए गए पॉड की सूची से करें. इससे यह पता चलेगा कि सभी पॉड को ट्रैफ़िक मिल रहा है.
इंस्टेंस बढ़ाएं
Kubernetes में ऐप्लिकेशन की क्वालिटी को बेहतर बनाना आसान है. फ़ॉलो कमांड, डिप्लॉयमेंट को बड़े पैमाने पर ऐप्लिकेशन के छह इंस्टेंस तक बढ़ाएगा.
$ kubectl scale deployment dotnet-deployment --replicas 6
deployment.apps/dotnet-deployment scaled
नए पॉड और उनकी मौजूदा स्थिति को इस निर्देश की मदद से देखा जा सकता है
kubectl get pod -w
ध्यान दें कि ब्राउज़र की एक ही विंडो को रीफ़्रेश करने से पता चलता है कि अब सभी नए पॉड के लिए ट्रैफ़िक को संतुलित किया जा रहा है.
8. बधाई हो!
इस लैब में, डेवलपर एनवायरमेंट में .NET Core के सैंपल वेब ऐप्लिकेशन की पुष्टि की गई और बाद में उसे GKE का इस्तेमाल करके, Kubernetes पर डिप्लॉय कर दिया गया. इसके बाद, ऐप्लिकेशन में बदलाव करके उस कंटेनर का होस्टनेम दिखाया गया जिसमें वह चल रहा था. इसके बाद, Kubernetes डिप्लॉयमेंट को नए वर्शन पर अपडेट किया गया है. साथ ही, ऐप्लिकेशन का साइज़ बढ़ाया गया है, ताकि यह दिखाया जा सके कि अन्य इंस्टेंस में लोड कैसे बांटा जाता है.
.NET और Kubernetes के बारे में ज़्यादा जानने के लिए, ये ट्यूटोरियल देखें. बेहतर रूटिंग और लचीलेपन के पैटर्न के लिए Istio Service Mesh टूल की मदद से, इस लैब में सीखी गई चीज़ों को बेहतर बनाया गया है.
9. व्यवस्थित करें
अनचाहे शुल्क से बचने के लिए, इस लैब में बनाए गए क्लस्टर और कंटेनर इमेज को मिटाने के लिए, इन निर्देशों का इस्तेमाल करें.
gcloud container clusters delete dotnet-cluster --zone ${DEFAULT_ZONE}
gcloud container images delete gcr.io/${PROJECT_ID}/aspnetapp:alpine