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

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



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

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

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

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

অ্যাপটি চালু আছে কিনা তা যাচাই করার পর, অ্যাপটি বন্ধ করতে 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
এবং আবারও ক্লাউডশেলের ওয়েব প্রিভিউ বৈশিষ্ট্যের সুবিধা নিন:

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

একবার আপনি যাচাই করে নিন যে অ্যাপটি স্থানীয়ভাবে একটি ডকার কন্টেইনারে ঠিকঠাক চলছে, আপনি Ctrl-> C ব্যবহার করে চলমান কন্টেইনারটি বন্ধ করতে পারেন।
এখন যেহেতু ছবিটি ইচ্ছামতো কাজ করছে, আপনি এটিকে Google Container Registry -এ ঠেলে দিতে পারেন, যা আপনার ডকার ছবির জন্য একটি ব্যক্তিগত সংগ্রহস্থল যা প্রতিটি Google ক্লাউড প্রকল্প থেকে (কিন্তু Google ক্লাউড প্ল্যাটফর্মের বাইরে থেকেও) অ্যাক্সেসযোগ্য:
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 বিভাগে যান এবং সিস্টেমটি চালু হওয়ার জন্য অপেক্ষা করুন (এটি মাত্র কয়েক সেকেন্ড সময় নেবে)।

একটি ক্লাস্টারে গুগল দ্বারা পরিচালিত একটি 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
আপনার এখন গুগল কুবারনেটস ইঞ্জিন দ্বারা চালিত একটি সম্পূর্ণরূপে কার্যকরী কুবারনেটস ক্লাস্টার থাকা উচিত:

এখন সময় এসেছে আপনার নিজস্ব কন্টেইনারাইজড অ্যাপ্লিকেশনটি 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

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

আপনি খুব সহজেই আপনার পরিষেবার পরিধি কমাতে পারেন। এখানে আপনি 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
১১. আপনার পরিষেবার একটি আপগ্রেড চালু করুন
এক পর্যায়ে, আপনি যে অ্যাপ্লিকেশনটি উৎপাদনে স্থাপন করেছেন তার জন্য বাগ সংশোধন বা অতিরিক্ত বৈশিষ্ট্যের প্রয়োজন হবে। দেখা যাক প্রক্রিয়াটি কেমন দেখায়।
প্রথমে, অ্যাপ্লিকেশনটি পরিবর্তন করা যাক। ক্লাউড শেল থেকে কোড এডিটরটি খুলুন।

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

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

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

একবার ক্লাউড বিল্ড এপিআই সক্রিয় হয়ে গেলে, আপনি কন্টেইনার বিল্ডার পরিষেবা থেকে আপনার ছবি তৈরি এবং পুশ করতে নিম্নলিখিত কমান্ডটি চালাতে পারেন:
$ 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 পোর্টে যান:

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

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


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

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

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