১. সংক্ষিপ্ত বিবরণ
ASP.NET Core হলো C# প্রোগ্রামিং ভাষা ব্যবহার করে আধুনিক ক্লাউড-ভিত্তিক ও ইন্টারনেট-সংযুক্ত অ্যাপ্লিকেশন তৈরির একটি নতুন ওপেন-সোর্স এবং ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্ক।
কুবারনেটিস একটি ওপেন সোর্স প্রজেক্ট যা ল্যাপটপ থেকে শুরু করে হাই-অ্যাভেইলেবিলিটি মাল্টি-নোড ক্লাস্টার, পাবলিক ক্লাউড থেকে অন-প্রিমিস ডেপ্লয়মেন্ট এবং ভার্চুয়াল মেশিন থেকে বেয়ার মেটাল পর্যন্ত বিভিন্ন পরিবেশে চলতে পারে।
এই ল্যাবে, আপনি Kubernetes Engine- এ চলমান Kubernetes- এ একটি সাধারণ ASP.NET Core অ্যাপ ডেপ্লয় করবেন। এই কোডল্যাবটি “Build and launch ASP.NET Core app from Google Cloud Shell” কোডল্যাবটির উপর ভিত্তি করে তৈরি। এই ল্যাবটি করার আগে আপনি প্রথমে সেই ল্যাবটি করে নিতে পারেন।
এই কোডল্যাবের লক্ষ্য হলো আপনার কোডকে (এখানে একটি সাধারণ হ্যালো ওয়ার্ল্ড ASP.NET Core অ্যাপ) কুবারনেটিসে চালিত একটি প্রতিরূপ অ্যাপ্লিকেশনে পরিণত করা। আপনি আপনার মেশিনে তৈরি করা কোডকে একটি ডকার কন্টেইনার ইমেজে রূপান্তর করবেন এবং তারপর সেই ইমেজটি গুগল কুবারনেটিস ইঞ্জিনে চালাবেন।
এই কোডল্যাবের বিভিন্ন অংশ কীভাবে একে অপরের সাথে যুক্ত, তা বুঝতে সাহায্য করার জন্য এখানে একটি ডায়াগ্রাম দেওয়া হলো। কোডল্যাবটি করার সময় এটিকে একটি রেফারেন্স হিসেবে ব্যবহার করুন; শেষ পর্যন্ত পৌঁছানোর পর সবকিছু আপনার কাছে পরিষ্কার হয়ে যাবে (তবে আপাতত আপনি এটি উপেক্ষা করতে পারেন)।

এই কোডল্যাবের জন্য, Kubernetes Engine-এর (Compute Engine-এ চালিত Kubernetes-এর একটি Google-হোস্টেড সংস্করণ) মতো একটি পরিচালিত পরিবেশ ব্যবহার করলে, আপনি এর অন্তর্নিহিত পরিকাঠামো স্থাপন করার পরিবর্তে Kubernetes-এর অভিজ্ঞতা অর্জনের উপর আরও বেশি মনোযোগ দিতে পারবেন।
আপনি যদি আপনার লোকাল মেশিনে, যেমন একটি ডেভেলপমেন্ট ল্যাপটপে, কুবারনেটিস চালাতে আগ্রহী হন, তবে আপনার সম্ভবত মিনিকিউব (Minikube ) ব্যবহার করে দেখা উচিত। এটি ডেভেলপমেন্ট এবং টেস্টিংয়ের উদ্দেশ্যে একটি সিঙ্গেল নোড কুবারনেটিস ক্লাস্টারের সহজ সেটআপের সুবিধা দেয়। আপনি চাইলে এই কোডল্যাবটি করার জন্য মিনিকিউব ব্যবহার করতে পারেন।
আপনি যা শিখবেন
- একটি সাধারণ ASP.NET Core অ্যাপকে কীভাবে ডকার কন্টেইনার হিসেবে প্যাকেজ করবেন।
- গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ কীভাবে আপনার কুবারনেটিস ক্লাস্টার তৈরি করবেন।
- আপনার ASP.NET Core অ্যাপকে কীভাবে একটি পডে ডেপ্লয় করবেন।
- আপনার পডে বাহ্যিক ট্র্যাফিক কীভাবে অনুমোদন করবেন।
- কীভাবে আপনার পরিষেবার পরিধি বাড়াবেন এবং আপগ্রেড চালু করবেন
- কিভাবে কুবারনেটিস গ্রাফিক্যাল ড্যাশবোর্ড চালাবেন
আপনার যা যা লাগবে
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?
গুগল ক্লাউড প্ল্যাটফর্মের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে প্রজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং এটি অপরিবর্তনীয় (একবার সেট করার পর পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
ক্লাউড শেল শুরু করুন
যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন।
.

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

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

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই শুধুমাত্র একটি ব্রাউজার বা আপনার ক্রোমবুক দিয়ে করা সম্ভব।
ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
৩. ক্লাউড শেলে একটি ASP.NET Core অ্যাপ তৈরি করুন
ক্লাউড শেল প্রম্পটে, আপনি ডটনেট কমান্ড লাইন টুলের ভার্সন চেক করে যাচাই করতে পারেন যে এটি আগে থেকেই ইনস্টল করা আছে কিনা। এটি ইনস্টল করা ডটনেট কমান্ড লাইন টুলের ভার্সনটি প্রিন্ট করবে:
dotnet --version
এরপরে, একটি নতুন স্কেলেটন ASP.NET Core ওয়েব অ্যাপ তৈরি করুন।
dotnet new mvc -o HelloWorldAspNetCore
এটি একটি প্রজেক্ট তৈরি করবে এবং এর ডিপেন্ডেন্সিগুলো রিস্টোর করবে। আপনি নীচের মতো একটি মেসেজ দেখতে পাবেন।
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
৪. ASP.NET Core অ্যাপটি চালান।
আমরা আমাদের অ্যাপটি চালানোর জন্য প্রায় প্রস্তুত। অ্যাপ ফোল্ডারটিতে যান।
cd HelloWorldAspNetCore
অবশেষে, অ্যাপটি চালান।
dotnet run --urls=http://localhost:8080
অ্যাপ্লিকেশনটি ৮০৮০ পোর্টে শোনা শুরু করে।
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
অ্যাপটি চালু আছে কিনা তা যাচাই করতে, উপরের ডানদিকে থাকা ওয়েব প্রিভিউ বোতামে ক্লিক করুন এবং 'পোর্ট ৮০৮০-এ প্রিভিউ' নির্বাচন করুন।

আপনি ডিফল্ট ASP.NET Core ওয়েবপেজটি দেখতে পাবেন:

অ্যাপটি চালু আছে কিনা তা যাচাই করার পর, অ্যাপটি বন্ধ করতে Ctrl+C চাপুন।
৫. ASP.NET Core অ্যাপটিকে একটি ডকার কন্টেইনার হিসেবে প্যাকেজ করুন।
এরপর, আপনার অ্যাপটিকে কন্টেইনার হিসেবে চালানোর জন্য প্রস্তুত করুন। প্রথম ধাপ হলো কন্টেইনার এবং এর বিষয়বস্তু নির্ধারণ করা।
অ্যাপের বেস ডিরেক্টরিতে ডকার ইমেজটি নির্ধারণ করার জন্য একটি 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"]
আপনার ডকারফাইলে অন্তর্ভুক্ত একটি গুরুত্বপূর্ণ কনফিগারেশন হলো সেই পোর্টটি (৮০৮০), যেটিতে অ্যাপটি আগত ট্র্যাফিকের জন্য অপেক্ষা করে। এটি ASPNETCORE_URLS এনভায়রনমেন্ট ভেরিয়েবল সেট করার মাধ্যমে সম্পন্ন করা হয়, যা ASP.NET Core অ্যাপগুলো কোন পোর্টে অপেক্ষা করবে তা নির্ধারণ করতে ব্যবহার করে।
এই 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
এবং আবারও ক্লাউডশেলের ওয়েব প্রিভিউ ফিচারের সুবিধা নিন:

আপনি একটি নতুন ট্যাবে ডিফল্ট ASP.NET Core ওয়েবপেজটি দেখতে পাবেন।

ডকার কন্টেইনারে অ্যাপটি স্থানীয়ভাবে ঠিকঠাক চলছে কিনা তা যাচাই করার পর, আপনি Ctrl-> C চেপে চলমান কন্টেইনারটি বন্ধ করতে পারেন।
এখন যেহেতু ইমেজটি উদ্দেশ্য অনুযায়ী কাজ করছে, আপনি এটিকে গুগল কন্টেইনার রেজিস্ট্রি- তে পুশ করতে পারেন। এটি আপনার ডকার ইমেজগুলির জন্য একটি ব্যক্তিগত রিপোজিটরি, যা প্রতিটি গুগল ক্লাউড প্রজেক্ট থেকে (এবং গুগল ক্লাউড প্ল্যাটফর্মের বাইরে থেকেও) অ্যাক্সেস করা যায়।
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
সবকিছু ঠিকঠাক থাকলে এবং কিছুক্ষণ পর, আপনি কন্টেইনার রেজিস্ট্রি বিভাগে কন্টেইনার ইমেজটি তালিকাভুক্ত দেখতে পাবেন। এই পর্যায়ে, আপনার কাছে এখন একটি প্রোজেক্ট-ব্যাপী ডকার ইমেজ উপলব্ধ আছে, যা কুবারনেটিস অ্যাক্সেস এবং অর্কেস্ট্রেট করতে পারবে, যেমনটা আপনি কয়েক মিনিটের মধ্যেই দেখতে পাবেন।

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

একটি ক্লাস্টার গুগল দ্বারা পরিচালিত একটি কুবারনেটিস মাস্টার এপিআই সার্ভার এবং এক সেট ওয়ার্কার নোড নিয়ে গঠিত। ওয়ার্কার নোডগুলো হলো কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন।
চলুন, আপনার ক্লাউডশেল সেশন থেকে 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
এখন আপনার কাছে গুগল কুবারনেটিস ইঞ্জিন দ্বারা চালিত একটি সম্পূর্ণ কার্যকরী কুবারনেটিস ক্লাস্টার থাকার কথা:

এখন আপনার নিজের কন্টেইনারাইজড অ্যাপ্লিকেশনটি কুবারনেটিস ক্লাস্টারে ডেপ্লয় করার সময়! এখন থেকে আপনি kubectl কমান্ড লাইন ব্যবহার করবেন (যা আপনার ক্লাউড শেল এনভায়রনমেন্টে আগে থেকেই সেট আপ করা আছে)। এই কোডল্যাবের বাকি অংশের জন্য কুবারনেটিস ক্লায়েন্ট এবং সার্ভার উভয়ের ভার্সন ১.২ বা তার বেশি হতে হবে। kubectl version কমান্ডটি আপনাকে এর বর্তমান ভার্সন দেখাবে।
৭. ডেপ্লয়মেন্ট তৈরি করুন
একটি কুবারনেটিস পড হলো একগুচ্ছ কন্টেইনার, যা প্রশাসন এবং নেটওয়ার্কিংয়ের উদ্দেশ্যে একসাথে যুক্ত থাকে। এতে একটি বা একাধিক কন্টেইনার থাকতে পারে। এখানে আপনি আপনার ব্যক্তিগত কন্টেইনার রেজিস্ট্রিতে সংরক্ষিত ASP.NET Core ইমেজ দিয়ে তৈরি একটিমাত্র কন্টেইনার ব্যবহার করবেন। এটি ৮০৮০ পোর্টে কন্টেন্ট পরিবেশন করবে।
আপনার পছন্দের এডিটর ( vim, nano,emacs অথবা Cloud Shell-এর কোড এডিটর) ব্যবহার করে একটি hello-dotnet.yaml ফাইল তৈরি করুন এবং পডটির জন্য Kubernetes Deployment নির্ধারণ করুন:
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" ফ্ল্যাগটি ব্যবহার করে পডটিকে পাবলিক ইন্টারনেটে উন্মুক্ত করতে পারেন। বাহ্যিকভাবে অ্যাক্সেসযোগ্য একটি আইপি তৈরির জন্য এই ফ্ল্যাগটি আবশ্যক।
kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080
এই কমান্ডে ব্যবহৃত ফ্ল্যাগটি নির্দেশ করে যে আপনি অন্তর্নিহিত পরিকাঠামো দ্বারা প্রদত্ত লোড-ব্যালেন্সার ব্যবহার করবেন (এই ক্ষেত্রে কম্পিউট ইঞ্জিন লোড ব্যালেন্সার )। লক্ষ্য করুন যে আপনি ডিপ্লয়মেন্টটিকে এক্সপোজ করছেন, সরাসরি পডটিকে নয়। এর ফলে তৈরি হওয়া সার্ভিসটি ডিপ্লয়মেন্ট দ্বারা পরিচালিত সমস্ত পডের মধ্যে ট্র্যাফিক লোড ব্যালেন্স করবে (এই ক্ষেত্রে মাত্র ১টি পড, কিন্তু আপনি পরে আরও রেপ্লিকা যোগ করবেন)।
গুগল ক্লাউড প্ল্যাটফর্মের বাইরে থেকে পরিষেবাটিকে সম্পূর্ণরূপে অ্যাক্সেসযোগ্য করার জন্য কুবারনেটিস মাস্টার লোড ব্যালেন্সার এবং সংশ্লিষ্ট কম্পিউট ইঞ্জিন ফরওয়ার্ডিং রুল, টার্গেট পুল ও ফায়ারওয়াল রুল তৈরি করে।
সার্ভিসটির সর্বজনীনভাবে অ্যাক্সেসযোগ্য আইপি অ্যাড্রেস খুঁজে পেতে, কেবল 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
লক্ষ্য করুন, আপনার পরিষেবার জন্য দুটি আইপি অ্যাড্রেস তালিকাভুক্ত আছে, উভয়ই পোর্ট 8080 ব্যবহার করে। একটি হলো অভ্যন্তরীণ আইপি যা শুধুমাত্র আপনার ক্লাউড ভার্চুয়াল নেটওয়ার্কের ভেতরে দেখা যায়; অন্যটি হলো বাহ্যিক লোড-ব্যালেন্সড আইপি। এই উদাহরণে, বাহ্যিক আইপি অ্যাড্রেসটি হলো 104.155.20.69 ।
এখন আপনি আপনার ব্রাউজারে এই ঠিকানাটি ( http://<EXTERNAL_IP> :8080 খুলে পরিষেবাটি ব্যবহার করতে পারবেন।

এই পর্যায়ে, কন্টেইনার এবং কুবারনেটিসে স্থানান্তরিত হওয়ার ফলে আপনি ইতিমধ্যেই বেশ কিছু সুবিধা পেয়েছেন — আপনার ওয়ার্কলোড চালানোর জন্য কোন হোস্ট নির্দিষ্ট করে দিতে হবে তা আর করতে হবে না, এবং আপনি সার্ভিস মনিটরিং ও রিস্টার্টের সুবিধাও পাবেন। চলুন দেখি আপনার নতুন কুবারনেটিস পরিকাঠামো থেকে আর কী কী সুবিধা পেতে পারেন।
৯. আপনার পরিষেবার পরিধি বাড়ান।
কুবারনেটিসের অন্যতম শক্তিশালী বৈশিষ্ট্য হলো আপনার অ্যাপ্লিকেশনকে স্কেল করা কতটা সহজ। ধরুন, হঠাৎ আপনার অ্যাপ্লিকেশনের জন্য আরও ধারণক্ষমতার প্রয়োজন হলো; আপনি খুব সহজেই রেপ্লিকেশন কন্ট্রোলারকে আপনার পডের জন্য নতুন সংখ্যক রেপ্লিকা পরিচালনা করতে বলতে পারেন:
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
এখানে ডিক্লারেটিভ পদ্ধতিটি লক্ষ্য করুন - নতুন ইনস্ট্যান্স শুরু বা বন্ধ করার পরিবর্তে, আপনি ঘোষণা করেন যে সব সময় কতগুলো ইনস্ট্যান্স চালু থাকবে। কুবারনেটিস রিকনসিলিয়েশন লুপগুলো কেবল নিশ্চিত করে যে বাস্তবতা আপনার অনুরোধের সাথে মিলছে এবং প্রয়োজনে ব্যবস্থা গ্রহণ করে।
এখানে আপনার কুবারনেটিস ক্লাস্টারের অবস্থার সারসংক্ষেপ দেওয়া একটি ডায়াগ্রাম রয়েছে:

আপনি খুব সহজেই আপনার সার্ভিসের আকার কমাতে পারেন। এখানে দেখানো হলো কীভাবে আপনি ৪টি পড থেকে ২টি পডে নামিয়ে আনবেন।
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
১০. পরীক্ষার স্থিতিস্থাপকতা
কুবারনেটিস (বা আরও নির্দিষ্টভাবে বললে রেপ্লিকাসেট) আপনার পডগুলোর ওপর নজর রাখে এবং যদি পডটিতে কোনো সমস্যা হয় ও সেটি ডাউন হয়ে যায়, তবে এটি সঙ্গে সঙ্গে একটি নতুন পড তৈরি করে নেয়। চলুন এটি পরীক্ষা করে দেখি এবং জেনে নিই এটি কীভাবে কাজ করে।
প্রথমে পডগুলোর তালিকা সংগ্রহ করুন:
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
১১. আপনার পরিষেবাতে একটি আপগ্রেড চালু করুন।
এক পর্যায়ে, আপনার প্রোডাকশনে ডেপ্লয় করা অ্যাপ্লিকেশনটিতে বাগ ফিক্স বা অতিরিক্ত ফিচারের প্রয়োজন হবে। চলুন দেখি সেই প্রক্রিয়াটি কেমন।
প্রথমে, অ্যাপ্লিকেশনটি পরিবর্তন করা যাক। ক্লাউড শেল থেকে কোড এডিটরটি খুলুন।

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
এই সময়ে পরিষেবা ব্যবহারকারীদের কোনো বাধার সম্মুখীন হওয়া উচিত নয়। কিছুক্ষণ পরেই তাঁরা আপনার অ্যাপ্লিকেশনের নতুন সংস্করণটি ব্যবহার করা শুরু করবেন।

রোলিং আপডেট সম্পর্কে আরও বিস্তারিত তথ্য আপনি কুবারনেটিস ডকুমেন্টেশনে পেতে পারেন।
আশা করি, এই ডেপ্লয়মেন্ট, স্কেলিং এবং আপডেট ফিচারগুলোর মাধ্যমে আপনি একমত হবেন যে, একবার আপনার এনভায়রনমেন্ট (এখানে আপনার GKE/Kubernetes ক্লাস্টার) সেটআপ করে ফেললে, Kubernetes আপনাকে ইনফ্রাস্ট্রাকচার পরিচালনার পরিবর্তে আপনার অ্যাপ্লিকেশনের উপর মনোযোগ দিতে সাহায্য করতে পারে।
১২. ক্লাউড বিল্ড
এখন পর্যন্ত, আমরা সাধারণ ডকার কমান্ড (docker build ...) ব্যবহার করে কন্টেইনার তৈরি করে আসছি এবং তারপর ম্যানুয়ালি ইমেজটি গুগল ক্লাউড প্ল্যাটফর্মের কন্টেইনার রেজিস্ট্রি-তে পুশ করেছি। এই দুটি ধাপই সার্ভার-সাইড ক্লাউড বিল্ড-এর উপর ছেড়ে দেওয়াও সম্ভব, যা স্থানীয়ভাবে ডকার ইনস্টল করা ছাড়াই কন্টেইনার ইমেজ তৈরি ও পুশ করতে পারে।
প্রথমে, API Manager > Library-তে Cloud Build API সক্রিয় করুন। Cloud Build অনুসন্ধান করুন, Cloud Build API- তে ক্লিক করুন:

যদি আগে থেকে চালু না থাকে, তাহলে ‘Enable API’-তে ক্লিক করুন। সবশেষে, আপনি API-টি নিম্নরূপভাবে চালু দেখতে পাবেন:

একবার ক্লাউড বিল্ড এপিআই সক্রিয় করা হলে, আপনি কন্টেইনার বিল্ডার পরিষেবা থেকেই আপনার ইমেজ বিল্ড এবং পুশ করতে নিম্নলিখিত কমান্ডটি চালাতে পারেন:
$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v3
ইমেজটি স্বয়ংক্রিয়ভাবে কন্টেইনার রেজিস্ট্রি-তে সংরক্ষিত হয়।
১৩. কুবারনেটিস গ্রাফিক্যাল ড্যাশবোর্ডটি চালান।
Kubernetes-এর সাম্প্রতিক সংস্করণগুলিতে একটি গ্রাফিক্যাল ওয়েব ইউজার ইন্টারফেস (ড্যাশবোর্ড) চালু করা হয়েছে। এই ইউজার ইন্টারফেসটি আপনাকে দ্রুত কাজ শুরু করতে সাহায্য করে এবং সিস্টেমের সাথে যোগাযোগের একটি আরও সহজবোধ্য ও সহজে খুঁজে পাওয়ার উপায় হিসেবে CLI-তে থাকা কিছু কার্যকারিতা ব্যবহারের সুযোগ দেয়।
Kubernetes ক্লাস্টার ড্যাশবোর্ডে অ্যাক্সেস কনফিগার করতে, Cloud Shell উইন্ডো থেকে এই কমান্ডগুলো টাইপ করুন:
gcloud container clusters get-credentials hello-dotnet-cluster \
--zone europe-west1-b --project ${GOOGLE_CLOUD_PROJECT}
kubectl proxy --port 8081
এবং তারপরে আরও একবার ক্লাউড শেল প্রিভিউ ফিচারটি ব্যবহার করে পোর্ট ৮০৮১- এ চলে যান:

এটি আপনাকে এপিআই এন্ডপয়েন্টে নিয়ে যাবে। আপনি একটি "Unauthorized" পেজ পেতে পারেন, কিন্তু তা নিয়ে চিন্তা করবেন না। ড্যাশবোর্ডে যাওয়ার জন্য, "?authuser=3" মুছে ফেলুন এবং এর পরিবর্তে " /ui " বসান।
Kubernetes গ্রাফিক্যাল ড্যাশবোর্ডটি উপভোগ করুন এবং এটি কন্টেইনারাইজড অ্যাপ্লিকেশন ডেপ্লয় করার পাশাপাশি আপনার ক্লাস্টারগুলো মনিটর ও ম্যানেজ করার জন্য ব্যবহার করুন!

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


ড্যাশবোর্ডের কাজ শেষ হয়ে গেলে, প্রক্সিটি বন্ধ করতে আপনি Control + C চাপতে পারেন। ড্যাশবোর্ড ট্যুরটি দেখে Kubernetes ড্যাশবোর্ড সম্পর্কে আরও জানুন।
১৪. লগিং
Kubernetes-এর ভিতরে চলমান একটি কন্টেইনারের লগগুলি পুনরুদ্ধার করতে আপনি kubectl logs কমান্ডটি ব্যবহার করতে পারেন। যখন আপনি পরিচালিত Kubernetes ক্লাস্টারগুলি চালানোর জন্য Google Kubernetes Engine ব্যবহার করেন, তখন সমস্ত লগ স্বয়ংক্রিয়ভাবে Google Cloud Logging-এ ফরোয়ার্ড এবং সংরক্ষিত হয়। Google Cloud কনসোলে Stackdriver → Logging → Logs- এ গিয়ে আপনি পডগুলির সমস্ত লগ আউটপুট দেখতে পারেন।

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

এখান থেকে, আপনি চাইলে আরও লগ বিশ্লেষণের জন্য লগগুলো গুগল বিগকোয়েরিতে এক্সপোর্ট করতে পারেন, অথবা লগ-ভিত্তিক অ্যালার্টিং সেটআপ করতে পারেন। আজকের ল্যাবে আমরা এটি করতে পারব না।
১৫. অভিনন্দন!
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].
এটি ক্লাস্টারটি পরিচালনাকারী সমস্ত গুগল কম্পিউট ইঞ্জিন ইনস্ট্যান্স মুছে দেয়।
অবশেষে আপনার ইমেজ(গুলি) ধারণকারী ডকার রেজিস্ট্রি স্টোরেজ বাকেটটি মুছে ফেলুন:
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 Core অ্যাপকে কীভাবে ডকার কন্টেইনার হিসেবে প্যাকেজ করবেন।
- গুগল কুবারনেটিস ইঞ্জিনে কীভাবে আপনার কুবারনেটিস ক্লাস্টার তৈরি করবেন
- আপনার ASP.NET Core অ্যাপকে কীভাবে একটি পডে ডেপ্লয় করবেন।
- আপনার পডে বাহ্যিক ট্র্যাফিক কীভাবে অনুমোদন করবেন।
- কীভাবে আপনার পরিষেবার পরিধি বাড়াবেন এবং আপগ্রেড চালু করবেন
- কিভাবে কুবারনেটিস গ্রাফিক্যাল ড্যাশবোর্ড চালাবেন
পরবর্তী পদক্ষেপ
- Kubernetes সম্পর্কে আরও জানুন ( http://kubernetes.io/ )।
- গুগল ক্লাউড প্ল্যাটফর্মে উইন্ডোজ সম্পর্কে আরও জানুন।
- গুগল ক্লাউড প্ল্যাটফর্মে .NET সম্পর্কে আরও জানুন।
- গুগল ক্লাউড প্ল্যাটফর্মে SQL সার্ভার সম্পর্কে আরও জানুন।
- ভিজ্যুয়াল স্টুডিও-এর জন্য ক্লাউড টুলস সম্পর্কে আরও জানুন।
- পাওয়ারশেলের জন্য ক্লাউড টুলস সম্পর্কে আরও জানুন।
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।