1. ভূমিকা
ওয়েবসাইট এবং অ্যাপ্লিকেশন চালানো কঠিন।
জিনিসগুলি ভুল হয়ে যায় যখন সেগুলি করা উচিত নয়, সার্ভার ক্র্যাশ, চাহিদা বৃদ্ধির ফলে আরও সংস্থান ব্যবহার করা হয় এবং ডাউনটাইম ছাড়া পরিবর্তন করা জটিল এবং চাপযুক্ত।
এমন একটি টুল কল্পনা করুন যা আপনাকে সেই সব করতে সাহায্য করতে পারে এবং এমনকি আপনাকে এটি স্বয়ংক্রিয় করার অনুমতি দেয়! GKE এর সাথে, যে সব শুধুমাত্র সম্ভব নয়, এটা সহজ! এই কোডল্যাবে, আপনি একটি কাল্পনিক কোম্পানির জন্য একটি ইকমার্স ওয়েবসাইট চালাচ্ছেন এমন একজন ডেভেলপারের ভূমিকা অনুমান করেন—ফ্যান্সি স্টোর। স্কেলিং এবং আউটেজের সমস্যাগুলির কারণে, আপনাকে আপনার অ্যাপ্লিকেশনটি GKE-তে স্থাপন করার দায়িত্ব দেওয়া হয়েছে!
অনুশীলনগুলি একটি সাধারণ ক্লাউড বিকাশকারীর অভিজ্ঞতা প্রতিফলিত করার জন্য আদেশ দেওয়া হয়েছে:
- একটি GKE ক্লাস্টার তৈরি করুন।
- একটি ডকার কন্টেইনার তৈরি করুন।
- GKE তে কন্টেইনার স্থাপন করুন।
- একটি পরিষেবার মাধ্যমে ধারকটি প্রকাশ করুন।
- ধারকটিকে একাধিক প্রতিলিপিতে স্কেল করুন।
- ওয়েবসাইট পরিবর্তন করুন।
- শূন্য ডাউনটাইম সহ একটি নতুন সংস্করণ রোল আউট করুন৷
স্থাপত্য চিত্র
আপনি কি শিখবেন
- কিভাবে একটি GKE ক্লাস্টার তৈরি করবেন
- কিভাবে একটি ডকার ইমেজ তৈরি করতে হয়
- কুবারনেটসে ডকার ইমেজ কিভাবে স্থাপন করবেন
- কুবারনেটসে একটি অ্যাপ্লিকেশন কীভাবে স্কেল করবেন
- কুবারনেটসে কীভাবে রোলিং আপডেট করবেন
পূর্বশর্ত
2. পরিবেশ সেটআপ
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন৷
মনে রাখবেন, প্রোজেক্ট আইডি হল সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যেই নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটিকে পরে PROJECT_ID
হিসাবে উল্লেখ করা হবে৷
এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য৷ আপনি যদি নতুন ব্যবহারকারী না হন, তাহলে চিন্তা করবেন না কারণ কোডল্যাবের জন্য আপনাকে কয়েক ডলারের বেশি খরচ করতে হবে না। যাইহোক, আপনি যদি আরও সংস্থান ব্যবহার করেন বা সেগুলি চলমান রেখে দেন তবে কোডল্যাবটির জন্য আপনার আরও অর্থ ব্যয় হতে পারে (শেষে "ক্লিন আপ" বিভাগটি দেখুন)। আরও তথ্যের জন্য, মূল্য দেখুন।
মেঘের শেল
আপনি যখন আপনার ল্যাপটপের সাথে দূরবর্তীভাবে Google ক্লাউড এবং GKE পরিচালনা করতে পারেন, আপনি কোডল্যাবের জন্য ক্লাউড শেল — ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ — ব্যবহার করবেন৷
এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জামগুলির সাথে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এর মানে হল যে এই কোডল্যাবের জন্য আপনার যা দরকার তা হল একটি ব্রাউজার (হ্যাঁ, এটি একটি Chromebook এ কাজ করে)।
- ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগের জন্য এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে)।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রকল্পটি ইতিমধ্যেই আপনার 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
খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন বা ক্লাউড কনসোল ড্যাশবোর্ডে দেখুন:
ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা আপনার ভবিষ্যত কমান্ড চালানোর সময় কার্যকর হতে পারে।
echo $GOOGLE_CLOUD_PROJECT
কমান্ড আউটপুট
<PROJECT_ID>
- অবশেষে, ডিফল্ট জোন এবং প্রকল্প কনফিগারেশন সেট করুন।
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
এছাড়াও আপনি ক্লাউড কনসোলে আপনার ক্লাস্টার এবং সম্পর্কিত তথ্য দেখতে পারেন। উপরের-বাম কোণে মেনু বোতামে ক্লিক করুন, কুবারনেটস ইঞ্জিনে নীচে স্ক্রোল করুন এবং ক্লাস্টারগুলিতে ক্লিক করুন। আপনার ফ্যান্সি-ক্লাস্টার নামের ক্লাস্টার দেখতে হবে।
অভিনন্দন! আপনি আপনার প্রথম ক্লাস্টার তৈরি করেছেন!
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-এ প্রিভিউ নির্বাচন করে আপনার অ্যাপ্লিকেশনটির পূর্বরূপ দেখতে পারেন।
এটি একটি নতুন উইন্ডো খুলতে হবে যেখানে আপনি আপনার অভিনব দোকানটি কার্যকর দেখতে পাবেন!
ওয়েবসাইট দেখার পরে আপনি সেই উইন্ডোটি বন্ধ করতে পারেন। ওয়েব সার্ভার প্রক্রিয়া বন্ধ করতে টার্মিনাল উইন্ডোতে 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-এ ক্লিক করুন। সেখানে, আপনি আপনার পূর্ববর্তী বিল্ডগুলির একটি তালিকা দেখতে পারেন, তবে সেখানে শুধুমাত্র আপনার তৈরি করা হওয়া উচিত।
আপনি যদি বিল্ড আইডিতে ক্লিক করেন, তাহলে আপনি লগ আউটপুট সহ সেই বিল্ডের সমস্ত বিবরণ দেখতে পাবেন।
বিল্ড ডিটেইলস পৃষ্ঠায়, আপনি বিল্ড ইনফরমেশন বিভাগে ছবির নামের উপর ক্লিক করে তৈরি করা কন্টেইনার ইমেজ দেখতে পারেন।
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) নির্দেশ করুন।
আপনি আগে পরীক্ষা যে একই ওয়েবসাইট দেখতে হবে! অভিনন্দন! আপনার ওয়েবসাইট সম্পূর্ণরূপে কুবারনেটে চলে!
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 & 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
আপনার ওয়েবসাইটে আপনার হোমপেজ উপাদান যোগ করা পাঠ্য প্রদর্শন করা উচিত!
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 তে আপনার ওয়েবসাইট স্থাপন করেছেন, স্কেল করেছেন এবং আপডেট করেছেন। আপনি এখন ডকার এবং কুবারনেটসের সাথে অভিজ্ঞ!