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

1. ওভারভিউ

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

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

এই ল্যাবে, আপনি Kubernetes ইঞ্জিনে চলমান Kubernetes- এ একটি সাধারণ ASP.NET কোর অ্যাপ স্থাপন করেন। এই কোডল্যাবটি Google ক্লাউড শেল কোডল্যাব থেকে ASP.NET কোর অ্যাপ তৈরি এবং চালু করে । আপনি এই ল্যাবটি চেষ্টা করার আগে প্রথমে সেই ল্যাবটি করতে চাইতে পারেন।

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

এই কোডল্যাবে খেলার বিভিন্ন অংশগুলির একটি চিত্র এখানে আপনাকে বুঝতে সাহায্য করার জন্য কিভাবে টুকরোগুলি একসাথে ফিট করে। আপনি কোডল্যাবের মাধ্যমে অগ্রগতির সাথে সাথে এটিকে একটি রেফারেন্স হিসাবে ব্যবহার করুন; আপনি যখন শেষ করবেন ততক্ষণে এটি সমস্ত বোঝা উচিত (তবে আপাতত এটিকে উপেক্ষা করুন)।

7dbdc973aceef1af.jpeg

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

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

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

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

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

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

dotnet --version

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

dotnet new mvc -o HelloWorldAspNetCore

এটি একটি প্রকল্প তৈরি করা এবং এর নির্ভরতা পুনরুদ্ধার করা উচিত। আপনি নীচের অনুরূপ একটি বার্তা দেখতে হবে.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. 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' নির্বাচন করুন।

Capture.PNG

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

f42271880ce4d572.png

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

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

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

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

touch Dockerfile

আপনার প্রিয় সম্পাদক ( vim, nano,emacs বা ক্লাউড শেলের কোড এডিটর) ব্যবহার করে 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

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

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

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

f42271880ce4d572.png

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

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

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

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

576374602b52f4e4.png

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

6. Kubernetes ক্লাস্টার তৈরি করুন

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

d5f6e3c267feea1a.png

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

একটি ক্লাস্টার তৈরি করতে আপনার CloudShell সেশন থেকে 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

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

eefb8d9b7f39598b.png

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

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

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

আপনার প্রিয় সম্পাদক ( vim, nano,emacs বা ক্লাউড শেলের কোড এডিটর) ব্যবহার করে একটি 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>

এই মুহুর্তে আপনার ধারকটি Kubernetes-এর নিয়ন্ত্রণে চলমান থাকা উচিত তবে আপনাকে এখনও এটিকে বাইরের বিশ্বের কাছে অ্যাক্সেসযোগ্য করতে হবে।

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

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

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

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

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

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

পরিষেবাটির সর্বজনীনভাবে অ্যাক্সেসযোগ্য 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

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

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

6b053874002827fe.png

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

9. আপনার পরিষেবা স্কেল

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 reconciliation loops সহজভাবে নিশ্চিত করে যে বাস্তবতা আপনার অনুরোধের সাথে মেলে এবং প্রয়োজনে ব্যবস্থা নেয়।

এখানে আপনার 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

10. স্থিতিস্থাপকতা পরীক্ষা করুন

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

প্রথমে শুঁটির তালিকা পান:

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

11. আপনার পরিষেবাতে একটি আপগ্রেড রোল আউট করুন৷

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

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

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 এ পরিবর্তন করতে হবে gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2

এটি করার জন্য, আপনি kubectl edit কমান্ডটি ব্যবহার করবেন। এটি একটি টেক্সট এডিটর খুলবে যা সম্পূর্ণ স্থাপনার ইয়ামল কনফিগারেশন প্রদর্শন করবে। এখনই সম্পূর্ণ 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 টাইপ করুন এবং "এন্টার" কী টিপুন)।

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 আপনাকে অবকাঠামো পরিচালনার পরিবর্তে আপনার অ্যাপ্লিকেশনে ফোকাস করতে সহায়তা করতে পারে।

12. ক্লাউড বিল্ড

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

প্রথমে, API ম্যানেজার > লাইব্রেরিতে ক্লাউড বিল্ড API সক্ষম করুন। ক্লাউড বিল্ডের জন্য অনুসন্ধান করুন, ক্লাউড বিল্ড এপিআই -এ ক্লিক করুন:

f8b0239fa7719f29.png

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

ea6053f9603613b5.png

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

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

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

13. Kubernetes গ্রাফিক্যাল ড্যাশবোর্ড চালান

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

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

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

177789527b650f6b.png

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

da1ccc707dd6647.png

a51c7160e237f32f.png

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

14. লগিং

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

b63159b959ba5010.png

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

43e9aab3e02358d5.png

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

15. অভিনন্দন!

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

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

লাইসেন্স

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