GKE অটোপাইলটের সাথে ক্লাউড স্প্যানার সংযোগ করা হচ্ছে

1. ভূমিকা

ক্লাউড স্প্যানার হল একটি সম্পূর্ণরূপে পরিচালিত অনুভূমিকভাবে পরিমাপযোগ্য, বিশ্বব্যাপী বিতরণ করা, রিলেশনাল ডাটাবেস পরিষেবা যা কর্মক্ষমতা এবং উচ্চ প্রাপ্যতা ছাড়াই ACID লেনদেন এবং SQL শব্দার্থবিদ্যা প্রদান করে।

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

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

3d810aa9ec80a271.png

এই ল্যাবে, আপনি প্রথমে একটি প্রকল্প সেট আপ করবেন এবং ক্লাউড শেল চালু করবেন। তারপরে আপনি টেরাফর্ম ব্যবহার করে অবকাঠামো স্থাপন করবেন।

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

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

কাজের চাপ এবং ব্যাকএন্ড পরিষেবাগুলি চলার সাথে, আপনি লোড তৈরি করা শুরু করতে পারেন এবং পরিষেবাগুলি কীভাবে কাজ করে তা পর্যবেক্ষণ করতে পারেন।

অবশেষে, আপনি এই ল্যাবে তৈরি করা সংস্থানগুলি পরিষ্কার করবেন।

আপনি কি নির্মাণ করবেন

এই ল্যাবের অংশ হিসাবে, আপনি করবেন:

  • টেরাফর্ম ব্যবহার করে পরিকাঠামোর ব্যবস্থা করুন
  • ক্লাউড বিল্ডে স্কিমা মাইগ্রেশন প্রক্রিয়া ব্যবহার করে ডাটাবেস স্কিমা তৈরি করুন
  • ক্লাউড স্প্যানারের সাথে সংযোগ করার জন্য ওয়ার্কলোড আইডেন্টিটি ব্যবহার করে এমন চারটি গোলং ব্যাকএন্ড পরিষেবা স্থাপন করুন৷
  • ব্যাকএন্ড পরিষেবাগুলির জন্য লোড অনুকরণ করতে ব্যবহৃত চারটি কাজের চাপ পরিষেবাগুলি স্থাপন করুন৷

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

  • টেরাফর্ম ব্যবহার করে GKE অটোপাইলট, ক্লাউড স্প্যানার এবং ক্লাউড ডিপ্লোয় পাইপলাইনগুলি কীভাবে সরবরাহ করবেন
  • কিভাবে ওয়ার্কলোড আইডেন্টিটি ক্লাউড স্প্যানারের সাথে কাজ করার জন্য IAM অনুমতিগুলি অ্যাক্সেস করার জন্য GKE-এর পরিষেবাগুলিকে পরিষেবা অ্যাকাউন্টের ছদ্মবেশী করার অনুমতি দেয়
  • Locust.io ব্যবহার করে GKE এবং ক্লাউড স্প্যানারে কীভাবে উত্পাদনের মতো লোড তৈরি করা যায়

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

  • একটি Google ক্লাউড প্রকল্প যা একটি বিলিং অ্যাকাউন্টের সাথে সংযুক্ত৷
  • একটি ওয়েব ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স

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

একটি প্রকল্প তৈরি করুন

আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে (Gmail বা Google Apps), তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google ক্লাউড প্ল্যাটফর্ম কনসোলে সাইন-ইন করুন ( console.cloud.google.com ) এবং একটি নতুন প্রকল্প তৈরি করুন৷

আপনার যদি ইতিমধ্যে একটি প্রকল্প থাকে, তাহলে কনসোলের উপরের বাম দিকে প্রজেক্ট নির্বাচন পুল ডাউন মেনুতে ক্লিক করুন:

6c9406d9b014760.png

এবং একটি নতুন প্রকল্প তৈরি করতে ফলাফল ডায়ালগে ' নতুন প্রকল্প ' বোতামে ক্লিক করুন:

949d83c8a4ee17d9.png

আপনার যদি ইতিমধ্যে একটি প্রকল্প না থাকে, তাহলে আপনার প্রথমটি তৈরি করতে আপনাকে এই মত একটি ডায়ালগ দেখতে হবে:

870a3cbd6541ee86.png

পরবর্তী প্রকল্প তৈরির ডায়ালগ আপনাকে আপনার নতুন প্রকল্পের বিশদ বিবরণ প্রবেশ করতে দেয়:

6a92c57d3250a4b3.png

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID হিসাবে উল্লেখ করা হবে।

পরবর্তী, যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে Google ক্লাউড সংস্থানগুলি ব্যবহার করতে এবং ক্লাউড স্প্যানার API সক্ষম করার জন্য আপনাকে বিকাশকারী কনসোলে বিলিং সক্ষম করতে হবে৷

15d0ef27a8fbab27.png

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

Google ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য, যা এই কোডল্যাবটিকে সম্পূর্ণ বিনামূল্যে করতে হবে৷

ক্লাউড শেল সেটআপ

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

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

  1. ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন gcLMt5IuEcJJNnMId-Bcz3sxCd0rZn7IzT_r95C8UZeqML68Y1efBG_B0VRp7hc7qiZTLAF-TXD7SsOadxn8uadgHhaLeASnVS3ZHKLJXOgOg39g ddS2A (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগের জন্য এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে)।

JjEuRXGg0AYYIY6QZ8d-66gx_Mtc-_jDE9ijmbXLJSAXFvJt-qUpNtsBsYjNpv2W6BQSrDc1D-ARINNQ-1EkwUhz-iUK-FUCZhJ-NtjvDu64GoM8 Rw

স্ক্রীন শট 2017-06-14 10.13.43 PM.png এ

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

gcloud auth list

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

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

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

[core]
project = <PROJECT_ID>

যদি, কোন কারণে, প্রকল্পটি সেট করা না হয়, কেবল নিম্নলিখিত কমান্ডটি জারি করুন:

gcloud config set project <PROJECT_ID>

আপনার PROJECT_ID খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন বা ক্লাউড কনসোল ড্যাশবোর্ডে দেখুন:

158fNPfwSxsFqz9YbtJVZes8viTS3d1bV4CVhij3XPxuzVFOtTObnwsphlm6lYGmgdMFwBJtc-FaLrZU7XHAg_ZYoCrgombMRR3h-eolLPcvOBziBc35650

ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা আপনার ভবিষ্যত কমান্ড চালানোর সময় কার্যকর হতে পারে।

echo $GOOGLE_CLOUD_PROJECT

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

<PROJECT_ID>

কোডটি ডাউনলোড করুন

ক্লাউড শেলে, আপনি এই ল্যাবের জন্য কোডটি ডাউনলোড করতে পারেন:

git clone https://github.com/cloudspannerecosystem/spanner-gaming-sample.git

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

Cloning into 'spanner-gaming-sample'...
*snip*

এই কোডল্যাবটি v0.1.3 রিলিজের উপর ভিত্তি করে, তাই সেই ট্যাগটি পরীক্ষা করে দেখুন:

cd spanner-gaming-sample
git fetch --all --tags

# Check out v0.1.3 release
git checkout tags/v0.1.3 -b v0.1.3-branch

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

Switched to a new branch 'v0.1.3-branch'

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

export DEMO_HOME=$(pwd)

সারাংশ

এই ধাপে আপনি একটি নতুন প্রকল্প সেট আপ করেছেন, ক্লাউড শেল সক্রিয় করেছেন এবং এই ল্যাবের জন্য কোডটি ডাউনলোড করেছেন৷

পরবর্তী আপ

এর পরে, আপনি Terraform ব্যবহার করে পরিকাঠামোর ব্যবস্থা করবেন।

3. অবকাঠামো প্রদান

ওভারভিউ

আপনার প্রকল্প প্রস্তুত হলে, এটি পরিকাঠামো চালু করার সময়। এর মধ্যে রয়েছে VPC নেটওয়ার্কিং, ক্লাউড স্প্যানার, GKE অটোপাইলট, GKE-তে চলমান চিত্রগুলি সংরক্ষণ করার জন্য আর্টিফ্যাক্ট রেজিস্ট্রি, ব্যাকএন্ড পরিষেবা এবং কাজের চাপের জন্য ক্লাউড ডিপ্লোয় পাইপলাইন এবং অবশেষে সেই পরিষেবাগুলি ব্যবহার করতে সক্ষম হওয়ার জন্য পরিষেবা অ্যাকাউন্ট এবং IAM বিশেষাধিকার।

এটা অনেক. কিন্তু সৌভাগ্যবশত, Terraform এই সেট আপ করা সহজ করতে পারে। টেরাফর্ম হল একটি "কোড হিসাবে অবকাঠামো" টুল যা আমাদের '.tf' ফাইলগুলির একটি সিরিজে এই প্রকল্পের জন্য আমাদের কী প্রয়োজন তা নির্দিষ্ট করতে দেয়। এটি পরিকাঠামো ব্যবস্থা সহজ করে তোলে।

টেরাফর্মের সাথে পরিচিত হওয়া এই কোডল্যাবটি সম্পূর্ণ করার জন্য প্রয়োজনীয় নয়। কিন্তু আপনি যদি দেখতে চান যে পরবর্তী কয়েকটি ধাপ কি করছে, তাহলে আপনি অবকাঠামো ডিরেক্টরিতে অবস্থিত এই ফাইলগুলিতে কী তৈরি করা হয়েছে তা একবার দেখে নিতে পারেন:

  • vpc.tf
  • backend_gke.tf
  • spanner.tf
  • artifact_registry.tf
  • pipelines.tf
  • iam.tf

Terraform কনফিগার করুন

ক্লাউড শেলে, আপনি infrastructure ডিরেক্টরিতে পরিবর্তন করবেন এবং টেরাফর্ম শুরু করবেন:

cd $DEMO_HOME/infrastructure
terraform init

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

Initializing the backend...

Initializing provider plugins...
*snip*
Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

এরপর, terraform.tfvars.sample অনুলিপি করে এবং প্রকল্পের মান পরিবর্তন করে Terraform কনফিগার করুন। অন্যান্য ভেরিয়েবলগুলিও পরিবর্তন করা যেতে পারে, তবে প্রকল্পটি একমাত্র যা আপনার পরিবেশের সাথে কাজ করার জন্য পরিবর্তন করতে হবে।

cp  terraform.tfvars.sample terraform.tfvars
# edit gcp_project using the project environment variable
sed -i "s/PROJECT/$GOOGLE_CLOUD_PROJECT/" terraform.tfvars

পরিকাঠামোর ব্যবস্থা করা

এখন পরিকাঠামোর ব্যবস্থা করার পালা!

terraform apply
# review the list of things to be created
# type 'yes' when asked

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

Plan: 46 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

google_project_service.project["container.googleapis.com"]: Creating...
*snip*
Apply complete! Resources: 46 added, 0 changed, 0 destroyed.

কি তৈরি করা হয়েছে চেক করুন

কি তৈরি করা হয়েছে তা যাচাই করতে, আপনি ক্লাউড কনসোলে পণ্যগুলি পরীক্ষা করতে চান৷

ক্লাউড স্প্যানার

প্রথমে, হ্যামবার্গার মেনুতে নেভিগেট করে এবং Spanner ক্লিক করে ক্লাউড স্প্যানার চেক করুন। তালিকায় এটি খুঁজে পেতে আপনাকে 'আরো পণ্য দেখুন' ক্লিক করতে হতে পারে৷

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

10b7fc0c4a86c59.png

GKE অটোপাইলট

এরপর, হ্যামবার্গার মেনুতে নেভিগেট করে এবং Kubernetes Engine => Clusters ক্লিক করে GKE চেক করুন। এখানে আপনি অটোপাইলট মোডে sample-games-gke ক্লাস্টার দেখতে পাবেন।

9cecb1a702e6b7ff.png

আর্টিফ্যাক্ট রেজিস্ট্রি

এখন আপনি দেখতে চাইবেন ছবিগুলি কোথায় সংরক্ষণ করা হবে। তাই হ্যামবার্গার মেনুতে ক্লিক করুন এবং Artifact Registry=>Repositories খুঁজুন। আর্টিফ্যাক্ট রেজিস্ট্রি মেনুর CI/CD বিভাগে রয়েছে।

এখানে, আপনি spanner-game-images নামে একটি ডকার রেজিস্ট্রি দেখতে পাবেন। এই আপাতত খালি হবে.

3f805eee312841b.png

ক্লাউড স্থাপন

ক্লাউড ডিপ্লোয় হল যেখানে পাইপলাইনগুলি তৈরি করা হয়েছিল যাতে ক্লাউড বিল্ড ছবিগুলি তৈরি করার পদক্ষেপগুলি প্রদান করতে পারে এবং তারপরে সেগুলিকে আমাদের GKE ক্লাস্টারে স্থাপন করতে পারে৷

হ্যামবার্গার মেনুতে নেভিগেট করুন এবং Cloud Deploy খুঁজুন, যা মেনুর CI/CD বিভাগেও রয়েছে।

এখানে আপনি দুটি পাইপলাইন লক্ষ্য করবেন: একটি ব্যাকএন্ড পরিষেবার জন্য এবং একটি কাজের চাপের জন্য৷ তারা উভয়ই চিত্রগুলিকে একই GKE ক্লাস্টারে স্থাপন করে, তবে এটি আমাদের স্থাপনাগুলিকে আলাদা করার অনুমতি দেয়।

d2e4a659145ddf5e.png

আইএএম

অবশেষে, তৈরি করা পরিষেবা অ্যাকাউন্টগুলি যাচাই করতে ক্লাউড কনসোলে IAM পৃষ্ঠাটি দেখুন। হ্যামবার্গার মেনুতে নেভিগেট করুন এবং IAM and Admin=>Service accounts খুঁজুন। এটি এই মত কিছু দেখা উচিত:

bed3d1af94974916.png

টেরাফর্ম দ্বারা তৈরি করা মোট ছয়টি পরিষেবা অ্যাকাউন্ট রয়েছে:

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

এরপর আপনি GKE ক্লাস্টারের সাথে ইন্টারঅ্যাক্ট করতে kubectl কনফিগার করতে চাইবেন।

kubectl কনফিগার করুন

# Name of GKE cluster from terraform.tfvars file
export GKE_CLUSTER=sample-game-gke 

# get GKE credentials
gcloud container clusters get-credentials $GKE_CLUSTER --region us-central1

# Check that no errors occur
kubectl get serviceaccounts

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

#export GKE_CLUSTER=sample-game-gke

# gcloud container clusters get-credentials $GKE_CLUSTER --region us-central1
Fetching cluster endpoint and auth data.
kubeconfig entry generated for sample-game-gke.

# kubectl get serviceaccounts
NAME              SECRETS   AGE
default           0         37m
item-app          0         35m
matchmaking-app   0         35m
profile-app       0         35m
tradepost-app     0         35m

সারাংশ

দারুণ! আপনি একটি ক্লাউড স্প্যানার ইনস্ট্যান্স, একটি GKE অটোপাইলট ক্লাস্টার, সবই প্রাইভেট নেটওয়ার্কিংয়ের জন্য একটি VPC-তে ব্যবস্থা করতে সক্ষম হয়েছেন৷

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

এবং অবশেষে, পরিষেবা অ্যাকাউন্টগুলি তৈরি করা হয়েছিল এবং ওয়ার্কলোড আইডেন্টিটির সাথে কাজ করার জন্য কনফিগার করা হয়েছিল যাতে ব্যাকএন্ড পরিষেবাগুলি ক্লাউড স্প্যানার ব্যবহার করতে পারে৷

আপনি ব্যাকএন্ড পরিষেবা এবং কাজের চাপগুলি স্থাপন করার পরে ক্লাউড শেল-এ GKE ক্লাস্টারের সাথে ইন্টারঅ্যাক্ট করার জন্য kubectl কনফিগার করেছেন।

পরবর্তী আপ

আপনি পরিষেবাগুলি ব্যবহার করার আগে, ডাটাবেস স্কিমা সংজ্ঞায়িত করা প্রয়োজন৷ আপনি পরবর্তী সেট আপ হবে.

4. ডাটাবেস স্কিমা তৈরি করুন

ওভারভিউ

আপনি ব্যাকএন্ড পরিষেবাগুলি চালানোর আগে, আপনাকে নিশ্চিত করতে হবে যে ডাটাবেস স্কিমা ঠিক আছে।

আপনি যদি ডেমো রিপোজিটরি থেকে $DEMO_HOME/schema/migrations ডিরেক্টরির ফাইলগুলি দেখেন, আপনি .sql ফাইলগুলির একটি সিরিজ দেখতে পাবেন যা আমাদের স্কিমাকে সংজ্ঞায়িত করে। এটি একটি উন্নয়ন চক্রের অনুকরণ করে যেখানে স্কিমা পরিবর্তনগুলি সংগ্রহস্থলেই ট্র্যাক করা হয় এবং অ্যাপ্লিকেশনগুলির নির্দিষ্ট বৈশিষ্ট্যগুলির সাথে সংযুক্ত করা যেতে পারে।

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

ক্লাউড বিল্ড

$DEMO_HOME/schema/cloudbuild.yaml ফাইলটি বর্ণনা করে যে কী পদক্ষেপ নেওয়া হবে:

serviceAccount: projects/${PROJECT_ID}/serviceAccounts/cloudbuild-cicd@${PROJECT_ID}.iam.gserviceaccount.com
steps:
- name: gcr.io/cloud-builders/curl
 id: fetch-wrench
 args: ['-Lo', '/workspace/wrench.tar.gz', 'https://github.com/cloudspannerecosystem/wrench/releases/download/v1.4.1/wrench-1.4.1-linux-amd64.tar.gz' ]

- name: gcr.io/cloud-builders/gcloud
 id: migrate-spanner-schema
 entrypoint: sh
 args:
 - '-xe'
 - '-c'
 - |
   tar -xzvf wrench.tar.gz

   chmod +x /workspace/wrench

   # Assumes only a single spanner instance and database. Fine for this demo in a dedicated project
   export SPANNER_PROJECT_ID=${PROJECT_ID}
   export SPANNER_INSTANCE_ID=$(gcloud spanner instances list | tail -n1 | awk '{print $1}')
   export SPANNER_DATABASE_ID=$(gcloud spanner databases list --instance=$$SPANNER_INSTANCE_ID | tail -n1 | awk '{print $1}')

   if [ -d ./migrations ]; then
     /workspace/wrench migrate up --directory .
   else
     echo "[Error] Missing migrations directory"
   fi
timeout: 600s

মূলত দুটি ধাপ আছে:

  • ক্লাউড বিল্ড ওয়ার্কস্পেসে রেঞ্চ ডাউনলোড করুন
  • রেঞ্চ মাইগ্রেশন চালান

স্প্যানার প্রজেক্ট, ইনস্ট্যান্স এবং ডাটাবেস এনভায়রনমেন্ট ভেরিয়েবলের জন্য রেঞ্চকে রাইট এন্ডপয়েন্টের সাথে সংযোগ করার জন্য প্রয়োজন।

Cloud Build এই পরিবর্তনগুলি করতে সক্ষম কারণ এটি cloudbuild-cicd@${PROJECT_ID}.iam.gserviceaccount.com পরিষেবা অ্যাকাউন্ট হিসাবে চলছে:

serviceAccount: projects/${PROJECT_ID}/serviceAccounts/cloudbuild-cicd@${PROJECT_ID}.iam.gserviceaccount.com

এবং এই পরিষেবা অ্যাকাউন্টে Terraform দ্বারা যোগ করা spanner.databaseUser ভূমিকা রয়েছে, যা পরিষেবা অ্যাকাউন্টটিকে DDL আপডেট করার অনুমতি দেয়।

স্কিমা মাইগ্রেশন

$DEMO_HOME/schema/migrations ডিরেক্টরির ফাইলের উপর ভিত্তি করে পাঁচটি মাইগ্রেশন ধাপ রয়েছে। এখানে 000001.sql ফাইলের একটি উদাহরণ যা একটি players টেবিল এবং সূচী তৈরি করে:

CREATE TABLE players (
   playerUUID STRING(36) NOT NULL,
   player_name STRING(64) NOT NULL,
   email STRING(MAX) NOT NULL,
   password_hash BYTES(60) NOT NULL,
   created TIMESTAMP,
   updated TIMESTAMP,
   stats JSON,
   account_balance NUMERIC NOT NULL DEFAULT (0.00),
   is_logged_in BOOL,
   last_login TIMESTAMP,
   valid_email BOOL,
   current_game STRING(36)
) PRIMARY KEY (playerUUID);

CREATE UNIQUE INDEX PlayerAuthentication ON players(email) STORING(password_hash);
CREATE UNIQUE INDEX PlayerName ON players(player_name);
CREATE INDEX PlayerGame ON players(current_game);

স্কিমা মাইগ্রেশন জমা দিন

স্কিমা মাইগ্রেশন করার জন্য বিল্ড জমা দিতে, schema ডিরেক্টরিতে স্যুইচ করুন এবং নিম্নলিখিত gcloud কমান্ডটি চালান:

cd $DEMO_HOME/schema
gcloud builds submit --config=cloudbuild.yaml

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

Creating temporary tarball archive of 8 file(s) totalling 11.2 KiB before compression.
Uploading tarball of [.] to [gs://(project)_cloudbuild/source/(snip).tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/(project)/locations/global/builds/7defe982-(snip)].
Logs are available at [ https://console.cloud.google.com/cloud-build/builds/7defe982-(snip)?project=(snip) ].

gcloud builds submit only displays logs from Cloud Storage. To view logs from Cloud Logging, run:
gcloud beta builds submit

ID: 7defe982-(snip)
CREATE_TIME: (created time)
DURATION: 3M11S
SOURCE: gs://(project)_cloudbuild/source/(snip).tgz
IMAGES: -
STATUS: SUCCESS

উপরের আউটপুটে, আপনি Created ক্লাউড বিল্ড প্রক্রিয়ার একটি লিঙ্ক লক্ষ্য করবেন। আপনি যদি এটিতে ক্লিক করেন, এটি আপনাকে ক্লাউড কনসোলে বিল্ডে নিয়ে যাবে যাতে আপনি বিল্ডের অগ্রগতি নিরীক্ষণ করতে পারেন এবং এটি কী করছে তা দেখতে পারেন।

11b1cf107876d797.png

সারাংশ

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

একটি স্বাভাবিক বিকাশের পরিস্থিতিতে, আপনি বিভ্রাট এড়াতে বর্তমান অ্যাপ্লিকেশনের সাথে সামঞ্জস্যপূর্ণ স্কিমা পরিবর্তন করতে চান।

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

পরবর্তী আপ

স্কিমা জায়গায় রেখে, পরবর্তী ধাপ হল ব্যাকএন্ড পরিষেবাগুলি স্থাপন করা!

5. ব্যাকএন্ড পরিষেবাগুলি স্থাপন করুন৷

ওভারভিউ

এই কোডল্যাবের ব্যাকএন্ড পরিষেবাগুলি হল গোলং REST API যা চারটি ভিন্ন পরিষেবার প্রতিনিধিত্ব করে:

  • প্রোফাইল: খেলোয়াড়দের সাইনআপ করার এবং আমাদের নমুনা "গেম"-এ প্রমাণীকরণ করার ক্ষমতা প্রদান করুন।
  • ম্যাচমেকিং: ম্যাচমেকিং ফাংশনে সাহায্য করতে প্লেয়ার ডেটার সাথে ইন্টারঅ্যাক্ট করুন, তৈরি করা গেমগুলির তথ্য ট্র্যাক করুন এবং গেমগুলি বন্ধ হয়ে গেলে প্লেয়ারের পরিসংখ্যান আপডেট করুন৷
  • আইটেম: খেলোয়াড়দের একটি গেম খেলার মাধ্যমে গেম আইটেম এবং অর্থ অর্জন করতে সক্ষম করুন।
  • ট্রেডপোস্ট: খেলোয়াড়দের ট্রেডপোস্টে আইটেম কিনতে এবং বিক্রি করতে সক্ষম করে

d36e958411d44b5d.png

আপনি গেমস ডেভেলপমেন্ট কোডল্যাবের সাথে ক্লাউড স্প্যানার শুরু করতে এই পরিষেবাগুলি সম্পর্কে আরও জানতে পারেন৷ আমাদের উদ্দেশ্যে, আমরা এই পরিষেবাগুলি আমাদের GKE অটোপাইলট ক্লাস্টারে চলতে চাই৷

এই পরিষেবাগুলি অবশ্যই স্প্যানার ডেটা সংশোধন করতে সক্ষম হবে। এটি করার জন্য, প্রতিটি পরিষেবার একটি পরিষেবা অ্যাকাউন্ট তৈরি করা হয়েছে যা তাদের 'ডাটাবেস ব্যবহারকারী' ভূমিকা প্রদান করে।

ওয়ার্কলোড আইডেন্টিটি একটি kubernetes পরিষেবা অ্যাকাউন্টকে আমাদের Terraform-এ নিম্নলিখিত পদক্ষেপগুলি দ্বারা পরিষেবাগুলির Google ক্লাউড পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ধারণ করার অনুমতি দেয়:

  • পরিষেবাটির গুগল ক্লাউড পরিষেবা অ্যাকাউন্ট ( GSA ) সংস্থান তৈরি করুন৷
  • সেই পরিষেবা অ্যাকাউন্টে ডাটাবেস ব্যবহারকারীর ভূমিকা বরাদ্দ করুন
  • সেই পরিষেবা অ্যাকাউন্টে workloadIdentityUser ভূমিকা বরাদ্দ করুন
  • একটি Kubernetes পরিষেবা অ্যাকাউন্ট ( KSA ) তৈরি করুন যা GSA-এর উল্লেখ করে

একটি রুক্ষ চিত্র এই মত দেখাবে:

a8662d31d66b5910.png

Terraform আপনার জন্য পরিষেবা অ্যাকাউন্ট এবং Kubernetes পরিষেবা অ্যাকাউন্ট তৈরি করেছে। এবং আপনি kubectl ব্যবহার করে Kubernetes পরিষেবা অ্যাকাউন্টগুলি পরীক্ষা করতে পারেন:

# kubectl get serviceaccounts
NAME              SECRETS   AGE
default           0         37m
item-app          0         35m
matchmaking-app   0         35m
profile-app       0         35m
tradepost-app     0         35m

বিল্ডটি যেভাবে কাজ করে তা নিম্নরূপ:

serviceAccount: projects/${PROJECT_ID}/serviceAccounts/cloudbuild-cicd@${PROJECT_ID}.iam.gserviceaccount.com
steps:

#
# Building of images
#
 - name: gcr.io/cloud-builders/docker
   id: profile
   args: ["build", ".", "-t", "${_PROFILE_IMAGE}"]
   dir: profile
   waitFor: ['-']
 - name: gcr.io/cloud-builders/docker
   id: matchmaking
   args: ["build", ".", "-t", "${_MATCHMAKING_IMAGE}"]
   dir: matchmaking
   waitFor: ['-']
 - name: gcr.io/cloud-builders/docker
   id: item
   args: ["build", ".", "-t", "${_ITEM_IMAGE}"]
   dir: item
   waitFor: ['-']
 - name: gcr.io/cloud-builders/docker
   id: tradepost
   args: ["build", ".", "-t", "${_TRADEPOST_IMAGE}"]
   dir: tradepost
   waitFor: ['-']

#
# Deployment
#
 - name: gcr.io/google.com/cloudsdktool/cloud-sdk
   id: cloud-deploy-release
   entrypoint: gcloud
   args:
     [
       "deploy", "releases", "create", "${_REL_NAME}",
       "--delivery-pipeline", "sample-game-services",
       "--skaffold-file", "skaffold.yaml",
       "--skaffold-version", "1.39",
       "--images", "profile=${_PROFILE_IMAGE},matchmaking=${_MATCHMAKING_IMAGE},item=${_ITEM_IMAGE},tradepost=${_TRADEPOST_IMAGE}",
       "--region", "us-central1"
     ]

artifacts:
 images:
   - ${_REGISTRY}/profile
   - ${_REGISTRY}/matchmaking
   - ${_REGISTRY}/item
   - ${_REGISTRY}/tradepost

substitutions:
 _PROFILE_IMAGE: ${_REGISTRY}/profile:${BUILD_ID}
 _MATCHMAKING_IMAGE: ${_REGISTRY}/matchmaking:${BUILD_ID}
 _ITEM_IMAGE: ${_REGISTRY}/item:${BUILD_ID}
 _TRADEPOST_IMAGE: ${_REGISTRY}/tradepost:${BUILD_ID}
 _REGISTRY: us-docker.pkg.dev/${PROJECT_ID}/spanner-game-images
 _REL_NAME: rel-${BUILD_ID:0:8}
options:
 dynamic_substitutions: true
 machineType: E2_HIGHCPU_8
 logging: CLOUD_LOGGING_ONLY
  • ক্লাউড বিল্ড কমান্ড এই ফাইলটি পড়ে এবং তালিকাভুক্ত পদক্ষেপগুলি অনুসরণ করে। প্রথমত, এটি পরিষেবা চিত্র তৈরি করে। তারপর, এটি একটি gcloud deploy create কমান্ড চালায়। এটি $DEMO_HOME/backend_services/skaffold.yaml ফাইলটি পড়ে, যা প্রতিটি স্থাপনার ফাইল কোথায় অবস্থিত তা নির্ধারণ করে:
apiVersion: skaffold/v2beta29
kind: Config
deploy:
 kubectl:
   manifests:
     - spanner_config.yaml
     - profile/deployment.yaml
     - matchmaking/deployment.yaml
     - item/deployment.yaml
     - tradepost/deployment.yaml
  • Cloud Deploy প্রতিটি পরিষেবার deployment.yaml ফাইলের সংজ্ঞা অনুসরণ করবে। পরিষেবার স্থাপনার ফাইলে একটি পরিষেবা তৈরি করার তথ্য রয়েছে, যা এই ক্ষেত্রে পোর্ট 80 এ চলমান একটি ক্লাস্টারআইপি।

" ClusterIP" টাইপ ব্যাকএন্ড পরিষেবা পডগুলিকে একটি বাহ্যিক IP থাকা থেকে বাধা দেয় তাই শুধুমাত্র অভ্যন্তরীণ GKE নেটওয়ার্কের সাথে সংযোগ করতে পারে এমন সংস্থাগুলি ব্যাকএন্ড পরিষেবাগুলি অ্যাক্সেস করতে পারে৷ এই পরিষেবাগুলি খেলোয়াড়দের কাছে সরাসরি অ্যাক্সেসযোগ্য হওয়া উচিত নয় কারণ তারা স্প্যানার ডেটা অ্যাক্সেস করে এবং পরিবর্তন করে।

apiVersion: v1
kind: Service
metadata:
 name: profile
spec:
 type: ClusterIP
 selector:
   app: profile
 ports:
 - port: 80
   targetPort: 80

একটি Kubernetes পরিষেবা তৈরি করার পাশাপাশি, Cloud Deploy একটি Kubernetes স্থাপনাও তৈরি করে। আসুন profile পরিষেবার স্থাপনা বিভাগটি পরীক্ষা করি:

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: profile
spec:
 replicas: 2 # EDIT: Number of instances of deployment
 selector:
   matchLabels:
     app: profile
 template:
   metadata:
     labels:
       app: profile
   spec:
     serviceAccountName: profile-app
     containers:
     - name: profile-service
       image: profile
       ports:
         - containerPort: 80
       envFrom:
         - configMapRef:
             name: spanner-config
       env:
         - name: SERVICE_HOST
           value: "0.0.0.0"
         - name: SERVICE_PORT
           value: "80"
       resources:
         requests:
           cpu: "1"
           memory: "1Gi"
           ephemeral-storage: "100Mi"
         limits:
           cpu: "1"
           memory: "1Gi"
           ephemeral-storage: "100Mi"

উপরের অংশটি পরিষেবা সম্পর্কে কিছু মেটাডেটা প্রদান করে। এর থেকে সবচেয়ে গুরুত্বপূর্ণ অংশটি এই স্থাপনার দ্বারা কতগুলি প্রতিলিপি তৈরি করা হবে তা নির্ধারণ করে।

replicas: 2 # EDIT: Number of instances of deployment

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

spec:
  serviceAccountName: profile-app
  containers:
    - name: profile-service
      image: profile

এর পরে, আমরা নেটওয়ার্কিং এবং পরিবেশ ভেরিয়েবল সম্পর্কে কিছু তথ্য নির্দিষ্ট করি।

spanner_config হল একটি Kubernetes ConfigMap যা স্প্যানারের সাথে সংযোগ করার জন্য অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় প্রকল্প, উদাহরণ এবং ডেটাবেস তথ্য নির্দিষ্ট করে।

apiVersion: v1
kind: ConfigMap
metadata:
  name: spanner-config
data:
  SPANNER_PROJECT_ID: ${project_id}
  SPANNER_INSTANCE_ID: ${instance_id}
  SPANNER_DATABASE_ID: ${database_id}
ports:
  - containerPort: 80
envFrom:
  - configMapRef:
    name: spanner-config
env:
  - name: SERVICE_HOST
    value: "0.0.0.0"
  - name: SERVICE_PORT
    value: "80"

SERVICE_HOST এবং SERVICE_PORT হল অতিরিক্ত পরিবেশের ভেরিয়েবল যেখানে পরিষেবার সাথে আবদ্ধ হবে তা জানার জন্য প্রয়োজন৷

চূড়ান্ত বিভাগটি বলে যে এই স্থাপনায় প্রতিটি প্রতিরূপের জন্য কতগুলি সংস্থান অনুমতি দিতে হবে। প্রয়োজন অনুসারে ক্লাস্টার স্কেল করার জন্য GKE অটোপাইলট এটিও ব্যবহার করে।

resources:
  requests:
    cpu: "1"
    memory: "1Gi"
    ephemeral-storage: "100Mi"
  limits:
    cpu: "1"
    memory: "1Gi"
    ephemeral-storage: "100Mi"

এই তথ্যের সাথে, এটি ব্যাকএন্ড পরিষেবাগুলি স্থাপন করার সময়।

ব্যাকএন্ড পরিষেবাগুলি স্থাপন করুন

উল্লিখিত হিসাবে, ব্যাকএন্ড পরিষেবাগুলি স্থাপন করা ক্লাউড বিল্ড ব্যবহার করে। স্কিমা মাইগ্রেশনের মতো, আপনি gcloud কমান্ড লাইন ব্যবহার করে বিল্ড অনুরোধ জমা দিতে পারেন:

cd $DEMO_HOME/backend_services
gcloud builds submit --config=cloudbuild.yaml

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

Creating temporary tarball archive of 66 file(s) totalling 864.6 KiB before compression.
Uploading tarball of [.] to [gs://(project)_cloudbuild/source/(snip).tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/(project)/locations/global/builds/30207dd1-(snip)].
Logs are available at [ https://console.cloud.google.com/cloud-build/builds/30207dd1-(snip)?project=(snip) ].

gcloud builds submit only displays logs from Cloud Storage. To view logs from Cloud Logging, run:
gcloud beta builds submit

ID: 30207dd1-(snip)
CREATE_TIME: (created time)
DURATION: 3M17S
SOURCE: gs://(project)_cloudbuild/source/(snip).tgz
IMAGES: us-docker.pkg.dev/(project)/spanner-game-images/profile:30207dd1-(snip) (+3 more)
STATUS: SUCCESS

schema migration ধাপের আউটপুট থেকে ভিন্ন, এই বিল্ডের আউটপুট ইঙ্গিত করে যে কিছু ছবি তৈরি করা হয়েছে। সেগুলি আপনার আর্টিফ্যাক্ট রেজিস্ট্রি সংগ্রহস্থলে সংরক্ষণ করা হবে।

gcloud build স্টেপের আউটপুটে ক্লাউড কনসোলের একটি লিঙ্ক থাকবে। সেসব দেখে নিন।

একবার আপনি ক্লাউড বিল্ড থেকে সাফল্যের বিজ্ঞপ্তি পেয়ে গেলে, স্থাপনার অগ্রগতি নিরীক্ষণ করতে ক্লাউড ডিপ্লোয় এবং তারপর sample-game-services পাইপলাইনে নেভিগেট করুন।

df5c6124b9693986.png

একবার পরিষেবাগুলি স্থাপন করা হলে, আপনি পডের স্থিতি দেখতে kubectl চেক করতে পারেন:

kubectl get pods

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

NAME                           READY   STATUS    RESTARTS   AGE
item-6b9d5f678c-4tbk2          1/1     Running   0          83m
matchmaking-5bcf799b76-lg8zf   1/1     Running   0          80m
profile-565bbf4c65-kphdl       1/1     Running   0          83m
profile-565bbf4c65-xw74j       1/1     Running   0          83m
tradepost-68b87ccd44-gw55r     1/1     Running   0          79m

তারপরে, ClusterIP কার্যে দেখতে পরিষেবাগুলি পরীক্ষা করুন:

kubectl get services

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

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
item          ClusterIP   10.172.XXX.XXX   <none>        80/TCP    84m
kubernetes    ClusterIP   10.172.XXX.XXX   <none>        443/TCP   137m
matchmaking   ClusterIP   10.172.XXX.XXX   <none>        80/TCP    84m
profile       ClusterIP   10.172.XXX.XXX   <none>        80/TCP    84m
tradepost     ClusterIP   10.172.XXX.XXX   <none>        80/TCP    84m

আপনি ক্লাউড কনসোলের GKE UI-তেও নেভিগেট করতে পারেন Workloads , Services এবং ConfigMaps দেখতে।

কাজের চাপ

da98979ae49e5a30.png

সেবা

406ca2fe7ad4818b.png

ConfigMaps

a0ebd34ee735ee11.png

3b9ef91c77a4e7f0.png

সারাংশ

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

আপনি আরও শিখেছেন যে কীভাবে এই পরিষেবাগুলি ওয়ার্কলোড আইডেন্টিটি ব্যবহার করে এমন একটি পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ধারণ করে যার কাছে স্প্যানার ডাটাবেসে ডেটা পড়ার এবং লেখার সঠিক অনুমতি রয়েছে৷

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

পরবর্তী বিভাগে, আপনি কাজের চাপগুলি স্থাপন করবেন।

6. কাজের চাপ স্থাপন করুন

ওভারভিউ

এখন যেহেতু ব্যাকএন্ড পরিষেবাগুলি ক্লাস্টারে চলছে, আপনি কাজের চাপগুলি স্থাপন করবেন।

dd900485e2eeb611.png

কাজের চাপগুলি বাহ্যিকভাবে অ্যাক্সেসযোগ্য, এবং এই কোডল্যাবের উদ্দেশ্যে প্রতিটি ব্যাকএন্ড পরিষেবার জন্য একটি রয়েছে।

এই কাজের চাপগুলি হল পঙ্গপাল -ভিত্তিক লোড জেনারেশন স্ক্রিপ্ট যা এই নমুনা পরিষেবাগুলির দ্বারা প্রত্যাশিত বাস্তব অ্যাক্সেসের ধরণগুলিকে অনুকরণ করে৷

ক্লাউড বিল্ড প্রক্রিয়ার জন্য ফাইল আছে:

  • $DEMO_HOME/workloads/cloudbuild.yaml (টেরাফর্ম দ্বারা তৈরি)
  • $DEMO_HOME/workloads/skaffold.yaml
  • প্রতিটি কাজের চাপের জন্য একটি deployment.yaml ফাইল

workload deployment.yaml ফাইলগুলি ব্যাকএন্ড সার্ভিস ডিপ্লয়মেন্ট ফাইল থেকে কিছুটা আলাদা দেখায়।

এখানে matchmaking-workload থেকে একটি উদাহরণ:

apiVersion: v1
kind: Service
metadata:
 name: matchmaking-workload
spec:
 type: LoadBalancer
 selector:
   app: matchmaking-workload
 ports:
 - port: 8089
   targetPort: 8089
---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: matchmaking-workload
spec:
 replicas: 1 # EDIT: Number of instances of deployment
 selector:
   matchLabels:
     app: matchmaking-workload
 template:
   metadata:
     labels:
       app: matchmaking-workload
   spec:
     serviceAccountName: default
     containers:
     - name: matchmaking-workload
       image: matchmaking-workload
       ports:
         - containerPort: 8089
       resources:
         requests:
           cpu: "500m"
           memory: "512Mi"
           ephemeral-storage: "100Mi"
         limits:
           cpu: "500m"
           memory: "512Mi"
           ephemeral-storage: "100Mi"

ফাইলের উপরের অংশটি পরিষেবাটি সংজ্ঞায়িত করে। এই ক্ষেত্রে, একটি LoadBalancer তৈরি করা হয়, এবং কাজের চাপ 8089 পোর্টে চলে।

লোডব্যালেন্সার একটি বাহ্যিক আইপি প্রদান করবে যা কাজের চাপের সাথে সংযোগ করতে ব্যবহার করা যেতে পারে।

apiVersion: v1
kind: Service
metadata:
 name: matchmaking-workload
spec:
 type: LoadBalancer
 selector:
   app: matchmaking-workload
 ports:
 - port: 8089
   targetPort: 8089

ডিপ্লয়মেন্ট সেকশনের শীর্ষে রয়েছে কাজের চাপ সম্পর্কে মেটাডেটা। এই ক্ষেত্রে, শুধুমাত্র একটি প্রতিলিপি স্থাপন করা হচ্ছে:

replicas: 1 

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

অন্য পার্থক্য হল এই কাজের চাপের জন্য কোন পরিবেশের ভেরিয়েবলের প্রয়োজন নেই। ফলাফল একটি সংক্ষিপ্ত স্থাপনার স্পেসিফিকেশন।

spec:
  serviceAccountName: default
  containers:
    - name: matchmaking-workload
      image: matchmaking-workload
  ports:
    - containerPort: 8089

রিসোর্স সেটিংস ব্যাকএন্ড পরিষেবার অনুরূপ। মনে রাখবেন যে এইভাবে GKE অটোপাইলট জানে যে ক্লাস্টারে চলমান সমস্ত পডের অনুরোধগুলি পূরণ করতে কতগুলি সংস্থান প্রয়োজন৷

এগিয়ে যান এবং কাজের চাপ মোতায়েন করুন!

কাজের চাপগুলি স্থাপন করুন

ঠিক আগের মত, আপনি gcloud কমান্ড লাইন ব্যবহার করে বিল্ড অনুরোধ জমা দিতে পারেন:

cd $DEMO_HOME/workloads
gcloud builds submit --config=cloudbuild.yaml

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

Creating temporary tarball archive of 18 file(s) totalling 26.2 KiB before compression.
Some files were not included in the source upload.

Check the gcloud log [/tmp/tmp.4Z9EqdPo6d/logs/(snip).log] to see which files and the contents of the
default gcloudignore file used (see `$ gcloud topic gcloudignore` to learn
more).

Uploading tarball of [.] to [gs://(project)_cloudbuild/source/(snip).tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/(project)/locations/global/builds/(snip)].
Logs are available at [ https://console.cloud.google.com/cloud-build/builds/0daf20f6-(snip)?project=(snip) ].

gcloud builds submit only displays logs from Cloud Storage. To view logs from Cloud Logging, run:
gcloud beta builds submit

ID: 0daf20f6-(snip)
CREATE_TIME: (created_time)
DURATION: 1M41S
SOURCE: gs://(project)_cloudbuild/source/(snip).tgz
IMAGES: us-docker.pkg.dev/(project)/spanner-game-images/profile-workload:0daf20f6-(snip) (+4 more)
STATUS: SUCCESS

স্ট্যাটাস চেক করতে ক্লাউড বিল্ড লগ এবং ক্লাউড কনসোলে ক্লাউড ডিপ্লোয় পাইপলাইন চেক করতে ভুলবেন না। কাজের চাপের জন্য, ক্লাউড ডিপ্লোয় পাইপলাইন হল sample-game-workloads :

একবার স্থাপন করা হয়ে গেলে, ক্লাউড শেল-এ kubectl দিয়ে স্থিতি পরীক্ষা করুন:

kubectl get pods

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

NAME                                    READY   STATUS    RESTARTS   AGE
game-workload-7ff44cb657-pxxq2          1/1     Running   0          12m
item-6b9d5f678c-cr29w                   1/1     Running   0          9m6s
item-generator-7bb4f57cf8-5r85b         1/1     Running   0          12m
matchmaking-5bcf799b76-lg8zf            1/1     Running   0          117m
matchmaking-workload-76df69dbdf-jds9z   1/1     Running   0          12m
profile-565bbf4c65-kphdl                1/1     Running   0          121m
profile-565bbf4c65-xw74j                1/1     Running   0          121m
profile-workload-76d6db675b-kzwng       1/1     Running   0          12m
tradepost-68b87ccd44-gw55r              1/1     Running   0          116m
tradepost-workload-56c55445b5-b5822     1/1     Running   0          12m

তারপরে, LoadBalancer কার্যকরী দেখতে কাজের চাপ পরিষেবাগুলি পরীক্ষা করুন:

kubectl get services 

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

NAME                   TYPE          CLUSTER-IP  EXTERNAL-IP     PORT(S)        AGE
game-workload          LoadBalancer  *snip*      35.XX.XX.XX   8089:32483/TCP   12m
item                   ClusterIP     *snip*      <none>         80/TCP          121m
item-generator         LoadBalancer  *snip*      34.XX.XX.XX   8089:32581/TCP   12m
kubernetes             ClusterIP     *snip*      <none>          443/TCP        174m
matchmaking            ClusterIP     *snip*      <none>          80/TCP         121m
matchmaking-workload   LoadBalancer  *snip*      34.XX.XX.XX   8089:31735/TCP   12m
profile                ClusterIP     *snip*      <none>          80/TCP         121m
profile-workload       LoadBalancer  *snip*      34.XX.XX.XX   8089:32532/TCP   12m
tradepost              ClusterIP     *snip*      <none>          80/TCP         121m
tradepost-workload     LoadBalancer  *snip*      34.XX.XX.XX   8089:30002/TCP   12m

সারাংশ

আপনি এখন GKE ক্লাস্টারে কাজের বোঝা স্থাপন করেছেন। এই কাজের চাপের জন্য কোন অতিরিক্ত IAM অনুমতির প্রয়োজন নেই এবং LoadBalancer পরিষেবা ব্যবহার করে পোর্ট 8089-এ বাহ্যিকভাবে অ্যাক্সেসযোগ্য।

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

ব্যাকএন্ড পরিষেবা এবং কাজের চাপ চলার সাথে, গেমটি " খেলা " করার সময়!

7. গেম খেলা শুরু করুন

ওভারভিউ

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

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

এখানে প্রতিটি কাজের চাপের একটি বিবরণ রয়েছে:

  • item-generator ওয়ার্কলোড হল গেম_আইটেমগুলির একটি তালিকা তৈরি করার জন্য একটি দ্রুত কাজের চাপ যা খেলোয়াড়রা গেমটি "খেলা" করার মাধ্যমে অর্জন করতে পারে।
  • profile-workload খেলোয়াড়দের সাইন আপ এবং লগ ইন করার অনুকরণ করে।
  • matchmaking-workload গেমের জন্য বরাদ্দ করার জন্য সারিবদ্ধ হওয়া খেলোয়াড়দের অনুকরণ করে।
  • game-workload গেম খেলার মাধ্যমে গেম_আইটেম এবং অর্থ অর্জনকারী খেলোয়াড়দের অনুকরণ করে।
  • tradepost-workload খেলোয়াড়দের ট্রেডিং পোস্টে আইটেম বিক্রি এবং কিনতে সক্ষম হওয়ার অনুকরণ করে।

এই কোডল্যাবটি বিশেষভাবে item-generator এবং profile-workload চালানো হাইলাইট করবে।

আইটেম-জেনারেটর চালান

item-generator স্প্যানারে game_items যোগ করতে item ব্যাকএন্ড পরিষেবার শেষ পয়েন্ট ব্যবহার করে। game-workload এবং tradepost-workload সঠিকভাবে কাজ করার জন্য এই আইটেমগুলির প্রয়োজন।

প্রথম ধাপ হল item-generator পরিষেবার বাহ্যিক আইপি পাওয়া। ক্লাউড শেলে, নিম্নলিখিতগুলি চালান:

# The external IP is the 4th column of the output
kubectl get services | grep item-generator | awk '{print $4}'

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

{ITEMGENERATOR_EXTERNAL_IP}

এখন, একটি নতুন ব্রাউজার ট্যাব খুলুন এবং এটিকে নির্দেশ করুন http://{ITEMGENERATOR_EXTERNAL_IP}:8089 আপনি এই মত একটি পৃষ্ঠা পেতে হবে:

817307157d66c661.png

আপনি users ছেড়ে যাবেন এবং ডিফল্ট 1. host জন্য , http://item spawn । উন্নত বিকল্পগুলিতে ক্লিক করুন এবং চলমান সময়ের জন্য 10s লিখুন।

কনফিগারেশনটি কেমন হওয়া উচিত তা এখানে:

f3143165c6285c21.png

'স্টার্ট সোয়ামিং' ক্লিক করুন!

POST /items এন্ডপয়েন্টে জারি করা অনুরোধের জন্য পরিসংখ্যান দেখাতে শুরু করবে। 10 সেকেন্ড পরে লোড বন্ধ হবে।

Charts ক্লিক করুন এবং আপনি এই অনুরোধগুলির কার্যকারিতার উপর কিছু গ্রাফ দেখতে পাবেন।

abad0a9f3c165345.png

এখন, আপনি স্প্যানার ডাটাবেসে ডেটা প্রবেশ করা হয়েছে কিনা তা পরীক্ষা করতে চান।

এটি করতে, হ্যামবার্গার মেনুতে ক্লিক করুন এবং 'স্প্যানার'-এ নেভিগেট করুন। এই পৃষ্ঠা থেকে, sample-instance এবং sample-database নেভিগেট করুন। তারপর ' Query ' এ ক্লিক করুন।

আমরা game_items সংখ্যা নির্বাচন করতে চাই :

গেম_আইটেম থেকে COUNT(*) নির্বাচন করুন;

নীচে, আপনি আপনার ফলাফল পাবেন.

137ce291a2ff2706.png

আমাদের অনেক game_items বীজের প্রয়োজন নেই। কিন্তু এখন তারা খেলোয়াড়দের অর্জনের জন্য উপলব্ধ!

প্রোফাইল-ওয়ার্কলোড চালান

আপনার game_items সিডের সাথে, পরবর্তী ধাপ হল গেম খেলতে সক্ষম হওয়ার জন্য খেলোয়াড়দের সাইন আপ করা।

profile-workload খেলোয়াড়দের অ্যাকাউন্ট তৈরি করতে, লগ ইন করতে, প্রোফাইলের তথ্য পুনরুদ্ধার করতে এবং লগ আউট করতে অনুকরণ করতে পঙ্গপাল ব্যবহার করবে। এই সমস্তগুলি একটি সাধারণ উত্পাদনের মতো কাজের চাপে profile ব্যাকএন্ড পরিষেবার শেষ পয়েন্টগুলি পরীক্ষা করে।

এটি চালানোর জন্য, profile-workload বাহ্যিক আইপি পান:

# The external IP is the 4th column of the output
kubectl get services | grep profile-workload | awk '{print $4}'

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

{PROFILEWORKLOAD_EXTERNAL_IP}

এখন, একটি নতুন ব্রাউজার ট্যাব খুলুন এবং এটিকে নির্দেশ করুন http://{PROFILEWORKLOAD_EXTERNAL_IP}:8089 আপনার আগেরটির মতো একটি পঙ্গপাল পৃষ্ঠা পাওয়া উচিত।

এই ক্ষেত্রে, আপনি হোস্টের জন্য http://profile ব্যবহার করবেন। এবং আপনি উন্নত বিকল্পগুলিতে একটি রানটাইম নির্দিষ্ট করবেন না। এছাড়াও, users 4 হতে নির্দিষ্ট করুন, যা একবারে 4টি ব্যবহারকারীর অনুরোধ অনুকরণ করবে।

profile-workload পরীক্ষাটি এইরকম হওয়া উচিত:

f6e0f06efb0ad6e.png

'স্টার্ট সোয়ামিং' ক্লিক করুন!

ঠিক আগের মতই, বিভিন্ন profile REST এন্ডপয়েন্টের পরিসংখ্যান দেখাতে শুরু করবে। সবকিছু কতটা ভালোভাবে কাজ করছে তার একটি দৃশ্য দেখতে চার্টে ক্লিক করুন।

4c2146e1cb3de23e.png

সারাংশ

এই ধাপে, আপনি কিছু game_items তৈরি করেছেন এবং তারপর ক্লাউড কনসোলে স্প্যানার ক্যোয়ারী UI ব্যবহার করে game_items টেবিলটি জিজ্ঞাসা করেছেন।

আপনি খেলোয়াড়দের আপনার গেমের জন্য সাইন আপ করার অনুমতি দিয়েছেন এবং দেখেছেন যে কীভাবে পঙ্গপাল আপনার ব্যাকএন্ড পরিষেবাগুলির বিরুদ্ধে উত্পাদনের মতো কাজের চাপ তৈরি করতে সক্ষম।

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

কাজের চাপগুলি চালানোর পরে, আপনি GKE ক্লাস্টার এবং স্প্যানার উদাহরণ কীভাবে আচরণ করছে তা পরীক্ষা করতে চাইবেন।

8. GKE এবং স্প্যানার ব্যবহার পর্যালোচনা করুন

প্রোফাইল পরিষেবা চলার সাথে, আপনার GKE অটোপাইলট ক্লাস্টার এবং ক্লাউড স্প্যানার কীভাবে আচরণ করছে তা দেখার সুযোগ নেওয়ার সময় এসেছে৷

GKE ক্লাস্টার চেক করুন

Kubernetes ক্লাস্টারে নেভিগেট করুন। লক্ষ্য করুন যে যেহেতু আপনি কাজের চাপ এবং পরিষেবাগুলি স্থাপন করেছেন, ক্লাস্টারে এখন মোট vCPU এবং মেমরি সম্পর্কে কিছু বিবরণ যোগ করা হয়েছে। ক্লাস্টারে কোনো কাজের চাপ না থাকলে এই তথ্যটি উপলব্ধ ছিল না।

61d2d766c1f10079.png

এখন, sample-game-gke ক্লাস্টারে ক্লিক করুন এবং পর্যবেক্ষণযোগ্যতা ট্যাবে স্যুইচ করুন:

fa9acc7e26ea04a.png

default kubernetes নেমস্পেসটি CPU ব্যবহারের জন্য kube-system নামস্থানকে অতিক্রম করা উচিত ছিল যেহেতু আমাদের কাজের চাপ এবং ব্যাকএন্ড পরিষেবাগুলি default চলে। যদি এটি না থাকে তবে নিশ্চিত করুন যে profile workload এখনও চলছে এবং চার্ট আপডেট হওয়ার জন্য কয়েক মিনিট অপেক্ষা করুন।

কোন কাজের চাপ সবচেয়ে বেশি সম্পদ নিচ্ছে তা দেখতে, Workloads ড্যাশবোর্ডে যান।

পৃথকভাবে প্রতিটি কাজের চাপে না গিয়ে, সরাসরি ড্যাশবোর্ডের পর্যবেক্ষণ ট্যাবে যান। আপনি দেখতে হবে যে profile এবং profile-workload CPU বৃদ্ধি পেয়েছে।

f194b618969cfa9e.png

এখন, ক্লাউড স্প্যানার চেক করতে যান।

ক্লাউড স্প্যানার উদাহরণটি দেখুন

ক্লাউড স্প্যানারের কর্মক্ষমতা পরীক্ষা করতে, স্প্যানারে নেভিগেট করুন এবং sample-instance দৃষ্টান্ত এবং sample-game ডাটাবেসে ক্লিক করুন।

সেখান থেকে, আপনি বাম মেনুতে একটি সিস্টেম অন্তর্দৃষ্টি ট্যাব দেখতে পাবেন:

216212182a57dfd1.png

CPU utilization , transaction latency and locking , এবং query throughput সহ আপনার স্প্যানার ইনস্ট্যান্সের সাধারণ কার্যক্ষমতা বুঝতে সাহায্য করার জন্য এখানে অনেকগুলি চার্ট রয়েছে।

সিস্টেম অন্তর্দৃষ্টি ছাড়াও, আপনি পর্যবেক্ষণের বিভাগে অন্যান্য লিঙ্কগুলি দেখে কোয়েরি কাজের চাপ সম্পর্কে আরও বিশদ তথ্য পেতে পারেন:

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

সারাংশ

এই ধাপে, আপনি GKE অটোপাইলট এবং স্প্যানার উভয়ের জন্য কিছু মৌলিক কর্মক্ষমতা মেট্রিক্স কিভাবে পরীক্ষা করবেন তা শিখেছেন।

উদাহরণস্বরূপ, আপনার প্রোফাইল ওয়ার্কলোড চলমান অবস্থায়, সেখানে সঞ্চিত ডেটা সম্পর্কে আরও কিছু তথ্য পেতে প্লেয়ার টেবিলটি জিজ্ঞাসা করুন।

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

পরবর্তী, এটা পরিষ্কার করার সময়!

9. পরিষ্কার করা

পরিষ্কার করার আগে, কভার করা হয়নি এমন অন্যান্য কাজের চাপগুলি অন্বেষণ করুন। বিশেষ করে matchmaking-workload , game-workload এবং tradepost-workload

আপনি যখন গেমটি "খেলা" শেষ করেন, আপনি আপনার খেলার মাঠ পরিষ্কার করতে পারেন। ভাগ্যক্রমে এই বেশ সহজ.

প্রথমত, যদি আপনার profile-workload এখনও ব্রাউজারে চলছে, তাহলে যান এবং এটি বন্ধ করুন:

13ae755a11f3228.png

আপনার পরীক্ষা করা প্রতিটি কাজের চাপের জন্য একই কাজ করুন।

তারপর ক্লাউড শেলে, পরিকাঠামো ফোল্ডারে নেভিগেট করুন। আপনি টেরাফর্ম ব্যবহার করে অবকাঠামো destroy করবেন:

cd $DEMO_HOME/infrastructure
terraform destroy
# type 'yes' when asked

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

Plan: 0 to add, 0 to change, 46 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

*snip*

Destroy complete! Resources: 46 destroyed.

ক্লাউড কনসোলে, Spanner , Kubernetes Cluster , Artifact Registry , Cloud Deploy , এবং IAM নেভিগেট করুন যাতে সমস্ত সংস্থান সরানো হয়।

10. অভিনন্দন!

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

একটি বোনাস হিসাবে এই পরিকাঠামো সহজে সেট আপ করা হয়েছে এবং টেরাফর্ম ব্যবহার করে পুনরাবৃত্তিযোগ্য পদ্ধতিতে সরানো হয়েছে।

আপনি এই কোডল্যাবে ইন্টারঅ্যাক্ট করেছেন এমন Google ক্লাউড পরিষেবাগুলি সম্পর্কে আরও পড়তে পারেন:

এরপর কি?

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