Istio সহ Google Kubernetes ইঞ্জিনে ASP.NET কোর অ্যাপ স্থাপন করুন (পর্ব 2)

১. সংক্ষিপ্ত বিবরণ

ল্যাবের প্রথম অংশে , আপনি একটি ASP.NET Core অ্যাপ্লিকেশন তৈরি করেছেন, সেটিকে কন্টেইনারাইজ করে Google Kubernetes Engine (GKE)-তে ডেপ্লয় করেছেন এবং Istio দ্বারা এর ট্র্যাফিক পরিচালনার জন্য কনফিগার করেছেন।

ল্যাবের এই দ্বিতীয় অংশে ধরে নেওয়া হচ্ছে যে, আপনার কুবারনেটিস ক্লাস্টার এবং প্রথম ল্যাবের অ্যাপ্লিকেশনটি ইতিমধ্যেই চালু আছে। আপনি দেখতে পাবেন, কীভাবে Istio খুব সামান্য কোড পরিবর্তনের মাধ্যমে আপনার সার্ভিসগুলোকে পরিচালনা, পর্যবেক্ষণ এবং সুরক্ষিত করতে সাহায্য করতে পারে। বিশেষত, আপনি Istio-এর মেট্রিক্স, ট্রেসিং, সার্ভিস ভিজ্যুয়ালাইজেশন, ডাইনামিক ট্র্যাফিক ম্যানেজমেন্ট, ফল্ট ইনজেকশন এবং আরও অনেক ফিচার সম্পর্কে জানবেন।

আপনি যা শিখবেন

  • প্রমিথিউস দিয়ে কীভাবে মেট্রিক্স কোয়েরি করবেন
  • গ্রাফানার সাহায্যে কীভাবে মেট্রিক্স ভিজ্যুয়ালাইজ করবেন।
  • আপনার পরিষেবার একটি নতুন সংস্করণ কীভাবে তৈরি করবেন।
  • কীভাবে একটি সার্ভিসকে নির্দিষ্ট ভার্সনে পিন করা যায়।
  • বিভিন্ন ভার্সনের মধ্যে ট্র্যাফিক কীভাবে ভাগ করবেন
  • সার্ভিস কলে কীভাবে ত্রুটি অন্তর্ভুক্ত করা যায়

আপনার যা যা লাগবে

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

গুগল ক্লাউড প্ল্যাটফর্মের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা G Suite অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

H_hgylo4zxOllHaAbPKJ7VyqCKPDUnDhkr-BsBIFBsrB6TYSisg6LX-uqmMhh4sXUy_hoa2Qv87C2nFmkg-QAcCiZZp0qtpf6VPaNEEfP_iqt29KVLD-gklBWugQVeOWsFnJmNjHDw

dcCPqfBIwNO4R-0fNQLUC4aYXOOZhKhjUnakFLZJGeziw2ikOxGjGkCHDwN5x5kCbPFB8 fiOzZnX-GfuzQ8Ox-UU15BwHirkVPR_0RJwl0oXrhqZmMIvZMa_uwHugBJIdx5-bZ6Z8Q

jgLzVCxk93d6E2bbonzATKA4jFZReoQ-fORxZZLEi5C3D-ubnv6nL-eP-iyh7qAsWyq_nyzzuEoPFD1wFOFZOe4FWhPBJjUDncnTxTImT3Ts9TM54f4nPpsAp52O0y3Cb19IceAEgQ

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। dnDTxS9j60RcXdTjea12HLB9paS9Gzf7PfFLE9RW8g0Qx1bz7nmCzyCu4rjluX3bOEwavOpDwioXEkzOf6xtZp6-ZbJa08jwJqtmeeW8jZ1tYfi2lyXqvW3WFHP0eAxDkQDfpO9Ljw .

yzBQBp2RC1EFvSSLYVkMA2m6LHqGsp22O81rUS5tGb9Y1FqlVhoRj_ka8V_uEjtpcirZRULMy1IjNr848uYvb9mC9RcGGqayaLcXFfRwUGeXWChZPtWkHzUshTcqx_wJHis0X8viA

আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:

VgsaqGbKPRiqK24CqAKjSXjepuJT96PmiDqQMcySmWKx8QyW5F3G2D8JH2d08ek-YM77wWKxPvggpOFER8Hbq3aaZipTDU2o0il7A0kS3FXY_Nzudqmgtqdqmgtqmg

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

7RuYr-LCKzdiE1veTFmL_lYrVxsMZ6-xDoxAnfwPPc5uFA0utmFGejvu81jGmTdbqnqxrytW3KcHT6xrMIRc3bskctnDZC5nJdpqw-LRxu3r35hL4A0BSBTtbtirfh3PKv-eOKt8Rg

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই শুধুমাত্র একটি ব্রাউজার বা আপনার ক্রোমবুক দিয়ে করা সম্ভব।

ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].

৩. অ্যাপ্লিকেশনটি পরীক্ষা করুন

ল্যাব শুরু করার আগে, নিশ্চিত হয়ে নিন যে অ্যাপ্লিকেশনটি আগের ল্যাব থেকে এখনও কাজ করছে। মনে করিয়ে দেওয়ার জন্য, EXTERNAL-IP এর অধীনে তালিকাভুক্ত গেটওয়ের এক্সটার্নাল আইপি এবং পোর্ট আপনি এইভাবেই দেখতে পাবেন:

kubectl get svc istio-ingressgateway -n istio-system

অ্যাপ্লিকেশনটি দেখার জন্য, আপনি আপনার ব্রাউজার খুলে http://<gatewayurl> -এ যেতে পারেন।

f579a9baedc108a9.png

আপনি যদি অ্যাপ্লিকেশনটি দেখতে না পান, তাহলে আগের ল্যাবে ফিরে গিয়ে নিশ্চিত করুন যে আপনি সমস্ত ধাপ অনুসরণ করেছেন এবং অ্যাপ্লিকেশন ও Istio উভয়ই সঠিকভাবে ইনস্টল ও চালু আছে।

এই পর্যায়ে, আপনার মনে প্রশ্ন জাগতে পারে, "ইস্টিও ব্যবহারের সুবিধা কী?"। আপনার অ্যাপ্লিকেশনের ট্র্যাফিক পরিচালনার দায়িত্ব ইস্টিও-কে দিলে, আপনি মেট্রিক্স, ট্রেসিং, ডাইনামিক ট্র্যাফিক ম্যানেজমেন্ট, সার্ভিস ভিজ্যুয়ালাইজেশন, ফল্ট ইনজেকশন-এর মতো আরও অনেক ফিচার বিনামূল্যে পেয়ে যাবেন।

পরবর্তী ধাপে আপনি মেট্রিক্স অন্বেষণ করা শুরু করবেন।

৪. গ্রাফানা এবং প্রোমিথিউস ব্যবহার করে মেট্রিক্স

ডিফল্টরূপে, Istio কিছু মেট্রিক তৈরি করে। আপনি অ্যাড-অন ব্যবহার করে এই ডিফল্ট মেট্রিকগুলো কোয়েরি ও ভিজ্যুয়ালাইজ করতে পারেন।

প্রমিথিউস

প্রমিথিউস একটি ওপেন-সোর্স মনিটরিং সলিউশন। আপনি ইস্তিও দ্বারা জেনারেট করা মেট্রিক্স কোয়েরি করতে প্রমিথিউস ব্যবহার করতে পারেন, কিন্তু এর জন্য আপনাকে প্রথমে প্রমিথিউস অ্যাড-অন ইনস্টল করতে হবে।

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.8/samples/addons/prometheus.yaml

প্রমিথিউস চালু আছে কিনা তা যাচাই করুন:

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> ভিজিট করে অথবা curl কমান্ডটি চালিয়ে অ্যাপ্লিকেশনটিতে কিছু ট্র্যাফিক পাঠান।

প্রমিথিউস UI-এর জন্য পোর্ট ফরওয়ার্ডিং সেটআপ করুন:

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 8080:9090

এখন আপনি ক্লাউড শেলের উপরের ডান কোণায় থাকা ওয়েব প্রিভিউ বোতামে ক্লিক করে এবং পোর্ট ৮০৮০-তে প্রিভিউ-তে ক্লিক করে একটি কোয়েরি চালাতে পারেন:

772a5248aa493025.png

আপনি একটি নতুন ট্যাবে প্রোমিথিউস UI দেখতে পাবেন:

272ee63c1fe0be16.png

Prometheus সম্পর্কে আরও জানতে, Querying Metrics with Prometheus দেখুন।

গ্রাফানা

মেট্রিকগুলো দৃশ্যমান করার জন্য গ্রাফানা আরেকটি অ্যাড-অন।

গ্রাফানা ইনস্টল করুন। istio-version এর জায়গায় আপনার বর্তমান Istio ভার্সনটি বসান, যেমন, 1.0.3-gke.3 :

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.8/samples/addons/grafana.yaml

গ্রাফানা চালু আছে কিনা তা যাচাই করুন:

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> ভিজিট করে অথবা curl কমান্ডটি চালিয়ে অ্যাপ্লিকেশনটিতে কিছু ট্র্যাফিক পাঠান।

গ্রাফানা UI-এর জন্য পোর্ট ফরওয়ার্ডিং সেটআপ করুন:

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 8080:3000

ওয়েব প্রিভিউতে গিয়ে আপনি গ্রাফানা ড্যাশবোর্ডগুলো দেখতে পারেন:

806d696d85267a37.png

524cb9f6d66f8655.png

Grafana সম্পর্কে আরও জানতে, Visualizing Metrics with Grafana দেখুন।

৫. অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ তৈরি করুন।

এক পর্যায়ে, আপনার প্রোডাকশনে ডেপ্লয় করা অ্যাপ্লিকেশনটিতে বাগ ফিক্স বা অতিরিক্ত ফিচারের প্রয়োজন হবে। চলুন দেখি সেই প্রক্রিয়াটি কেমন।

প্রথমে, অ্যাপ্লিকেশনটি পরিবর্তন করা যাক। ক্লাউড শেল থেকে কোড এডিটরটি খুলুন।

mxrggIJ2Zz8E47ULCEo4NywjM-EpSkZF5c3TQgfGx4nODwP2obiQXrwQjEEaXuBhJDA2j J5evR7TuHIy1gsqqDRFm0Wh3xhZUu9tn_xb1ygFlBm1HKJqLdfz_aK7WJS33u2IBDO2oQ

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

পরিবর্তনগুলি সংরক্ষণ করুন এবং তারপর ক্লাউড শেলে ফিরে যান। HelloWorldAspNetCore, ডকার ইমেজটি বিল্ড করুন:

docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 . 

এবং কন্টেইনার রেজিস্ট্রি-তে পুশ করুন:

docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 

কন্টেইনার ইমেজটি পুশ করার পর, আপনি পরবর্তী ধাপে নতুন সংস্করণটি ডিপ্লয় করতে পারবেন।

৬. নতুন ডেপ্লয়মেন্টটি তৈরি করুন।

নতুন সংস্করণটি ডেপ্লয় করতে, আপনাকে প্রথমে 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 দিয়ে ওয়েব অ্যাপ তৈরি করা সম্পর্কে জানুন" এই বার্তাটি দেখতে পাবেন:

11d528132dbb6cee.png

অন্য সময়, আপনি "গুগল ক্লাউডে ASP.NET Core দিয়ে ওয়েব অ্যাপ তৈরি করা সম্পর্কে জানুন" এই বার্তাটি দেখতে পাবেন:

3eb0d5be1b4cb40b.png

এর কারণ হলো, v1 এবং v2 উভয় ডেপ্লয়মেন্টই একই Kubernetes সার্ভিসের ( aspnetcore-service ) পেছনে উন্মুক্ত থাকে এবং পূর্ববর্তী ল্যাবে আপনার তৈরি করা VirtualService-টি ( aspnetcore-virtualservice ) সেই সার্ভিসটিকেই হোস্ট হিসেবে ব্যবহার করে।

পরবর্তী ধাপে, আপনি একটি DestinationRule ব্যবহার করে সার্ভিসটিকে v2 ডিপ্লয়মেন্টের সাথে যুক্ত করবেন।

৭. আপনার পরিষেবাটি নতুন সংস্করণে পিন করুন।

এই ধাপে, আপনি আপনার সার্ভিসকে v2 ডেপ্লয়মেন্ট ব্যবহার করার জন্য নির্দিষ্ট করবেন এবং আপনি একটি DestinationRule ব্যবহার করে তা করতে পারেন। একটি VirtualService রাউটিং অপারেশন সম্পন্ন হওয়ার পর কোনো অনুরোধের উপর যে নীতিমালাগুলো প্রয়োগ করা হবে, একটি DestinationRule সেগুলো কনফিগার করে।

একটি DestinationRule সংশ্লিষ্ট গন্তব্য হোস্টের অ্যাড্রেসযোগ্য উপসেট, অর্থাৎ নামযুক্ত সংস্করণও সংজ্ঞায়িত করে। সার্ভিসের নির্দিষ্ট সংস্করণে ট্র্যাফিক পাঠানোর সময় 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

এরপরে, DestinationRule তৈরি করুন। এটি দুটি সাবসেট (v1 এবং v2) তৈরি করে যা আপনি VirtualService থেকে ব্যবহার করতে পারবেন:

kubectl apply -f aspnetcore-destinationrule.yaml
destinationrule.networking.istio.io "aspnetcore-destionationrule" created

এখন, v2 সাবসেট ব্যবহার করার জন্য VirtualService-টি আপডেট করতে aspnetcore-virtualservice.yaml ফাইলে ফিরে যান:

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>. একাধিকবার রিফ্রেশ করার পরেও, আপনি "Learn about building Web apps with ASP.NET Core on Google Cloud" বার্তাটি দেখতে পাবেন:

3eb0d5be1b4cb40b.png

৮. সংস্করণগুলোর মধ্যে ট্র্যাফিক ভাগ করুন

কখনও কখনও, পরীক্ষার জন্য আপনি বিভিন্ন ভার্সনের মধ্যে ট্র্যাফিক ভাগ করতে চাইতে পারেন। উদাহরণস্বরূপ, আপনি সার্ভিসের ৭৫% ট্র্যাফিক v1 এবং ২৫% ট্র্যাফিক v2 ভার্সনে পাঠাতে চাইতে পারেন। 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 ভার্সন দুটি প্রায় ৩:১ অনুপাতে পরিবেশিত হচ্ছে।

আরও জানতে, Istio-তে ট্র্যাফিক স্প্লিটিং দেখুন।

৯. ত্রুটি প্রবেশ করান

টেস্টিংয়ের জন্য আরেকটি দরকারি ডেভেলপমেন্ট কাজ হলো ট্র্যাফিকের মধ্যে ত্রুটি বা বিলম্ব যোগ করে দেখা যে, তার প্রতিক্রিয়ায় সার্ভিসগুলো কীভাবে আচরণ করে।

উদাহরণস্বরূপ, আপনি হয়তো v1 সংস্করণের ৫০% ট্র্যাফিকের জন্য একটি ত্রুটিপূর্ণ অনুরোধ (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

এখন, আপনি যখন ব্রাউজার রিফ্রেশ করবেন, তখন দেখবেন যে অনুরোধগুলো ৫ সেকেন্ড বিলম্বিত হচ্ছে।

Istio-এর টাইমআউট, রিট্রাই, কন্ডিশনাল রুল, সার্কিট ব্রেকার এবং আরও অনেক ফিচার সম্পর্কে বিস্তারিত জানতে, ট্র্যাফিক ম্যানেজমেন্ট ফিচারস দেখুন।

১০. অভিনন্দন!

আশা করি, এই ল্যাবটি আপনাকে একটি ধারণা দিয়েছে যে Istio আপনার পরিষেবাগুলির জন্য স্বয়ংক্রিয়ভাবে কী কী করতে পারে। Istio এবং GKE সম্পর্কে আরও জানতে।

পরবর্তী পদক্ষেপ

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।

১১. পরিচ্ছন্নতা

আপনি অ্যাপটি ডিলিট করে 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

ইস্তিও চলে গেছে তা নিশ্চিত করতে:

kubectl get pods -n istio-system

কুবারনেটিস ক্লাস্টার মুছে ফেলুন

gcloud container clusters delete hello-dotnet-cluster