Google Kubernetes Engine (GKE) এর সাথে আপনার ওয়েবসাইট স্থাপন, স্কেল এবং আপডেট করুন

1. ভূমিকা

ওয়েবসাইট এবং অ্যাপ্লিকেশন চালানো কঠিন।

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

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

অনুশীলনগুলি একটি সাধারণ ক্লাউড বিকাশকারীর অভিজ্ঞতা প্রতিফলিত করার জন্য আদেশ দেওয়া হয়েছে:

  1. একটি GKE ক্লাস্টার তৈরি করুন।
  2. একটি ডকার কন্টেইনার তৈরি করুন।
  3. GKE তে কন্টেইনার স্থাপন করুন।
  4. একটি পরিষেবার মাধ্যমে ধারকটি প্রকাশ করুন।
  5. ধারকটিকে একাধিক প্রতিলিপিতে স্কেল করুন।
  6. ওয়েবসাইট পরিবর্তন করুন।
  7. শূন্য ডাউনটাইম সহ একটি নতুন সংস্করণ রোল আউট করুন৷

স্থাপত্য চিত্র

ddba666bd2b02d0d.png

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

  • কিভাবে একটি GKE ক্লাস্টার তৈরি করবেন
  • কিভাবে একটি ডকার ইমেজ তৈরি করতে হয়
  • কুবারনেটসে ডকার ইমেজ কিভাবে স্থাপন করবেন
  • কুবারনেটসে একটি অ্যাপ্লিকেশন কীভাবে স্কেল করবেন
  • কুবারনেটসে কীভাবে রোলিং আপডেট করবেন

পূর্বশর্ত

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

2. পরিবেশ সেটআপ

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

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

53dad2cefdae71da.png

2016-02-10 12:45:26.png এর স্ক্রিনশট

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

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

মেঘের শেল

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

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

  1. ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVBzxNg74Bg7fz7 kP-X3Q (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগের জন্য এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে)।

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfeggN1NYp1NYp1CJ

স্ক্রীন শট 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 খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন বা ক্লাউড কনসোল ড্যাশবোর্ডে দেখুন:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93DrxBzuUgaz7VvaxNrkP2TAn93DrxX7ohs-5GZXH52T

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

echo $GOOGLE_CLOUD_PROJECT

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

<PROJECT_ID>
  1. অবশেষে, ডিফল্ট জোন এবং প্রকল্প কনফিগারেশন সেট করুন।
gcloud config set compute/zone us-central1-f

আপনি বিভিন্ন জোন বিভিন্ন চয়ন করতে পারেন. আরও তথ্যের জন্য, অঞ্চল এবং অঞ্চল দেখুন।

3. একটি GKE ক্লাস্টার তৈরি করুন৷

এখন যেহেতু আপনার কাজের বিকাশকারী পরিবেশ রয়েছে, আপনার ওয়েবসাইট স্থাপন করার জন্য আপনার একটি GKE ক্লাস্টার প্রয়োজন! আপনি একটি ক্লাস্টার তৈরি করার আগে, আপনাকে নিশ্চিত করতে হবে যে সঠিক API গুলি সক্ষম করা আছে৷ কন্টেইনার API সক্ষম করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud services enable container.googleapis.com

এখন, আপনি আপনার ক্লাস্টার তৈরি করতে পারেন! 3টি নোড সহ ফ্যান্সি-ক্লাস্টার নামে একটি ক্লাস্টার তৈরি করতে নীচের পদক্ষেপগুলি অনুসরণ করুন:

gcloud container clusters create fancy-cluster --num-nodes 3

ক্লাস্টার তৈরি হতে কয়েক মিনিট সময় লাগতে পারে। তারপরে, নিম্নলিখিত কমান্ডটি চালান এবং ক্লাস্টারের তিনটি কর্মী ভার্চুয়াল মেশিন (VM) উদাহরণগুলি দেখুন:

gcloud compute instances list

আউটপুট:

NAME                                          ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
gke-fancy-cluster-default-pool-ad92506d-1ng3  us-east4-a  n1-standard-1               10.150.0.7   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4fvq  us-east4-a  n1-standard-1               10.150.0.5   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4zs3  us-east4-a  n1-standard-1               10.150.0.6   XX.XX.XX.XX    RUNNING

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

795c794b03c5d2b0.png

6b394dfb8a6031f2.png

অভিনন্দন! আপনি আপনার প্রথম ক্লাস্টার তৈরি করেছেন!

4. ক্লোন সোর্স রিপোজিটরি

যেহেতু এটি একটি বিদ্যমান ওয়েবসাইট, আপনাকে শুধুমাত্র সংগ্রহস্থল থেকে উৎসটি ক্লোন করতে হবে যাতে আপনি ডকার ইমেজ তৈরি করতে এবং GKE-তে স্থাপনে ফোকাস করতে পারেন।

আপনার ক্লাউড শেল ইনস্ট্যান্সে সোর্স রিপোজিটরি ক্লোন করতে নিম্নলিখিত কমান্ডগুলি চালান এবং উপযুক্ত ডিরেক্টরিতে এটি পরিবর্তন করুন। আপনি Node.js নির্ভরতাও ইনস্টল করবেন যাতে আপনি এটি স্থাপন করার আগে আপনার অ্যাপ্লিকেশন পরীক্ষা করতে পারেন।

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

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

আপনার যথাযথ অধ্যবসায় করুন এবং আপনার আবেদন পরীক্ষা করুন. আপনার ওয়েব সার্ভার শুরু করতে নিম্নলিখিত কমান্ডটি চালান:

cd ~/monolith-to-microservices/monolith
npm start

আউটপুট:

Monolith listening on port 8080!

আপনি ক্লাউড শেল মেনুতে ওয়েব প্রিভিউ আইকনে ক্লিক করে এবং পোর্ট 8080-এ প্রিভিউ নির্বাচন করে আপনার অ্যাপ্লিকেশনটির পূর্বরূপ দেখতে পারেন।

5869738f0e9ec386.png

এটি একটি নতুন উইন্ডো খুলতে হবে যেখানে আপনি আপনার অভিনব দোকানটি কার্যকর দেখতে পাবেন!

9ed25c3f0cbe62fa.png

ওয়েবসাইট দেখার পরে আপনি সেই উইন্ডোটি বন্ধ করতে পারেন। ওয়েব সার্ভার প্রক্রিয়া বন্ধ করতে টার্মিনাল উইন্ডোতে Control+C (উইন্ডোজ বা ম্যাক) টিপুন।

5. ক্লাউড বিল্ড দিয়ে ডকার কন্টেইনার তৈরি করুন

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

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

ক্লাউড বিল্ড ডিরেক্টরি থেকে ফাইলগুলিকে সংকুচিত করে এবং সেগুলিকে একটি ক্লাউড স্টোরেজ বালতিতে নিয়ে যায়। বিল্ড প্রক্রিয়া তারপর বালতি থেকে ফাইল নেয় এবং ডকার বিল্ড প্রক্রিয়া চালানোর জন্য ডকারফাইল ব্যবহার করে। যেহেতু আপনি হোস্টের সাথে --tag পতাকাটিকে ডকার ইমেজের জন্য gcr.io হিসাবে নির্দিষ্ট করেছেন, ফলে ডকার ইমেজটি কনটেইনার রেজিস্ট্রিতে পুশ করা হবে।

প্রথমে, আপনাকে নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড বিল্ড API সক্ষম করতে হবে:

gcloud services enable cloudbuild.googleapis.com

API সক্ষম হওয়ার পরে, বিল্ড প্রক্রিয়া শুরু করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

এই প্রক্রিয়াটি কয়েক মিনিট সময় নেয়, কিন্তু এটি সম্পূর্ণ হওয়ার পরে, আপনি টার্মিনালে নিম্নলিখিত আউটপুট দেখতে পারেন:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID                                    CREATE_TIME                DURATION  SOURCE                                                                                  IMAGES                              STATUS
1ae295d9-63cb-482c-959b-bc52e9644d53  2019-08-29T01:56:35+00:00  33S       gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz  gcr.io/<PROJECT_ID>/monolith:1.0.0  SUCCESS

আপনার বিল্ড ইতিহাস দেখতে বা রিয়েল টাইমে প্রক্রিয়াটি দেখতে, আপনি ক্লাউড কনসোলে যেতে পারেন। উপরের-বাম কোণায় মেনু বোতামে ক্লিক করুন, Ci/CD-এ স্ক্রোল করুন, তারপর Cloud Build-এ ক্লিক করুন এবং অবশেষে History-এ ক্লিক করুন। সেখানে, আপনি আপনার পূর্ববর্তী বিল্ডগুলির একটি তালিকা দেখতে পারেন, তবে সেখানে শুধুমাত্র আপনার তৈরি করা হওয়া উচিত।

4c753ede203255f6.png

আপনি যদি বিল্ড আইডিতে ক্লিক করেন, তাহলে আপনি লগ আউটপুট সহ সেই বিল্ডের সমস্ত বিবরণ দেখতে পাবেন।

বিল্ড ডিটেইলস পৃষ্ঠায়, আপনি বিল্ড ইনফরমেশন বিভাগে ছবির নামের উপর ক্লিক করে তৈরি করা কন্টেইনার ইমেজ দেখতে পারেন।

6e88ed1643dfe629.png

6. GKE-তে কন্টেইনার স্থাপন করুন

এখন আপনি আপনার ওয়েবসাইটকে কন্টেইনারাইজ করেছেন এবং কন্টেইনার রেজিস্ট্রিতে ঠেলে দিয়েছেন, আপনি এটি কুবারনেটসে স্থাপন করতে পারেন!

একটি GKE ক্লাস্টারে অ্যাপ্লিকেশন স্থাপন এবং পরিচালনা করতে, আপনাকে অবশ্যই Kubernetes ক্লাস্টার-ম্যানেজমেন্ট সিস্টেমের সাথে যোগাযোগ করতে হবে। আপনি সাধারণত kubectl কমান্ড-লাইন টুল ব্যবহার করে এটি করেন।

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

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

kubectl create deployment কমান্ডের ফলে Kubernetes আপনার ক্লাস্টারে 1 রেপ্লিকা সহ মনোলিথ নামে একটি স্থাপনা তৈরি করে।

আপনার অ্যাপ্লিকেশন স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান:

kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0

স্থাপনা যাচাই করুন

ডিপ্লয়মেন্ট সফলভাবে তৈরি হয়েছে কিনা তা যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান (পড স্ট্যাটাস "চলতে" হতে কয়েক মুহূর্ত সময় লাগতে পারে):

kubectl get all

আউটপুট:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-htm7z   1/1     Running   0          6m21s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           20m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       20m

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

স্বতন্ত্রভাবে আপনার সংস্থানগুলি দেখতে, আপনি নিম্নলিখিত কমান্ডগুলি চালাতে পারেন:

# Show pods
kubectl get pods

# Show deployments
kubectl get deployments

# Show replica sets
kubectl get rs

#You can also combine them
kubectl get pods,deployments

Kubernetes এর সম্পূর্ণ সুবিধা দেখতে, আপনি একটি সার্ভার ক্র্যাশ অনুকরণ করতে পারেন, Pod মুছে ফেলতে পারেন এবং দেখুন কি হয়!

পূর্ববর্তী কমান্ড থেকে আপনার পড নাম অনুলিপি করুন এবং এটি মুছে ফেলার জন্য নিম্নলিখিত কমান্ডটি চালান:

kubectl delete pod/<POD_NAME>

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

kubectl get all

আউটপুট:

NAME                            READY   STATUS        RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running       0          4s
pod/monolith-7d8bc7bf68-htm7z   1/1     Terminating   0          9m35s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           24m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       24m

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

7. GKE স্থাপনার প্রকাশ করুন

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

আপনার ওয়েবসাইটটি ইন্টারনেটে প্রকাশ করতে নিম্নলিখিত কমান্ডটি চালান:

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

আউটপুট:

service/monolith exposed

পরিষেবা অ্যাক্সেস করা

GKE বাহ্যিক IP ঠিকানা পরিষেবা সংস্থানকে বরাদ্দ করে - স্থাপনায় নয়। আপনি যদি বাহ্যিক আইপি খুঁজে পেতে চান যা GKE আপনার অ্যাপ্লিকেশনের জন্য প্রবিধান করেছে, আপনি kubectl get service কমান্ড দিয়ে পরিষেবাটি পরিদর্শন করতে পারেন:

kubectl get service

আউটপুট:

NAME         CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
monolith     10.3.251.122    203.0.113.0     80:30877/TCP     3d

আপনি আপনার অ্যাপের জন্য বাহ্যিক আইপি ঠিকানা নির্ধারণ করার পরে, এটি অনুলিপি করুন। আপনার অ্যাপ অ্যাক্সেসযোগ্য কিনা তা পরীক্ষা করতে আপনার ব্রাউজারটিকে সেই URL-এ (যেমন http://203.0.113.0) নির্দেশ করুন।

9ed25c3f0cbe62fa.png

আপনি আগে পরীক্ষা যে একই ওয়েবসাইট দেখতে হবে! অভিনন্দন! আপনার ওয়েবসাইট সম্পূর্ণরূপে কুবারনেটে চলে!

8. স্কেল GKE স্থাপনা

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

তিনটি প্রতিলিপি পর্যন্ত আপনার স্থাপনার স্কেল করতে নিম্নলিখিত কমান্ডটি চালান:

kubectl scale deployment monolith --replicas=3

আউটপুট:

deployment.apps/monolith scaled

স্কেল করা স্থাপনা যাচাই করুন

ডিপ্লয়মেন্ট সফলভাবে স্কেল করা হয়েছে তা যাচাই করতে, নিম্নলিখিত কমান্ডটি চালান:

kubectl get all

আউটপুট:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running   0          36m
pod/monolith-7d8bc7bf68-7ds7q   1/1     Running   0          45s
pod/monolith-7d8bc7bf68-c5kxk   1/1     Running   0          45s

NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
service/kubernetes   ClusterIP      10.27.240.1    <none>         443/TCP        25h
service/monolith     LoadBalancer   10.27.253.64   XX.XX.XX.XX   80:32050/TCP   6m7s

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   3         3         3            3           61m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   3         3         3       61m

আপনি আপনার পড চলমান তিনটি উদাহরণ দেখতে হবে. এছাড়াও, মনে রাখবেন যে আপনার স্থাপনা এবং রেপ্লিকাসেটে এখন তিনটির কাঙ্খিত গণনা রয়েছে।

9. ওয়েবসাইটে পরিবর্তন করুন

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

নিম্নলিখিত কমান্ডগুলি চালান, আপডেট করা ফাইলটিকে সঠিক ফাইলের নামে অনুলিপি করুন এবং পরিবর্তনগুলি যাচাই করতে এর বিষয়বস্তু মুদ্রণ করুন:

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

ফলাফল কোড এই মত হওয়া উচিত:

/*
Copyright 2019 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    width: "800px",
    margin: "0 auto",
    padding: theme.spacing(3, 2)
  }
}));
export default function Home() {
  const classes = useStyles();
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Typography variant="h5">
          Fancy Fashion &amp; Style Online
        </Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
          Start shopping Fancy items now!
        </Typography>
      </Paper>
    </div>
  );
}

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

cd ~/monolith-to-microservices/react-app
npm run build:monolith

এখন আপনার কোড আপডেট করা হয়েছে, আপনাকে আপনার ডকার কন্টেইনার পুনর্নির্মাণ করতে হবে এবং কনটেইনার রেজিস্ট্রিতে এটি প্রকাশ করতে হবে। আপনি আগের মতো একই কমান্ড ব্যবহার করতে পারেন, এই সময় ব্যতীত, আপনি সংস্করণ লেবেল আপডেট করবেন!

2.0.0 এর একটি আপডেট হওয়া চিত্র সংস্করণ সহ একটি নতুন ক্লাউড বিল্ড ট্রিগার করতে নিম্নলিখিত কমান্ডটি চালান:

cd ~/monolith-to-microservices/monolith

#Feel free to test your application
npm start

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

ওয়েব সার্ভার প্রক্রিয়া বন্ধ করতে টার্মিনাল উইন্ডোতে Control+C (উইন্ডোজ বা ম্যাক) টিপুন।

পরবর্তী বিভাগে, আপনি শূন্য ডাউনটাইম সহ আপনার অ্যাপ্লিকেশন আপডেট করতে সেই চিত্রটি ব্যবহার করবেন।

10. শূন্য ডাউনটাইম সহ ওয়েবসাইট আপডেট করুন

পরিবর্তনগুলি সম্পন্ন হয়েছে এবং বিপণন দল আপনার আপডেটের সাথে খুশি! এটি ব্যবহারকারীদের বাধা ছাড়াই ওয়েবসাইট আপডেট করার সময়। আপনার ওয়েবসাইট আপডেট করতে নীচের নির্দেশাবলী অনুসরণ করুন.

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

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

kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

আউটপুট:

deployment.apps/monolith image updated

স্থাপনা যাচাই করুন

আপনি নিম্নলিখিত কমান্ড চালানোর মাধ্যমে আপনার স্থাপনার আপডেট যাচাই করতে পারেন:

kubectl get pods

আউটপুট:

NAME                        READY   STATUS              RESTARTS   AGE
monolith-584fbc994b-4hj68   1/1     Terminating         0          60m
monolith-584fbc994b-fpwdw   1/1     Running             0          60m
monolith-584fbc994b-xsk8s   1/1     Terminating         0          60m
monolith-75f4cf58d5-24cq8   1/1     Running             0          3s
monolith-75f4cf58d5-rfj8r   1/1     Running             0          5s
monolith-75f4cf58d5-xm44v   0/1     ContainerCreating   0          1s

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

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

পরিষেবাগুলি তালিকাভুক্ত করতে নিম্নলিখিত কমান্ডটি চালান এবং যদি আপনি এটি ভুলে যান তবে IP ঠিকানাটি দেখুন:

kubectl get svc

আপনার ওয়েবসাইটে আপনার হোমপেজ উপাদান যোগ করা পাঠ্য প্রদর্শন করা উচিত!

8006c9938dbd5aa5.png

11. পরিষ্কার করুন

Git সংগ্রহস্থল মুছুন

cd ~
rm -rf monolith-to-microservices

কন্টেইনার রেজিস্ট্রি ছবি মুছুন

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

# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

ক্লাউড স্টোরেজ থেকে ক্লাউড বিল্ড আর্টিফ্যাক্ট মুছুন

দ্রষ্টব্য: আপনি যদি এই কোডল্যাব ছাড়া অন্য আর্টিফ্যাক্টের জন্য ক্লাউড বিল্ড ব্যবহার করেন, তাহলে আপনাকে ক্লাউড স্টোরেজ বাকেট থেকে ম্যানুয়ালি আপনার উৎস মুছে ফেলতে হবে gs://<PROJECT_ID>_cloudbuild/source

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'

gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done

GKE পরিষেবা মুছুন

kubectl delete service monolith
kubectl delete deployment monolith

GKE ক্লাস্টার মুছুন

gcloud container clusters delete fancy-cluster

দ্রষ্টব্য: এই কমান্ডটি একটু সময় নিতে পারে।

12. অভিনন্দন!

আপনি GKE তে আপনার ওয়েবসাইট স্থাপন করেছেন, স্কেল করেছেন এবং আপডেট করেছেন। আপনি এখন ডকার এবং কুবারনেটসের সাথে অভিজ্ঞ!

অতিরিক্ত সম্পদ