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

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

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

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

এই ল্যাবে, আপনি Kubernetes Engine- এ চলমান Kubernetes- এ একটি সাধারণ ASP.NET Core অ্যাপ ডেপ্লয় করবেন। এই কোডল্যাবটি “Build and launch ASP.NET Core app from Google Cloud Shell” কোডল্যাবটির উপর ভিত্তি করে তৈরি। এই ল্যাবটি করার আগে আপনি প্রথমে সেই ল্যাবটি করে নিতে পারেন।

এই কোডল্যাবের লক্ষ্য হলো আপনার কোডকে (এখানে একটি সাধারণ হ্যালো ওয়ার্ল্ড ASP.NET Core অ্যাপ) কুবারনেটিসে চালিত একটি প্রতিরূপ অ্যাপ্লিকেশনে পরিণত করা। আপনি আপনার মেশিনে তৈরি করা কোডকে একটি ডকার কন্টেইনার ইমেজে রূপান্তর করবেন এবং তারপর সেই ইমেজটি গুগল কুবারনেটিস ইঞ্জিনে চালাবেন।

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

7dbdc973aceef1af.jpeg

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

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

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

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

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

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

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

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

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

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

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

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

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

  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 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 ওয়েবপেজটি দেখতে পাবেন:

f42271880ce4d572.png

অ্যাপটি চালু আছে কিনা তা যাচাই করার পর, অ্যাপটি বন্ধ করতে 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

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

2015-11-03 17:20:22.png থেকে স্ক্রিনশট

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

f42271880ce4d572.png

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

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

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

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

চলুন, আপনার ক্লাউডশেল সেশন থেকে 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

এখন আপনার নিজের কন্টেইনারাইজড অ্যাপ্লিকেশনটি কুবারনেটিস ক্লাস্টারে ডেপ্লয় করার সময়! এখন থেকে আপনি 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 খুলে পরিষেবাটি ব্যবহার করতে পারবেন।

6b053874002827fe.png

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

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

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

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

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

এখানে আপনার কুবারনেটিস ক্লাস্টারের অবস্থার সারসংক্ষেপ দেওয়া একটি ডায়াগ্রাম রয়েছে:

6af0243662464ca9.png

আপনি খুব সহজেই আপনার সার্ভিসের আকার কমাতে পারেন। এখানে দেখানো হলো কীভাবে আপনি ৪টি পড থেকে ২টি পডে নামিয়ে আনবেন।

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

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

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

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

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

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

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

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

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

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

f8b0239fa7719f29.png

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

ea6053f9603613b5.png

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

$ 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 গ্রাফিক্যাল ড্যাশবোর্ডটি উপভোগ করুন এবং এটি কন্টেইনারাইজড অ্যাপ্লিকেশন ডেপ্লয় করার পাশাপাশি আপনার ক্লাস্টারগুলো মনিটর ও ম্যানেজ করার জন্য ব্যবহার করুন!

177789527b650f6b.png

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

da1ccc707dd6647.png

a51c7160e237f32f.png

ড্যাশবোর্ডের কাজ শেষ হয়ে গেলে, প্রক্সিটি বন্ধ করতে আপনি Control + C চাপতে পারেন। ড্যাশবোর্ড ট্যুরটি দেখে Kubernetes ড্যাশবোর্ড সম্পর্কে আরও জানুন।

১৪. লগিং

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

b63159b959ba5010.png

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

43e9aab3e02358d5.png

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

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

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 অ্যাপকে কীভাবে একটি পডে ডেপ্লয় করবেন।
  • আপনার পডে বাহ্যিক ট্র্যাফিক কীভাবে অনুমোদন করবেন।
  • কীভাবে আপনার পরিষেবার পরিধি বাড়াবেন এবং আপগ্রেড চালু করবেন
  • কিভাবে কুবারনেটিস গ্রাফিক্যাল ড্যাশবোর্ড চালাবেন

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

লাইসেন্স

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