Google Kubernetes ইঞ্জিনে Kubernetes-এ ASP.NET কোর অ্যাপ স্থাপন করুন

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

ASP.NET কোর হল C# প্রোগ্রামিং ভাষা ব্যবহার করে আধুনিক ক্লাউড-ভিত্তিক এবং ইন্টারনেট-সংযুক্ত অ্যাপ্লিকেশন তৈরির জন্য একটি নতুন ওপেন-সোর্স এবং ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্ক।

কুবারনেটস একটি ওপেন সোর্স প্রকল্প যা ল্যাপটপ থেকে শুরু করে উচ্চ-উপলব্ধতা মাল্টি-নোড ক্লাস্টার, পাবলিক ক্লাউড থেকে অন-প্রিমিস স্থাপনা, ভার্চুয়াল মেশিন থেকে বেয়ার মেটাল পর্যন্ত বিভিন্ন পরিবেশে চলতে পারে।

এই ল্যাবে, আপনি Kubernetes Engine- এ চলমান Kubernetes- এ একটি সাধারণ ASP.NET Core অ্যাপ স্থাপন করবেন। এই কোডল্যাবটি Google Cloud Shell codelab থেকে ASP.NET Core অ্যাপ তৈরি এবং চালু করার উপর ভিত্তি করে তৈরি হবে। এই ল্যাবটি ব্যবহার করার আগে আপনি প্রথমে সেই ল্যাবটি করতে চাইতে পারেন।

এই কোডল্যাবের লক্ষ্য হল আপনার কোড (এখানে একটি সহজ Hello World ASP.NET Core অ্যাপ) কে Kubernetes-এ চলমান একটি প্রতিলিপিকৃত অ্যাপ্লিকেশনে রূপান্তর করা। আপনি আপনার মেশিনে তৈরি কোডটি নিয়ে একটি Docker কন্টেইনার ছবিতে রূপান্তর করুন এবং তারপর সেই ছবিটি Google Kubernetes Engine-এ চালান।

এই কোডল্যাবের বিভিন্ন অংশের একটি চিত্র এখানে দেওয়া হল, যাতে আপনি বুঝতে পারেন যে কীভাবে অংশগুলি একসাথে ফিট করে। কোডল্যাবের মধ্য দিয়ে এগিয়ে যাওয়ার সময় এটিকে একটি রেফারেন্স হিসেবে ব্যবহার করুন; শেষ পর্যন্ত পৌঁছানোর সময় এটি সবই বোধগম্য হয়ে উঠবে (তবে আপাতত এটি উপেক্ষা করতে দ্বিধা করবেন না)।

7dbdc973aceef1af.jpeg সম্পর্কে

এই কোডল্যাবের উদ্দেশ্যে, Kubernetes Engine (Compute Engine-এ চলমান Kubernetes-এর একটি Google-হোস্টেড সংস্করণ) এর মতো একটি পরিচালিত পরিবেশ ব্যবহার করলে আপনি অন্তর্নিহিত অবকাঠামো স্থাপনের পরিবর্তে Kubernetes অভিজ্ঞতার উপর আরও বেশি মনোযোগ দিতে পারবেন।

যদি আপনি আপনার স্থানীয় মেশিনে, যেমন ডেভেলপমেন্ট ল্যাপটপে, Kubernetes চালাতে আগ্রহী হন, তাহলে আপনার Minikube দেখতে হবে। এটি ডেভেলপমেন্ট এবং পরীক্ষার উদ্দেশ্যে একটি একক নোড Kubernetes ক্লাস্টারের সহজ সেটআপ প্রদান করে। আপনি যদি চান তবে এই কোডল্যাবটি দেখতে Minikube ব্যবহার করতে পারেন।

তুমি কি শিখবে

  • কিভাবে একটি সাধারণ ASP.NET কোর অ্যাপকে ডকার কন্টেইনার হিসেবে প্যাকেজ করবেন।
  • গুগল কুবারনেটস ইঞ্জিন (GKE) তে আপনার কুবারনেটস ক্লাস্টার কীভাবে তৈরি করবেন।
  • কিভাবে আপনার ASP.NET কোর অ্যাপটি একটি পডে স্থাপন করবেন।
  • আপনার পডে বহিরাগত ট্র্যাফিক কীভাবে অনুমতি দেবেন।
  • কীভাবে আপনার পরিষেবার পরিধি বাড়ানো এবং আপগ্রেড করা যায়।
  • কুবারনেটস গ্রাফিক্যাল ড্যাশবোর্ড কিভাবে চালাবেন।

তোমার যা লাগবে

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

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

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

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

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

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

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

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য হতে হবে এবং এটি অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা আপনার বিবেচনার বিষয় নয়। বেশিরভাগ কোডল্যাবে, আপনাকে প্রোজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন যে এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের পরে যাতে আপনাকে বিলিং করতে না হয় সেজন্য রিসোর্সগুলি বন্ধ করতে, আপনি আপনার তৈরি রিসোর্সগুলি মুছে ফেলতে পারেন অথবা পুরো প্রকল্পটি মুছে ফেলতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

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

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

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

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 853e55310c205094.png সম্পর্কে .

55efc1aaa7a4d3ad.png সম্পর্কে

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

9c92662c6a846a5c.png সম্পর্কে

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

9f0e51b578fecce5.png সম্পর্কে

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল দিয়ে পূর্ণ। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google Cloud-এ চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, কেবল একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।

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

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. ক্লাউড শেলে একটি ASP.NET কোর অ্যাপ তৈরি করুন

ক্লাউড শেল প্রম্পটে, আপনি ডটনেট কমান্ড লাইন টুলের সংস্করণ পরীক্ষা করে যাচাই করতে পারেন যে এটি ইতিমধ্যেই ইনস্টল করা আছে। এটি ইনস্টল করা ডটনেট কমান্ড লাইন টুলের সংস্করণটি প্রিন্ট করবে:

dotnet --version

এরপর, একটি নতুন কঙ্কাল ASP.NET কোর ওয়েব অ্যাপ তৈরি করুন।

dotnet new mvc -o HelloWorldAspNetCore

এটি একটি প্রকল্প তৈরি করবে এবং এর নির্ভরতা পুনরুদ্ধার করবে। আপনি নীচের মতো একটি বার্তা দেখতে পাবেন।

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

৪. ASP.NET কোর অ্যাপটি চালান

আমরা আমাদের অ্যাপটি চালানোর জন্য প্রায় প্রস্তুত। অ্যাপ ফোল্ডারে যান।

cd HelloWorldAspNetCore

অবশেষে, অ্যাপটি চালান।

dotnet run --urls=http://localhost:8080

পোর্ট 8080-এ অ্যাপ্লিকেশন শোনা শুরু হয়।

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

অ্যাপটি চলছে কিনা তা যাচাই করতে, উপরের ডানদিকে ওয়েব প্রিভিউ বোতামে ক্লিক করুন এবং 'পোর্ট 8080-এ প্রিভিউ' নির্বাচন করুন।

ক্যাপচার.পিএনজি

আপনি ডিফল্ট ASP.NET কোর ওয়েবপৃষ্ঠাটি দেখতে পাবেন:

f42271880ce4d572.png সম্পর্কে

অ্যাপটি চালু আছে কিনা তা যাচাই করার পর, অ্যাপটি বন্ধ করতে Ctrl+C টিপুন।

৫. ASP.NET কোর অ্যাপটিকে ডকার কন্টেইনার হিসেবে প্যাকেজ করুন

এরপর, আপনার অ্যাপটিকে একটি কন্টেইনার হিসেবে চালানোর জন্য প্রস্তুত করুন। প্রথম ধাপ হল কন্টেইনার এবং এর বিষয়বস্তু নির্ধারণ করা।

অ্যাপের বেস ডিরেক্টরিতে, ডকার ইমেজ সংজ্ঞায়িত করার জন্য একটি Dockerfile তৈরি করুন।

touch Dockerfile

আপনার পছন্দের এডিটর ( vim, nano,emacs অথবা Cloud Shell এর কোড এডিটর) ব্যবহার করে Dockerfile এ নিম্নলিখিতটি যোগ করুন।

# Use Microsoft's official build .NET image.
# https://hub.docker.com/_/microsoft-dotnet-core-sdk/
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build
WORKDIR /app

# Install production dependencies.
# Copy csproj and restore as distinct layers.
COPY *.csproj ./
RUN dotnet restore

# Copy local code to the container image.
COPY . ./
WORKDIR /app

# Build a release artifact.
RUN dotnet publish -c Release -o out

# Use Microsoft's official runtime .NET image.
# https://hub.docker.com/_/microsoft-dotnet-core-aspnet/
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine-amd64 AS runtime
WORKDIR /app
COPY --from=build /app/out ./

# Make sure the app binds to port 8080
ENV ASPNETCORE_URLS http://*:8080

# Run the web service on container startup.
ENTRYPOINT ["dotnet", "HelloWorldAspNetCore.dll"]

আপনার ডকারফাইলে অন্তর্ভুক্ত একটি গুরুত্বপূর্ণ কনফিগারেশন হল সেই পোর্ট যেখানে অ্যাপটি ইনকামিং ট্র্যাফিক (8080) শোনে। এটি ASPNETCORE_URLS এনভায়রনমেন্ট ভেরিয়েবল সেট করে সম্পন্ন করা হয়, যা ASP.NET কোর অ্যাপগুলি কোন পোর্ট শুনতে হবে তা নির্ধারণ করতে ব্যবহার করে।

এই Dockerfile সংরক্ষণ করুন। এখন, ছবিটি তৈরি করা যাক:

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

একবার এটি সম্পন্ন হয়ে গেলে (সবকিছু ডাউনলোড এবং এক্সট্র্যাক্ট করতে কিছুটা সময় লাগবে), আপনি দেখতে পাবেন যে ছবিটি স্থানীয়ভাবে তৈরি এবং সংরক্ষিত হয়েছে:

docker images

REPOSITORY                             TAG   
gcr.io/yourproject-XXXX/hello-dotnet   v1            

নিম্নলিখিত কমান্ড দিয়ে স্থানীয়ভাবে ছবিটি পরীক্ষা করুন যা আপনার নতুন তৈরি কন্টেইনার ইমেজ থেকে পোর্ট 8080 এ স্থানীয়ভাবে একটি ডকার কন্টেইনার চালাবে:

docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1

এবং আবারও ক্লাউডশেলের ওয়েব প্রিভিউ বৈশিষ্ট্যের সুবিধা নিন:

স্ক্রিনশট: ২০১৫-১১-০৩ ১৭:২০:২২.png

আপনার একটি নতুন ট্যাবে ডিফল্ট ASP.NET কোর ওয়েবপৃষ্ঠাটি দেখা উচিত।

f42271880ce4d572.png সম্পর্কে

একবার আপনি যাচাই করে নিন যে অ্যাপটি স্থানীয়ভাবে একটি ডকার কন্টেইনারে ঠিকঠাক চলছে, আপনি Ctrl-> C ব্যবহার করে চলমান কন্টেইনারটি বন্ধ করতে পারেন।

এখন যেহেতু ছবিটি ইচ্ছামতো কাজ করছে, আপনি এটিকে Google Container Registry -এ ঠেলে দিতে পারেন, যা আপনার ডকার ছবির জন্য একটি ব্যক্তিগত সংগ্রহস্থল যা প্রতিটি Google ক্লাউড প্রকল্প থেকে (কিন্তু Google ক্লাউড প্ল্যাটফর্মের বাইরে থেকেও) অ্যাক্সেসযোগ্য:

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

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

576374602b52f4e4.png সম্পর্কে

যদি আপনি কৌতূহলী হন, তাহলে আপনি এই লিঙ্কটি অনুসরণ করে গুগল ক্লাউড স্টোরেজে সংরক্ষিত কন্টেইনার চিত্রগুলি নেভিগেট করতে পারেন: https://console.cloud.google.com/storage/browser/ (পূর্ণ ফলাফল লিঙ্কটি এই ফর্মের হওয়া উচিত: https://console.cloud.google.com/project/ PROJECT_ID /storage/browser/)।

৬. কুবেরনেটস ক্লাস্টার তৈরি করুন

ঠিক আছে, আপনি এখন আপনার GKE ক্লাস্টার তৈরি করতে প্রস্তুত, কিন্তু তার আগে, ওয়েব কনসোলের Google Kubernetes Engine বিভাগে যান এবং সিস্টেমটি চালু হওয়ার জন্য অপেক্ষা করুন (এটি মাত্র কয়েক সেকেন্ড সময় নেবে)।

d5f6e3c267feea1a.png

একটি ক্লাস্টারে গুগল দ্বারা পরিচালিত একটি Kubernetes মাস্টার API সার্ভার এবং কর্মী নোডের একটি সেট থাকে। কর্মী নোডগুলি হল কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন।

আপনার ক্লাউডশেল সেশন থেকে gcloud CLI ব্যবহার করে একটি ক্লাস্টার তৈরি করা যাক। আপনার জোনটিকে আপনার কাছাকাছি কোথাও ( জোনের তালিকা ) সামঞ্জস্য করুন। এটি সম্পন্ন হতে কয়েক মিনিট সময় লাগবে:

gcloud container clusters create hello-dotnet-cluster --cluster-version=latest --num-nodes 4 --zone europe-west1-b

শেষে, আপনি ক্লাস্টারটি তৈরি দেখতে পাবেন।

Creating cluster hello-dotnet-cluster...done.
Created [https://container.googleapis.com/v1/projects/dotnet-atamel/zones/europe-west1-b/clusters/hello-dotnet-cluster].
kubeconfig entry generated for hello-dotnet-cluster.
NAME                  ZONE            MASTER_VERSION  
hello-dotnet-cluster  europe-west1-b  1.10.7-gke.6

আপনার এখন গুগল কুবারনেটস ইঞ্জিন দ্বারা চালিত একটি সম্পূর্ণরূপে কার্যকরী কুবারনেটস ক্লাস্টার থাকা উচিত:

eefb8d9b7f39598b.png সম্পর্কে

এখন সময় এসেছে আপনার নিজস্ব কন্টেইনারাইজড অ্যাপ্লিকেশনটি Kubernetes ক্লাস্টারে স্থাপন করার! এখন থেকে আপনি kubectl কমান্ড লাইন ব্যবহার করবেন (যা ইতিমধ্যেই আপনার ক্লাউড শেল পরিবেশে সেট আপ করা আছে)। এই কোডল্যাবের বাকি অংশের জন্য kubernetes ক্লায়েন্ট এবং সার্ভার উভয় সংস্করণই 1.2 বা তার বেশি হতে হবে। kubectl version আপনাকে কমান্ডের বর্তমান সংস্করণ দেখাবে।

৭. স্থাপনা তৈরি করুন

একটি kubernetes পড হল কন্টেইনারের একটি গ্রুপ, যা প্রশাসন এবং নেটওয়ার্কিংয়ের উদ্দেশ্যে একসাথে আবদ্ধ। এতে একটি একক বা একাধিক কন্টেইনার থাকতে পারে। এখানে আপনি কেবল আপনার ব্যক্তিগত কন্টেইনার রেজিস্ট্রিতে সংরক্ষিত ASP.NET কোর ইমেজ দিয়ে তৈরি একটি কন্টেইনার ব্যবহার করবেন। এটি পোর্ট 8080-এ কন্টেন্ট পরিবেশন করবে।

আপনার পছন্দের এডিটর ( vim, nano,emacs অথবা Cloud Shell এর কোড এডিটর) ব্যবহার করে একটি hello-dotnet.yaml ফাইল তৈরি করুন এবং পডের জন্য Kubernetes ডিপ্লয়মেন্ট নির্ধারণ করুন:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: hello-dotnet
  name: hello-dotnet
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: hello-dotnet
  template:
    metadata:
      labels:
        run: hello-dotnet
    spec:
      containers:
      - name: hello-dotnet
        image: gcr.io/YOUR-PROJECT-ID/hello-dotnet:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

kubectl দিয়ে ডিফল্ট নেমস্পেসে স্থাপন করুন:

kubectl apply -f hello-dotnet.yaml
deployment.apps/hello-dotnet created

আপনি দেখতে পাচ্ছেন, আপনি একটি ডিপ্লয়মেন্ট অবজেক্ট তৈরি করেছেন। পড তৈরি এবং স্কেল করার জন্য ডিপ্লয়মেন্ট হল প্রস্তাবিত উপায়। এখানে, একটি নতুন ডিপ্লয়মেন্ট hello-dotnet:v1 ইমেজটি চালানোর জন্য একটি একক পড রেপ্লিকা পরিচালনা করে।

আপনার তৈরি করা স্থাপনাটি দেখতে, কেবল চালান:

kubectl get deployments
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-dotnet   1         1         1            1           37s

স্থাপনার মাধ্যমে তৈরি পডটি দেখতে, এই কমান্ডটি চালান:

kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-dotnet-714049816-ztzrb   1/1       Running   0          57s

এখন কিছু আকর্ষণীয় kubectl কমান্ড চালানোর জন্য উপযুক্ত সময় (এগুলির কোনওটিই ক্লাস্টারের অবস্থা পরিবর্তন করবে না, সম্পূর্ণ ডকুমেন্টেশন এখানে উপলব্ধ):

kubectl get pods
kubectl cluster-info
kubectl config view
kubectl get events
kubectl logs <pod-name>

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

৮. বহিরাগত ট্র্যাফিকের অনুমতি দিন

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

ক্লাউড শেল থেকে আপনি kubectl expose কমান্ডের সাথে --type="LoadBalancer" ফ্ল্যাগ ব্যবহার করে পডটিকে পাবলিক ইন্টারনেটে এক্সপোজ করতে পারেন। বহিরাগতভাবে অ্যাক্সেসযোগ্য IP তৈরির জন্য এই ফ্ল্যাগটি প্রয়োজন:

kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080

এই কমান্ডে ব্যবহৃত পতাকাটি নির্দিষ্ট করে যে আপনি অন্তর্নিহিত অবকাঠামো দ্বারা সরবরাহিত লোড-ব্যালেন্সার ব্যবহার করবেন (এই ক্ষেত্রে Compute Engine load balancer )। মনে রাখবেন যে আপনি সরাসরি পড নয়, বরং স্থাপনাটি প্রকাশ করবেন। এর ফলে পরিষেবাটি স্থাপনা দ্বারা পরিচালিত সমস্ত পড জুড়ে ব্যালেন্স ট্র্যাফিক লোড করবে (এই ক্ষেত্রে কেবল 1 পড, তবে আপনি পরে আরও প্রতিলিপি যুক্ত করবেন)।

গুগল ক্লাউড প্ল্যাটফর্মের বাইরে থেকে পরিষেবাটি সম্পূর্ণরূপে অ্যাক্সেসযোগ্য করার জন্য কুবারনেটস মাস্টার লোড ব্যালেন্সার এবং সম্পর্কিত কম্পিউট ইঞ্জিন ফরোয়ার্ডিং নিয়ম, টার্গেট পুল এবং ফায়ারওয়াল নিয়ম তৈরি করে।

পরিষেবাটির সর্বজনীনভাবে অ্যাক্সেসযোগ্য IP ঠিকানা খুঁজে পেতে, কেবল kubectl সমস্ত ক্লাস্টার পরিষেবা তালিকাভুক্ত করার জন্য অনুরোধ করুন:

kubectl get services
NAME         CLUSTER-IP     EXTERNAL-IP      PORT(S)    AGE
hello-dotnet 10.3.253.62   104.155.20.69   8080/TCP    1m
kubernetes   10.3.240.1     <none>           443/TCP    5m

মনে রাখবেন আপনার পরিষেবার জন্য দুটি IP ঠিকানা তালিকাভুক্ত আছে, উভয়ই 8080 পোর্ট পরিবেশন করে। একটি হল অভ্যন্তরীণ IP যা শুধুমাত্র আপনার ক্লাউড ভার্চুয়াল নেটওয়ার্কের ভিতরে দৃশ্যমান; অন্যটি হল বহিরাগত লোড-ব্যালেন্সড IP। এই উদাহরণে, বহিরাগত IP ঠিকানা হল 104.155.20.69

আপনার ব্রাউজারটি এই ঠিকানায় নির্দেশ করে এখন আপনি পরিষেবাটিতে পৌঁছাতে সক্ষম হবেন: http://<EXTERNAL_IP> :8080

6b053874002827fe.png সম্পর্কে

এই মুহুর্তে আপনি কন্টেইনার এবং কুবারনেটে স্থানান্তরিত হওয়ার মাধ্যমে কমপক্ষে বেশ কয়েকটি বৈশিষ্ট্য অর্জন করেছেন - আপনার কাজের চাপ কোন হোস্টে চালানো হবে তা নির্দিষ্ট করার প্রয়োজন নেই এবং আপনি পরিষেবা পর্যবেক্ষণ এবং পুনঃসূচনা থেকেও উপকৃত হবেন। আসুন দেখি আপনার নতুন কুবারনেটস অবকাঠামো থেকে আপনি আর কী কী সুবিধা পেতে পারেন।

৯. আপনার পরিষেবার পরিধি বাড়ান

Kubernetes এর একটি শক্তিশালী বৈশিষ্ট্য হল আপনার অ্যাপ্লিকেশন স্কেল করা কতটা সহজ। ধরুন আপনার অ্যাপ্লিকেশনের জন্য হঠাৎ করে আরও ক্ষমতার প্রয়োজন হয়; আপনি কেবল রেপ্লিকেশন কন্ট্রোলারকে আপনার পডের জন্য নতুন সংখ্যক রেপ্লিকা পরিচালনা করতে বলতে পারেন:

kubectl scale deployment hello-dotnet --replicas=4
kubectl get deployment
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-dotnet   4         4         4            3           16m
kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-dotnet-714049816-g4azy   1/1       Running   0          1m
hello-dotnet-714049816-rk0u6   1/1       Running   0          1m
hello-dotnet-714049816-sh812   1/1       Running   0          1m
hello-dotnet-714049816-ztzrb   1/1       Running   0          16m

এখানে ঘোষণামূলক পদ্ধতিটি লক্ষ্য করুন - নতুন ইনস্ট্যান্স শুরু বা বন্ধ করার পরিবর্তে, আপনাকে ঘোষণা করতে হবে যে সর্বকালের কতগুলি ইনস্ট্যান্স চলমান থাকা উচিত। Kubernetes পুনর্মিলন লুপগুলি কেবল নিশ্চিত করে যে বাস্তবতা আপনার অনুরোধের সাথে মেলে এবং প্রয়োজনে পদক্ষেপ নেয়।

আপনার কুবেরনেটস ক্লাস্টারের অবস্থা সংক্ষেপে এখানে একটি চিত্র দেওয়া হল:

6af0243662464ca9.png সম্পর্কে

আপনি খুব সহজেই আপনার পরিষেবার পরিধি কমাতে পারেন। এখানে আপনি 4 পড থেকে 2 পডে কীভাবে স্কেল করবেন তা দেখানো হয়েছে।

kubectl scale deployment hello-dotnet --replicas=2
kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-dotnet-714049816-g4azy   1/1       Running   0          1m
hello-dotnet-714049816-rk0u6   1/1       Running   0          1m

১০. পরীক্ষার স্থিতিস্থাপকতা

Kubernetes (অথবা আরও স্পষ্টভাবে ReplicaSet) আপনার পডগুলি পর্যবেক্ষণ করে এবং যদি পডটিতে কিছু ভুল হয় এবং এটি নষ্ট হয়ে যায়, তবে এটি তৎক্ষণাৎ একটি নতুন তৈরি করে। আসুন এটি পরীক্ষা করে দেখি এটি কীভাবে কাজ করে।

প্রথমে পডের তালিকাটি পান:

kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-dotnet-714049816-g4azy   1/1       Running   0          1m
hello-dotnet-714049816-rk0u6   1/1       Running   0          1m

পডের নামটি প্রবেশ করিয়ে একটি পড মুছে ফেলুন:

kubectl delete pod hello-dotnet-714049816-g4azy

আপনি যদি আবার পডের তালিকাটি দেখেন, তাহলে আপনি দেখতে পাবেন একটি নতুন পড তৈরি হচ্ছে এবং তাৎক্ষণিকভাবে আবার চালু হচ্ছে:

kubectl get pods
NAME                         READY     STATUS           RESTARTS   AGE
hello-dotnet-714049816-abczy   1/1    ContainerCreating  0          1m
hello-dotnet-714049816-rk0u6   1/1    Running            0          1m

১১. আপনার পরিষেবার একটি আপগ্রেড চালু করুন

এক পর্যায়ে, আপনি যে অ্যাপ্লিকেশনটি উৎপাদনে স্থাপন করেছেন তার জন্য বাগ সংশোধন বা অতিরিক্ত বৈশিষ্ট্যের প্রয়োজন হবে। দেখা যাক প্রক্রিয়াটি কেমন দেখায়।

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

f487389b8b1cc105.png সম্পর্কে

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-এর জন্য প্রস্তুত যাতে আপনার রেপ্লিকেশন কন্ট্রোলারটি অ্যাপ্লিকেশনের নতুন সংস্করণে মসৃণভাবে আপডেট করা যায়। আপনার চলমান কন্টেইনারের জন্য ছবির লেবেল পরিবর্তন করতে, আপনাকে বিদ্যমান hello-dotnet deployment সম্পাদনা করতে হবে এবং ছবিটি gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 থেকে gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 এ পরিবর্তন করতে হবে।

এটি করার জন্য, আপনাকে kubectl edit কমান্ডটি ব্যবহার করতে হবে। এটি একটি টেক্সট এডিটর খুলবে যেখানে সম্পূর্ণ ডিপ্লয়মেন্ট yaml কনফিগারেশন প্রদর্শিত হবে। এখনই সম্পূর্ণ yaml কনফিগারেশন বোঝার প্রয়োজন নেই, বরং বুঝতে হবে যে কনফিগারেশনে spec.template.spec.containers.image ফিল্ডটি আপডেট করে আপনি ডিপ্লয়মেন্টকে নতুন ইমেজ ব্যবহার করার জন্য পডগুলি আপডেট করতে বলছেন।

kubectl edit deployment hello-dotnet
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: 2017-01-06T10:05:28Z
  generation: 3
  labels:
    run: hello-dotnet
  name: hello-dotnet
  namespace: default
  resourceVersion: "151017"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/hello-dotnet
  uid: 981fe302-f1e9-11e5-9a78-42010af00005
spec:
  replicas: 4
  selector:
    matchLabels:
      run: hello-dotnet
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: hello-dotnet
    spec:
      containers:
      - image: gcr.io/PROJECT_ID/hello-dotnet:v1 # Update this line
        imagePullPolicy: IfNotPresent
        name: hello-dotnet
        ports:
        - containerPort: 8080
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      securityContext: {}
      terminationGracePeriodSeconds: 30

পরিবর্তন করার পর, ফাইলটি সংরক্ষণ করুন এবং বন্ধ করুন (এটি vi ব্যবহার করে, তাই "Esc" টিপুন তারপর :wq টাইপ করুন এবং "Enter" কী টিপুন)।

deployment "hello-dotnet" edited

এটি নতুন ছবির সাথে স্থাপনা আপডেট করে, যার ফলে নতুন ছবির সাথে নতুন পড তৈরি হয় এবং পুরানো পডগুলি মুছে ফেলা হয়।

kubectl get deployments
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-dotnet   4         5         4            3           1h

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

fb9f41e814dda653.png সম্পর্কে

আপডেট রোলিং সম্পর্কে আরও বিস্তারিত তথ্য আপনি Kubernetes ডকুমেন্টেশনে পেতে পারেন।

আশা করি এই স্থাপনা, স্কেলিং এবং আপডেট বৈশিষ্ট্যগুলির সাহায্যে আপনি একমত হবেন যে একবার আপনি আপনার পরিবেশ সেটআপ করার পরে (আপনার GKE/Kubernetes ক্লাস্টার এখানে), Kubernetes আপনাকে অবকাঠামো পরিচালনার পরিবর্তে আপনার অ্যাপ্লিকেশনের উপর মনোযোগ দিতে সাহায্য করতে পারে।

১২. ক্লাউড বিল্ড

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

প্রথমে, API Manager > Library-এ Cloud Build API সক্রিয় করুন। Cloud Build অনুসন্ধান করুন, Cloud Build API- তে ক্লিক করুন:

f8b0239fa7719f29.png সম্পর্কে

যদি API ইতিমধ্যেই সক্রিয় না থাকে, তাহলে Enable API এ ক্লিক করুন। শেষে, আপনি APIটি নিম্নরূপ সক্রিয় দেখতে পাবেন:

ea6053f9603613b5.png সম্পর্কে

একবার ক্লাউড বিল্ড এপিআই সক্রিয় হয়ে গেলে, আপনি কন্টেইনার বিল্ডার পরিষেবা থেকে আপনার ছবি তৈরি এবং পুশ করতে নিম্নলিখিত কমান্ডটি চালাতে পারেন:

$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v3

ছবিটি স্বয়ংক্রিয়ভাবে কন্টেইনার রেজিস্ট্রিতে সংরক্ষণ করা হয়।

১৩. কুবেরনেটস গ্রাফিক্যাল ড্যাশবোর্ড চালান

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

Kubernetes ক্লাস্টার ড্যাশবোর্ডে অ্যাক্সেস কনফিগার করতে, ক্লাউড শেল উইন্ডো থেকে, এই কমান্ডগুলি টাইপ করুন:

gcloud container clusters get-credentials hello-dotnet-cluster \
    --zone europe-west1-b --project ${GOOGLE_CLOUD_PROJECT}
kubectl proxy --port 8081

এবং তারপর আবার ক্লাউড শেল প্রিভিউ বৈশিষ্ট্যটি ব্যবহার করে 8081 পোর্টে যান:

port8081.png সম্পর্কে

এটি আপনাকে API এন্ডপয়েন্টে পাঠাবে। আপনি একটি "অননুমোদিত" পৃষ্ঠা পেতে পারেন তবে এটি নিয়ে চিন্তা করবেন না। ড্যাশবোর্ডে যেতে, "?authuser=3" সরিয়ে " /ui " দিয়ে প্রতিস্থাপন করুন।

Kubernetes গ্রাফিক্যাল ড্যাশবোর্ড উপভোগ করুন এবং কন্টেইনারাইজড অ্যাপ্লিকেশন স্থাপনের জন্য, সেইসাথে আপনার ক্লাস্টারগুলি পর্যবেক্ষণ এবং পরিচালনা করার জন্য এটি ব্যবহার করুন!

১৭৭৭৮৯৫২৭বি৬৫০এফ৬বি.পিএনজি

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

অনুসরণ

a51c7160e237f32f.png সম্পর্কে

ড্যাশবোর্ডটি সম্পন্ন করার পরে, আপনি প্রক্সি বন্ধ করতে Control + C ব্যবহার করতে পারেন। ড্যাশবোর্ড ভ্রমণ করে Kubernetes ড্যাশবোর্ড সম্পর্কে আরও জানুন।

১৪. লগিং

Kubernetes এর ভেতরে চলমান একটি কন্টেইনারের লগ পুনরুদ্ধার করতে আপনি kubectl logs কমান্ড ব্যবহার করতে পারেন। যখন আপনি পরিচালিত Kubernetes ক্লাস্টার চালানোর জন্য Google Kubernetes Engine ব্যবহার করেন, তখন সমস্ত লগ স্বয়ংক্রিয়ভাবে Google Cloud Logging-এ ফরোয়ার্ড এবং সংরক্ষণ করা হয়। আপনি Google Cloud কনসোলে StackdriverLogging → Logs- এ নেভিগেট করে পড থেকে সমস্ত লগ আউটপুট দেখতে পারেন:

b63159b959ba5010.png সম্পর্কে

লগিং কনসোলে প্রবেশ করার পর, আপনি STDOUT থেকে সংগৃহীত সমস্ত লগ দেখতে GKE Container- এ যেতে পারেন:

43e9aab3e02358d5.png সম্পর্কে

এখান থেকে, আপনি ঐচ্ছিকভাবে লগগুলি Google BigQuery-তে রপ্তানি করতে পারেন যাতে আরও লগ বিশ্লেষণ করা যায়, অথবা লগ-ভিত্তিক সতর্কতা সেটআপ করা যায়। আজ ল্যাবের সময় আমরা এটি করতে পারব না।

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

ASP.NET Core এবং Kubernetes দিয়ে কোডল্যাব শুরু করার এই সহজ প্রক্রিয়াটি এখানেই শেষ হলো। আমরা কেবল এই প্রযুক্তির উপরিভাগে পৌঁছাতে পেরেছি এবং আমরা আপনাকে আপনার নিজস্ব পড, রেপ্লিকেশন কন্ট্রোলার এবং পরিষেবাগুলি ব্যবহার করে আরও অন্বেষণ করার জন্য উৎসাহিত করছি, তবে লাইভনেস প্রোব (স্বাস্থ্য পরীক্ষা) পরীক্ষা করে সরাসরি Kubernetes API ব্যবহার করার কথা বিবেচনা করতেও উৎসাহিত করছি।

পরিষ্কার কর

ব্যয়িত সম্পদ পরিষ্কার করার সময় এসেছে (খরচ বাঁচাতে এবং একজন ভালো ক্লাউড সিটিজেন হতে)।

ডিপ্লয়মেন্ট (যা চলমান পডগুলিও মুছে ফেলে) এবং সার্ভিস (যা আপনার বহিরাগত লোড ব্যালেন্সারও মুছে ফেলে) মুছে ফেলুন:

প্রথমে, পরিষেবা এবং স্থাপনা মুছে ফেলুন, যা আপনার বহিরাগত লোড ব্যালেন্সারও মুছে ফেলে:

kubectl delete service,deployment hello-dotnet
service "hello-dotnet" deleted
deployment "hello-dotnet" deleted

এরপর, আপনার ক্লাস্টারটি মুছে ফেলুন:

gcloud container clusters delete hello-dotnet-cluster --zone=europe-west1-b
The following clusters will be deleted.
 - [hello-dotnet-cluster] in [europe-west1-b]
Do you want to continue (Y/n)?  Y
Deleting cluster hello-dotnet-cluster...done.                                                                                                                                                                                            
Deleted [https://container.googleapis.com/v1/projects/<PROJECT_ID>/zones/europe-west1-b/clusters/hello-dotnet-cluster].

এটি ক্লাস্টারটি চালানো সমস্ত Google Compute Engine ইনস্ট্যান্স মুছে ফেলবে।

অবশেষে আপনার ছবি(গুলি) হোস্ট করা ডকার রেজিস্ট্রি স্টোরেজ বাকেটটি মুছে ফেলুন:

gsutil ls
gs://artifacts.<PROJECT_ID>.appspot.com/
gsutil rm -r gs://artifacts.${GOOGLE_CLOUD_PROJECT}.appspot.com/
Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
Removing gs://artifacts.<PROJECT_ID>.appspot.com/...

অবশ্যই, আপনি সম্পূর্ণ প্রকল্পটি মুছে ফেলতে পারেন তবে আপনার করা যেকোনো বিলিং সেটআপ হারাবেন (প্রথমে প্রকল্পের বিলিং অক্ষম করা প্রয়োজন)। উপরন্তু, একটি প্রকল্প মুছে ফেলার ফলে বর্তমান বিলিং চক্র শেষ হওয়ার পরেই সমস্ত বিলিং বন্ধ হয়ে যাবে।

আমরা যা কভার করেছি

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

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

লাইসেন্স

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