১. সংক্ষিপ্ত বিবরণ
কনফিডেনশিয়াল স্পেস (CS) সংবেদনশীল ডেটা প্রক্রিয়াকরণের জন্য একটি সুরক্ষিত, সত্যায়িত এবং এনক্রিপ্টেড পরিবেশ প্রদান করে। স্বতন্ত্র ভিএম ইনস্ট্যান্সের উপর নির্ভর করা পরিচালনগত অতিরিক্ত বোঝা তৈরি করে, কারণ মিশন ক্রিটিক্যাল পরিষেবাগুলির জন্য প্রয়োজনীয় স্কেলেবিলিটি ম্যানুয়াল অর্কেস্ট্রেশনে থাকে না। স্বয়ংক্রিয় অর্কেস্ট্রেশন ছাড়া, একটি ফ্লিট জুড়ে সিঙ্ক্রোনাইজড রোলিং আপডেট করা বা নতুন ওএস ইমেজ স্থাপন করা প্রযুক্তিগতভাবে কঠিন হয়ে পড়ে এবং ডাউনটাইমের ঝুঁকি থাকে।
এই কোডল্যাবে, আপনি শিখবেন কিভাবে একটি ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG)-এ একটি কনফিডেনশিয়াল স্পেস ওয়ার্কলোড ডেপ্লয় করতে হয়। এছাড়াও আপনি শিখবেন কিভাবে হেলথ চেকের মাধ্যমে অটো-হিলিং, সিপিইউ ইউটিলাইজেশনের উপর ভিত্তি করে অটো-স্কেলিং, এবং ওএস ইমেজ ও ওয়ার্কলোড উভয়ের জন্য রোলিং আপডেট চালু করতে হয়।
এই কোডল্যাবে দেখানো পদ্ধতিগুলো আপনাকে অত্যন্ত গুরুত্বপূর্ণ ও দীর্ঘমেয়াদী ডেপ্লয়মেন্টের জন্য আপনার নিজস্ব প্রোডাকশন-রেডি এবং সুরক্ষিত কনফিডেনশিয়াল স্পেস সেট আপ করতে সাহায্য করবে।
আপনি যা শিখবেন
- গোপনীয় স্থানের জন্য কীভাবে একটি বিশেষায়িত ইনস্ট্যান্স টেমপ্লেট তৈরি করবেন
- কীভাবে গুগল কম্পিউট ইঞ্জিন ব্যবহার করবেন এবং কীভাবে এমআইজি (MIG) ও ইনস্ট্যান্স গ্রুপ কনফিগার করবেন
- অটোহিলিং-এর জন্য কীভাবে ফায়ারওয়াল রুল এবং হেলথ চেক তৈরি করবেন।
- টেমপ্লেট এবং হেলথ চেক ব্যবহার করে কীভাবে একটি জোনাল এমআইজি কনফিগার করতে হয়।
- MIG-এর জন্য অটোস্কেলিং কীভাবে সেট আপ করবেন।
- কনফিডেনশিয়াল স্পেসের জন্য ওয়ার্কলোড ইমেজ এবং নতুন ওএস ইমেজ রিলিজ উভয়ের ক্ষেত্রেই MIG ফাইলে স্ক্রিপ্টিং ব্যবহার করে কীভাবে এক ক্লিকে ওএস ইমেজ আপডেট সেট আপ করবেন
আপনার যা যা লাগবে
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।
- টেক্সট এডিটর, ডকার ডেপ্লয়মেন্ট এবং ব্যাশ স্ক্রিপ্টিং সম্পর্কে পরিচিতি
- gcloud কমান্ড-লাইন টুলটি ইনস্টল এবং প্রমাণীকৃত হয়েছে।
- কম্পিউট ইঞ্জিন, কনফিডেনশিয়াল স্পেস, আইএএম, কনফিডেনশিয়াল ভিএম, কন্টেইনার প্রযুক্তি, রিমোট রিপোজিটরি, সার্ভিস অ্যাকাউন্ট, ক্লাউড রান এবং ক্লাউড শিডিউলার সম্পর্কে প্রাথমিক ধারণা।
- একটি কনফিডেনশিয়াল স্পেস ওয়ার্কলোড কন্টেইনার ইমেজ ইতিমধ্যে বিল্ড করে আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করা হয়েছে।
২. মিগ বিমানের গোপনীয় স্থান কীভাবে কাজ করে
একটি কনফিডেনশিয়াল স্পেস ওয়ার্কলোড স্থাপন করতে ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG) ব্যবহার করলে একটি সুরক্ষিত অ্যাপ্লিকেশন আরও শক্তিশালী, স্কেলেবল এবং পরিচালনায় সহজতর হয়।
একটি প্রোডাকশন সার্ভিসের নিরাপত্তা এবং অপারেশনাল চাহিদা যৌক্তিকভাবে দুটি উপাদানের মধ্যে বিভক্ত। কনফিডেনশিয়াল স্পেস একটি ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট (TEE) নামক অত্যন্ত বিচ্ছিন্ন, এনক্রিপ্টেড এবং সত্যায়িত পরিবেশে ওয়ার্কলোড চালানোর মাধ্যমে প্রয়োজনীয় নিরাপত্তা প্রদান করে। অন্যদিকে, MIG-গুলো কুবারনেটিসের মতোই বৃহৎ পরিসরে সুরক্ষিত অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় অপারেশনাল সক্ষমতা প্রদান করে। MIG-গুলো একটিমাত্র VM-এ মিশন-ক্রিটিক্যাল ওয়ার্কলোড চালানোর অন্তর্নিহিত ঝুঁকিগুলো দূর করে, যা সম্ভাব্যভাবে ধীরগতির বা ব্যর্থতার ঝুঁকিপূর্ণ হতে পারে। এই সমন্বয় ডেটা সুরক্ষা এবং সিস্টেমের নির্ভরযোগ্যতা উভয়ই নিশ্চিত করে। এই সমাধানটি হাই অ্যাভেইলেবিলিটি এবং অটো-হিলিং নিশ্চিত করে, কারণ ওয়ার্কলোডটি একটি পুলে থাকা একাধিক VM জুড়ে চলে। যদি একটি VM ক্র্যাশ করে, লোড ব্যালান্সিং এবং অবশিষ্ট ইনস্ট্যান্সগুলোর উপস্থিতির কারণে সার্ভিসটি সম্পূর্ণ কার্যকর থাকে।
এছাড়াও, MIG-গুলো VM-গুলোর কার্যক্ষম অবস্থা ক্রমাগত নিরীক্ষণ করার জন্য কনফিগারযোগ্য হেলথ চেক ব্যবহার করে। যদি কোনো ইনস্ট্যান্সকে আনহেলদি বা অস্বাস্থ্যকর বলে মনে হয়, তবে MIG স্বয়ংক্রিয়ভাবে সেটিকে একটি নতুন, হেলদি VM দিয়ে প্রতিস্থাপন করে, যার ফলে এর নিরবচ্ছিন্ন কার্যক্রম নিশ্চিত হয়।
এমআইজি তার অটোস্কেলিং বৈশিষ্ট্যের মাধ্যমে ব্যবহারকারীদের জন্য কার্যকর স্কেলেবিলিটিও প্রদান করে। এই সক্ষমতা ম্যানুয়াল হস্তক্ষেপ ছাড়াই ক্ষমতা ব্যবস্থাপনার একটি স্বয়ংক্রিয় উপায় সরবরাহ করে, যা ব্যবহারের উপর ভিত্তি করে নমনীয়ভাবে ক্ষমতা যোগ বা অপসারণ করার প্রয়োজন পূরণ করে।
অবশেষে, MIG রোলিং আপডেটের মাধ্যমে জিরো-ডাউনটাইম আপডেট সক্ষম করে। এর একটি প্রধান সুবিধা হলো অন্তর্নিহিত কনফিডেনশিয়াল স্পেস OS ইমেজ অথবা অ্যাপ্লিকেশনটির কন্টেইনার ইমেজ (বা উভয়ই)-এর জন্য " ওয়ান-ক্লিক আপগ্রেড " করার ক্ষমতা, যা কোনো সার্ভিস ডাউনটাইম না ঘটিয়েই করা যায়। MIG এই পরিবর্তনটি পরিচালনা করে পুরোনো ইনস্ট্যান্সগুলোকে ধীরে ধীরে আপডেট করা ইমেজ চালিত নতুন ইনস্ট্যান্স দিয়ে প্রতিস্থাপন করার মাধ্যমে, যা ডেপ্লয়মেন্ট জুড়ে নিরবচ্ছিন্ন প্রাপ্যতা নিশ্চিত করে। উল্লেখ্য যে, এই ধরনের পর্যায়ক্রমিক আপগ্রেড সমর্থন করার জন্য আপনার অ্যাপ্লিকেশনটিকে ব্যাকওয়ার্ড কম্প্যাটিবল হতে হতে পারে।
৩. ক্লাউড রিসোর্স সেট আপ করা
শুরু করার আগে
- একটি গুগল ক্লাউড প্রজেক্ট সেট আপ করুন। গুগল ক্লাউড প্রজেক্ট তৈরি করার বিষয়ে আরও তথ্যের জন্য, অনুগ্রহ করে "আপনার প্রথম গুগল প্রজেক্ট সেট আপ করুন এবং পরিচালনা করুন" কোডল্যাবটি দেখুন। প্রজেক্ট আইডি কীভাবে পুনরুদ্ধার করতে হয় এবং এটি প্রজেক্টের নাম ও প্রজেক্ট নম্বর থেকে কীভাবে আলাদা, সে সম্পর্কে বিস্তারিত জানতে আপনি প্রজেক্ট তৈরি এবং পরিচালনা অংশটি দেখতে পারেন।
- আপনার প্রোজেক্টগুলোর জন্য বিলিং চালু করুন ।
- আপনার যেকোনো একটি গুগল প্রজেক্টের ক্লাউড শেল- এ, নিচে দেখানো অনুযায়ী প্রয়োজনীয় প্রজেক্ট এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করুন।
export CURRENT_PROJECT_ID=<Google Cloud project id of current project>
- আপনার প্রোজেক্টের জন্য কনফিডেনশিয়াল কম্পিউটিং এপিআই এবং নিম্নলিখিত এপিআইগুলো সক্রিয় করুন।
gcloud config set project $CURRENT_PROJECT_ID
gcloud services enable \
cloudapis.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
confidentialcomputing.googleapis.com \
compute.googleapis.com \
logging.googleapis.com \
run.googleapis.com \
cloudscheduler.googleapis.com
- আপনার গুগল ক্লাউড প্রজেক্টের ক্লাউড শেলে, কনফিডেনশিয়াল স্পেস কোডল্যাব গিটহাব রিপোজিটরিটি ক্লোন করুন এবং এই কোডল্যাবটি সম্পূর্ণ করার জন্য প্রয়োজনীয় স্ক্রিপ্টগুলো পেতে নিচের কমান্ডটি ব্যবহার করুন।
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- ইনস্ট্যান্স গ্রুপ কোডল্যাব-এর স্ক্রিপ্টস ডিরেক্টরিতে ডিরেক্টরিটি পরিবর্তন করুন।
cd confidential-space/codelabs/mig_cs_codelab/scripts
- আপনার নির্বাচিত প্রজেক্টের আইডি অনুযায়ী config_env.sh ফাইলের প্রজেক্ট আইডি লাইনটি আপডেট করুন।
- পূর্ব-বিদ্যমান যেকোনো ভেরিয়েবল সেট করুন। এই ভেরিয়েবলগুলো ব্যবহার করে রিসোর্সের নামগুলো ওভাররাইড করুন।
- আপনি বিদ্যমান ক্লাউড রিসোর্সের নাম দিয়ে নিম্নলিখিত ভেরিয়েবলগুলো সেট করতে পারেন। যদি ভেরিয়েবলটি সেট করা থাকে, তাহলে প্রজেক্টের সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্সগুলো ব্যবহৃত হবে। আর যদি এটি সেট করা না থাকে, তাহলে ক্লাউড রিসোর্সের নামটি config_env.sh স্ক্রিপ্ট থেকে আসবে।
- এই প্রজেক্টের রিসোর্স নামগুলোর জন্য প্রজেক্ট আইডির উপর ভিত্তি করে বাকি ভেরিয়েবলের নামগুলো সেট করতে config_env.sh স্ক্রিপ্টটি চালান।
source config_env.sh
- প্রকল্পের জন্য অনুমতি যোগ করুন। 'grant an IAM role' ওয়েবপেজে দেওয়া বিবরণ অনুসরণ করে অনুমতি যোগ করা যেতে পারে।
এই প্রকল্পের জন্য আপনার নিম্নলিখিত অনুমতিগুলির প্রয়োজন হবে।
- আর্টিফ্যাক্ট রেজিস্ট্রি লেখক
- ক্লাউড শিডিউলার অ্যাডমিন
- কম্পিউট সার্ভিস এজেন্ট
- গোপনীয় কম্পিউটিং ওয়ার্কলোড ব্যবহারকারী
- লগ লেখক
- ক্লাউড রান ডেভেলপার
- ক্লাউড রান ইনভোকার
gcloud config set project $CURRENT_PROJECT_ID
# Add Artifact Registry Writer role
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/artifactregistry.writer'
# Add Confidential Space Workload Userd
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/confidentialcomputing.workloadUser'
# Add Logging Log Writer
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/logging.logWriter'
# Add Cloud Run Developer
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/run.developer'
# Add Cloud Run Invoker
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/run.invoker'
# Add Cloud Scheduler Admin
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/cloudscheduler.admin'
- test_workload.py দেখুন
- সোর্স কোড পর্যালোচনা করে ওয়ার্কলোডের আউটপুট যাচাই করুন, এটি কেবল ওয়ার্কলোডের বর্তমান সংস্করণটি প্রিন্ট করবে।
- যখন আমরা প্রথমবার আমাদের ওয়ার্কলোড CS-এ পুশ করে আউটপুট চেক করব, তখন "ভার্সন A" প্রিন্ট হতে দেখা যাবে।
৪. কাজের চাপ নির্ধারণ করা
এই কোডল্যাবে ব্যবহৃত ওয়ার্কলোডের জন্য আপনাকে প্রথমে একটি ডকার ইমেজ তৈরি করতে হবে। ওয়ার্কলোডটি হলো একটি সাধারণ স্ক্রিপ্ট, যা আপনি বর্তমানে যে ওয়ার্কলোডটি চালাচ্ছেন তার ভার্সন প্রিন্ট করে দেখায়। এটি প্রথমে ওয়ার্কলোডটি শুরু হচ্ছে তা প্রিন্ট করবে, তারপর ওয়ার্কলোডের ভার্সন প্রিন্ট করবে, ৫ সেকেন্ডের জন্য অপেক্ষা করবে এবং সবশেষে ওয়ার্কলোডটি শেষ হয়েছে তা প্রিন্ট করবে।
ওয়ার্কলোড তৈরি করার ধাপসমূহ
- ওয়ার্কলোড তৈরি করতে create_workload.sh চালান। এই স্ক্রিপ্টটি:
- প্রকল্পের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি তৈরি করে যেখানে ওয়ার্কলোড প্রকাশ করা হবে।
- কোডটি বিল্ড করে একটি ডকার ইমেজে প্যাকেজ করে। আরও তথ্যের জন্য সংশ্লিষ্ট ডকারফাইল কনফিগারেশনটি দেখুন।
- প্রকল্পের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি-তে ডকার ইমেজটি প্রকাশ করে।
- সার্ভিস অ্যাকাউন্ট <আপনার সার্ভিস অ্যাকাউন্টের নাম>-কে আর্টিফ্যাক্ট রেজিস্ট্রি <আর্টিফ্যাক্ট রেজিস্ট্রি রিপো-র নাম>-এর জন্য পঠন অনুমতি প্রদান করা হলো।
৫. ইনস্ট্যান্স টেমপ্লেট এবং এমআইজি সেট আপ করা
ইনস্ট্যান্স টেমপ্লেট তৈরির ধাপসমূহ
আপনাকে প্রথমে একটি ইনস্ট্যান্স টেমপ্লেট তৈরি করতে হবে। এই টেমপ্লেটটি হলো প্রয়োজনীয় ব্লুপ্রিন্ট, যা ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG) কনফিডেনশিয়াল স্পেসের মধ্যে আপনার ওয়ার্কলোডগুলো প্রোভিশন ও রান করার জন্য ব্যবহার করবে।
ইনস্ট্যান্স টেমপ্লেটটি অপরিহার্য, কারণ এটি সমস্ত বিশেষায়িত প্যারামিটার নির্ধারণ করে:
- মেশিনের ধরণ: এই উদাহরণে আমরা একটি গোপনীয় ভিএম মেশিনের ধরণ (যেমন,
n2d-standard-2) ব্যবহার করেছি যা এএমডি এসইভি গোপনীয় কম্পিউটিং প্রযুক্তি (--confidential-compute-type=SEV) সমর্থন করে। - ভিএম ওএস ইমেজ: আমরা সর্বশেষ কনফিডেনশিয়াল স্পেস অপারেটিং সিস্টেম ইমেজটি পুল করার জন্য
confidential-space-imagesপ্রজেক্ট এবংconfidential-space-debugইমেজ ফ্যামিলি ব্যবহার করি। - দ্রষ্টব্য: সহজে সমস্যা সমাধানের সুবিধার্থে আমরা এই নির্দেশিকায় ডিবাগ ইমেজ ব্যবহার করেছি। প্রোডাকশন ইমেজের থেকে ভিন্ন, ডিবাগ সংস্করণটি আপনার ওয়ার্কলোড শেষ হওয়ার পরেও ভিএম (VM) চালু রাখে এবং পরীক্ষার জন্য এসএসএইচ (SSH) অ্যাক্সেসের সুযোগ দেয়। বাস্তব জগতের সংবেদনশীল ডেটা ব্যবহার করে প্রোডাকশন ডেপ্লয়মেন্টের ক্ষেত্রে, আপনাকে অবশ্যই প্রোডাকশন ইমেজ ফ্যামিলিতে স্যুইচ করতে হবে।
- ওয়ার্কলোড রেফারেন্স: মেটাডেটাতে থাকা প্রয়োজনীয়
tee-image-referenceলাইনে সেই নির্দিষ্ট কন্টেইনার ইমেজটি (আপনার অ্যাপ্লিকেশন ওয়ার্কলোড) থাকে, যা কনফিডেনশিয়াল স্পেস ভিএম চালু করবে।
এই সেটআপটি নিশ্চিত করে যে MIG দ্বারা তৈরি প্রতিটি VM হলো একটি যথাযথভাবে কনফিগার করা গোপনীয় স্থান, যা আপনার ওয়ার্কলোড সম্পাদনের জন্য প্রস্তুত।
ম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করার ধাপসমূহ
পরবর্তী ধাপ হলো আপনার তৈরি করা টেমপ্লেটটি ব্যবহার করে ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG) তৈরি করা। MIG অপরিহার্য, কারণ এটি একাধিক অভিন্ন VM-এর ডেপ্লয়মেন্ট, ম্যানেজমেন্ট এবং স্কেলিং স্বয়ংক্রিয় করে তোলে।
`create_launch_mig.sh` স্ক্রিপ্টটি তিনটি প্রধান উদ্দেশ্য সাধন করে:
১. এমআইজি তৈরি করুন
- কমান্ড:
gcloud compute instance-groups managed create ${CURRENT_MIG_NAME} - উদ্দেশ্য: এই কমান্ডটি এমন একটি গ্রুপ তৈরি করে যা আপনার ভিএমগুলো পরিচালনা করবে।
-
--size 3: এটি নির্দেশ করে যে MIG প্রাথমিকভাবে আপনার ওয়ার্কলোডের ৩টি ইনস্ট্যান্স তৈরি ও রক্ষণাবেক্ষণ করবে। -
--template ${TEMPLATE_NAME}: গুরুত্বপূর্ণভাবে, এটি পূর্বে তৈরি করা ইনস্ট্যান্স টেমপ্লেটকে রেফারেন্স করে , যা নিশ্চিত করে যে তিনটি ইনস্ট্যান্সই আপনার নির্দিষ্টtee-image-referenceওয়ার্কলোড কন্টেইনার চালিত কনফিডেনশিয়াল স্পেস ভিএম হিসাবে কনফিগার করা আছে। -
--zone ${CURRENT_PROJECT_ZONE}: ইনস্ট্যান্সগুলির স্থাপনের স্থান নির্দিষ্ট করে।
২. প্রজেক্ট নম্বরটি সংগ্রহ করুন
- কমান্ড:
PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)") - উদ্দেশ্য: এই স্ক্রিপ্টটি আপনার প্রোজেক্টের সংখ্যাসূচক আইডি সংগ্রহ করে। সার্ভিস অ্যাকাউন্টের রোল ও পারমিশন তৈরি করার জন্য, বিশেষ করে গুগল-পরিচালিত সার্ভিস এজেন্টদের ক্ষেত্রে, এই নম্বরটির প্রায়শই প্রয়োজন হয়।
৩. আইএএম অনুমতি প্রদান করুন
- কমান্ড:
gcloud projects add-iam-policy-binding --role="roles/compute.serviceAgent" - উদ্দেশ্য: এই ধাপটি আপনার ওয়ার্কলোডের সার্ভিস অ্যাকাউন্টকে (
${SERVICE_ACCOUNT}) কম্পিউট ইঞ্জিন সার্ভিস এজেন্ট রোল প্রদান করে। এই অনুমতিটি গুরুত্বপূর্ণ কারণ এটি সার্ভিস অ্যাকাউন্টকে প্রোজেক্টের কম্পিউট ইঞ্জিন সার্ভিসের পক্ষ থেকে কাজ করার সুযোগ দেয়—যা প্রায়শই MIG-এর স্বয়ংক্রিয় ফিচারগুলোর জন্য প্রয়োজনীয়, যেমন ইনস্ট্যান্স পরিচালনা করা, নেটওয়ার্কিং সেট আপ করা এবং অন্যান্য গুগল ক্লাউড সার্ভিসের সাথে যোগাযোগ করা।
ম্যানেজড ইনস্ট্যান্স গ্রুপ তৈরি করতে create_launch_mig.sh চালান।
৬. অটো-হিলিং এবং অটো-স্কেলিং চালু করার ধাপসমূহ
অটোহিলিং সেট আপ করা
উচ্চ প্রাপ্যতা নিশ্চিত করতে, আমরা যাচাই করি যে ওয়ার্কলোডটি সাড়া দিচ্ছে। যদি অ্যাপ্লিকেশনটি থেমে যায়, তাহলে MIG-এর উচিত VM-টিকে প্রতিস্থাপন করা। সোর্স আইপি রেঞ্জের জন্য ফায়ারওয়াল নিয়মাবলী এই নথিতে সংজ্ঞায়িত করা আছে।
# 1. Create Health Check (TCP Port 22)
gcloud compute health-checks create tcp ${HEALTH_CHECK_NAME} \
--port 22 \
--check-interval 30s \
--healthy-threshold 1 \
--timeout 10s \
--unhealthy-threshold 3 \
--global
# 2. Allow Health Check Traffic (Firewall)
gcloud compute firewall-rules create allow-health-check \
--allow tcp:22 \
--source-ranges 130.211.0.0/22,35.191.0.0/16 \
--network default \
--project="${CURRENT_PROJECT_ID}" \
# 3. Apply to MIG
gcloud compute instance-groups managed update ${CURRENT_MIG_NAME} \
--health-check ${HEALTH_CHECK_NAME} \
--initial-delay 60 \
--zone ${CURRENT_PROJECT_ZONE}
অটোস্কেলিং সেট আপ করা
ট্র্যাফিকের আকস্মিক বৃদ্ধি সামাল দেওয়ার জন্য আমরা গ্রুপটিকে এমনভাবে কনফিগার করব যাতে এটি স্বয়ংক্রিয়ভাবে ১ থেকে ৫টি ইনস্ট্যান্সের মধ্যে স্কেল করতে পারে।
gcloud compute instance-groups managed set-autoscaling ${CURRENT_MIG_NAME} \
--max-num-replicas 5 \
--target-cpu-utilization 0.80 \
--cool-down-period 90 \
--zone ${CURRENT_PROJECT_ZONE}
৭. ওয়ার্কলোড যাচাই করা এবং ইমেজ আপডেট সেট আপ করা
কাজের চাপ যাচাই করুন
ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG) ভিএমগুলো চালু করার পর, আপনার কনফিডেনশিয়াল স্পেস ওয়ার্কলোডটি সঠিকভাবে চলছে কিনা তা আমাদের যাচাই করতে হবে।
আপনি এটি গুগল ক্লাউড কনসোল অথবা কমান্ড লাইনের মাধ্যমে করতে পারেন।
gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} \
--zone ${CURRENT_PROJECT_ZONE}
আপনার ওয়ার্কলোডের লগ দেখতে আপনি সেই নির্দিষ্ট ইনস্ট্যান্সটির সিরিয়াল পোর্ট আউটপুটও চেক করতে পারেন।
# Replace <INSTANCE_NAME> with one of the names from the previous command
gcloud compute instances get-serial-port-output <INSTANCE_NAME> \
--zone ${CURRENT_PROJECT_ZONE} \
--port 1
ইমেজ আপডেট সেট আপ করা
প্রোডাকশন পরিবেশে, দুটি স্বতন্ত্র পরিস্থিতি মোকাবেলার জন্য আপনার ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG) নিয়মিত আপডেট করা আবশ্যক:
- ওয়ার্কলোড আপডেট: আপনার অ্যাপ্লিকেশন কোডের একটি নতুন সংস্করণ প্রকাশ করা (যেমন, test_workload.py ফাইলটিকে v1 থেকে v2-তে আপডেট করা)।
- অবকাঠামোগত হালনাগাদ: গুগল অন্তর্নিহিত কনফিডেনশিয়াল স্পেস ওএস-এর জন্য একটি নিরাপত্তা প্যাচ বা আপডেট প্রকাশ করছে। উল্লেখ্য যে, অন্তত মাসিক ভিত্তিতে সর্বশেষ সিএস ইমেজটি সংগ্রহ করা একটি উত্তম অভ্যাস।
যেহেতু আমরা আমাদের ইনস্ট্যান্স টেমপ্লেটটি একটি ডাইনামিক ইমেজ লিঙ্ক (.../images/family/...) এবং একটি ডাইনামিক কন্টেইনার ট্যাগ (:latest) দিয়ে কনফিগার করেছি, তাই আমরা একটিমাত্র 'রোলিং রিপ্লেস' অপারেশনের মাধ্যমেই এই দুটি পরিস্থিতি সামলাতে পারি। এটি নিশ্চিত করে যে আপনার ভিএম-এর বহরটি কোনো ডাউনটাইম ছাড়াই এবং প্রতিটি ছোটখাটো পরিবর্তনের জন্য নতুন ইনস্ট্যান্স টেমপ্লেট তৈরি করার প্রয়োজন ছাড়াই সর্বদা সর্বশেষ স্ট্যাকটি ব্যবহার করছে।
রোলিং রিপ্লেস স্ক্রিপ্ট
update_images ডিরেক্টরির অধীনে `update_images_script.sh` ফাইলটিতে যান। এই স্ক্রিপ্টটি একটি `Rolling Replace` প্রক্রিয়া চালু করে, যা ক্রমান্বয়ে গ্রুপের প্রতিটি VM-কে ধ্বংস করে এবং পুনরায় তৈরি করে।
#!/bin/bash
# Initialize the template
gcloud compute instance-groups managed set-instance-template "${CURRENT_MIG_NAME}" \
--template=projects/"${PROJECT_ID}"/global/instanceTemplates/"${TEMPLATE_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${PROJECT_ID}"
# Trigger the rolling replace
gcloud compute instance-groups managed rolling-action replace "${CURRENT_MIG_NAME}" \
--version=template="${TEMPLATE_NAME}" \
--project="${PROJECT_ID}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--max-surge=1 \
--max-unavailable=0
# Wait for the update to complete
gcloud compute instance-groups managed wait-until --version-target-reached "${CURRENT_MIG_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${PROJECT_ID}"
এই স্ক্রিপ্টটির জন্য আমরা রিস্টার্টের পরিবর্তে রিপ্লেস ব্যবহার করতে পারি।
- রিস্টার্ট করলে মেশিনটি কেবল রিবুট হয়। এটি বিদ্যমান ওএস ডিস্কটিকে অক্ষুণ্ণ রাখে, যার অর্থ হলো এটি নতুন কোনো ওএস প্যাচ গ্রহণ করবে না ।
- একটি রিপ্লেস (Replace) ভিএম (VM) মুছে ফেলে এবং টেমপ্লেট থেকে একটি নতুন ভিএম তৈরি করে। এটি সিস্টেমকে ফ্যামিলি থেকে সর্বশেষ কনফিডেনশিয়াল স্পেস ওএস (Confidential Space OS) ইমেজটি খুঁজে বের করতে এবং রেজিস্ট্রি থেকে "লেটেস্ট" কন্টেইনার ইমেজটি পুল করতে বাধ্য করে।
–max-surge=1 : এটি MIG-কে আপনার নির্ধারিত আকারের চেয়ে সাময়িকভাবে ১টি অতিরিক্ত VM তৈরি করার সুযোগ দেয়। এটি একটি নতুন (আপডেট করা) VM চালু করে এবং পুরোনো (সেকেলে) VM মুছে ফেলার আগে সেটির হেলদি (healthy) হওয়ার জন্য অপেক্ষা করে।
–max-unavailable=0 : এটি শূন্য ডাউনটাইম নিশ্চিত করে। এটি MIG-কে বলে যে, যতক্ষণ না সফলভাবে একটি প্রতিস্থাপন মেশিন চালু করা হচ্ছে, ততক্ষণ পর্যন্ত কোনো মেশিনকে অফলাইনে নেওয়া যাবে না ।
রোলিং রিস্টার্ট স্ক্রিপ্ট
update_images ডিরেক্টরির অধীনে `update_workload_image_script.sh` নামে আরও একটি স্ক্রিপ্ট রয়েছে। এই স্ক্রিপ্টটি একটি রোলিং রিস্টার্ট (Rolling Restart) চালু করে, যা ওয়ার্কলোড রিফ্রেশ করার জন্য ব্যবহৃত একটি দ্রুততর পদ্ধতি। যেহেতু কনফিডেনশিয়াল স্পেস (Confidential Space) প্রতিটি বুটে রেজিস্ট্রি থেকে কন্টেইনার ইমেজটি নিয়ে নেয়, তাই অন্তর্নিহিত হোস্টকে পরিবর্তন না করেই আপনার অ্যাপ্লিকেশনটিকে :latest সংস্করণে আপডেট করার জন্য একটি রিস্টার্টই যথেষ্ট।
#!/bin/bash
# Reboots the existing VMs to refresh the container
gcloud compute instance-groups managed rolling-action restart "${CURRENT_MIG_NAME}" \
--project="${PROJECT_ID}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--max-surge=1 \
--max-unavailable=0
# Wait for the update to complete
gcloud compute instance-groups managed wait-until --stable "${CURRENT_MIG_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${CURRENT_PROJECT_ID}"
আপডেট করা ওয়ার্কলোড যাচাই করুন
আমরা একটি বাস্তব অ্যাপ্লিকেশন রিলিজ সিমুলেট করার মাধ্যমে "ওয়ান-ক্লিক আপগ্রেড" পরীক্ষা করতে পারি। আমরা ওয়ার্কলোড কোড পরিবর্তন করব, সেটিকে আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করব, MIG আপডেট করব এবং যাচাই করব যে নতুন সংস্করণটি কোনো ডাউনটাইম ছাড়াই চলছে।
ধাপ ১: একটি নতুন ওয়ার্কলোড সংস্করণ স্থাপন করুন
প্রথমে, আমাদের আপনার অ্যাপ্লিকেশনটির একটি 'নতুন' সংস্করণ তৈরি করতে হবে।
- আপনার স্থানীয় test_workload.py ফাইলটি খুলুন।
- ভার্সন প্রিন্ট স্টেটমেন্টটি print("Workload Version A") থেকে print("Workload Version B")-তে পরিবর্তন করুন।
- create_workload.sh চালিয়ে কন্টেইনার ইমেজটি পুনর্নির্মাণ করুন এবং আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করুন। লক্ষ্য করুন যে আমরা একই ট্যাগে (:latest) পুশ করছি।
ধাপ ২: রোলিং আপডেটটি কার্যকর করুন
পূর্ববর্তী বিভাগে তৈরি করা আপডেট স্ক্রিপ্টটি চালান। এটি MIG-কে প্রতিটি VM প্রতিস্থাপন করতে বাধ্য করবে এবং :latest-এর সাথে যুক্ত নতুন কন্টেইনার হ্যাশটি ব্যবহার করবে।
# Run your update script
./update_images/update_images_script.sh
স্ক্রিপ্টটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন।
ধাপ ৩: সিরিয়াল পোর্টের মাধ্যমে আপডেটটি যাচাই করুন
আপডেট সম্পন্ন হলে, আমরা যাচাই করে দেখি যে নতুন ভিএমগুলোতে আপডেট করা কোডটি চলছে কি না।
# Replace <INSTANCE_NAME> with one of the names from the previous command
gcloud compute instances get-serial-port-output <INSTANCE_NAME> \
--zone ${CURRENT_PROJECT_ZONE} \
--port 1
নতুন ইনস্ট্যান্সের নাম জানুন:
gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} --zone ${CURRENT_PROJECT_ZONE}
লগগুলো পরীক্ষা করুন:
# Replace <NEW_INSTANCE_NAME> with one of the names of the running VMs
gcloud compute instances get-serial-port-output <NEW_INSTANCE_NAME> \
--zone ${CURRENT_PROJECT_ZONE} \
--port 1
ইনস্ট্যান্সগুলো চালু হয়ে গেলে, সেটির সিরিয়াল পোর্ট দেখার জন্য পূর্ববর্তী gcloud কমান্ড থেকে যেকোনো একটি ইনস্ট্যান্সের নাম নির্বাচন করুন।
প্রত্যাশিত আউটপুট: আপনি আপডেট করা লগ বার্তাটি দেখতে পাবেন, যা নিশ্চিত করবে যে ডেপ্লয়মেন্টটি সফল হয়েছে:
... ওয়ার্কলোড সংস্করণ বি ...
ধাপ ৪: পরিকাঠামো কনফিগারেশন যাচাই করুন (ঐচ্ছিক)
এছাড়াও, আপনার ইনস্ট্যান্স টেমপ্লেটটি ওএস এবং ওয়ার্কলোড উভয়ের জন্য ডাইনামিক আপডেট পুল করতে সঠিকভাবে কনফিগার করা আছে কিনা, তা আপনি এর মেটাডেটা পরীক্ষা করে যাচাই করতে পারেন।
ডাইনামিক কন্টেইনার রেফারেন্স দেখতে নিম্নলিখিত কমান্ডটি চালান:
gcloud compute instance-templates describe ${TEMPLATE_NAME} \
| grep -A 1 tee-image-reference
ফলাফল: আপনার কন্টেইনার ইমেজটির শেষে :latest দেখতে পাবেন।
- এর তাৎপর্য হলো: যেহেতু টেমপ্লেটটি কোনো নির্দিষ্ট হ্যাশের পরিবর্তে ট্যাগটিকে নির্দেশ করে, তাই প্রতিটি রোলিং-অ্যাকশন রিপ্লেস সফলভাবে আপনার ধাপ ১-এ পুশ করা নতুনতম কোডটি নিয়ে আসে।
(ঐচ্ছিক) স্বয়ংক্রিয় আপডেট
যদিও প্রধান সংস্করণ প্রকাশের ক্ষেত্রে ম্যানুয়াল আপডেট কার্যকর, প্রায়শই আপনি চান যে আপনার ফ্লিটটি মানুষের হস্তক্ষেপ ছাড়াই স্বয়ংক্রিয়ভাবে সর্বশেষ নিরাপত্তা প্যাচ বা নিয়মিত ডেপ্লয়মেন্ট বিল্ডগুলো গ্রহণ করুক।
আমরা আমাদের আপডেট স্ক্রিপ্টটিকে একটি ক্লাউড রান জব-এ প্যাকেজ করে 'রোলিং রিপ্লেস' প্রক্রিয়াটিকে স্বয়ংক্রিয় করতে পারি। এই কোডল্যাবের জন্য, আমরা এটিকে প্রতি ১৫ মিনিট পর পর ট্রিগার করব। প্রোডাকশন পরিবেশে, এটি আরও অনেক কম ঘন ঘন চালানো উচিত। ব্যবহারকারীর প্রয়োজন অনুসারে, তারা এটিকে সাপ্তাহিক বা মাসিক ভিত্তিতে কনফিগার করতে পারেন।
ধাপ ১: আপডেটার স্ক্রিপ্টটিকে কন্টেইনারাইজ করুন
প্রথমে, আমাদের update_images_script.sh (যেটিতে gcloud ... rolling-action replace লজিক রয়েছে) ফাইলটিকে একটি ডকার কন্টেইনারে প্যাকেজ করতে হবে, যাতে এটি ক্লাউডে চলতে পারে।
আমরা একটি সহায়ক স্ক্রিপ্ট তৈরি করেছি যা এই কন্টেইনারটি বিল্ড করে এবং আপনার আর্টিফ্যাক্ট রেজিস্ট্রি-তে পুশ করে।
নিম্নলিখিত কমান্ডটি চালান:
# Build and Push the "Updater" Container
# This packages your update logic into a docker image
./update_images/deploy_docker_script_image.sh
এর ফলে যা হয়:
- এটি update_images/ ডিরেক্টরি থেকে update_images_script.sh ফাইলটি গ্রহণ করে।
- এটি গুগল ক্লাউড এসডিকে এবং আপনার স্ক্রিপ্ট সম্বলিত একটি ডকার ইমেজ তৈরি করে।
- এটি ইমেজটিকে ${CURRENT_PROJECT_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/update-script:latest-এ পুশ করে।
ধাপ ২: কাজটি স্থাপন এবং সময়সূচী নির্ধারণ করুন।
এখন আমাদের গুগল ক্লাউডকে এই কন্টেইনারটি পর্যায়ক্রমে চালানোর জন্য বলতে হবে। আমরা কন্টেইনারটি চালানোর জন্য ক্লাউড রান জবস এবং এটিকে চালু করার জন্য ক্লাউড শিডিউলার ব্যবহার করি।
সময়সূচী নির্ধারণের কনফিগারেশন স্ক্রিপ্টটি চালান:
# Create the Cloud Run Job and the Scheduler Trigger
./create_configs/create_schedule_job.sh
স্ক্রিপ্টের ভেতরে: এই স্ক্রিপ্টটি দুটি গুরুত্বপূর্ণ কাজ সম্পাদন করে:
- একটি ক্লাউড রান জব তৈরি করে: এটি mig-updater-job নামের একটি জব নির্ধারণ করে, যা আমাদের এইমাত্র পুশ করা কন্টেইনারটি এক্সিকিউট করে।
- একটি শিডিউলার ট্রিগার তৈরি করে: এটি প্রতি ১৫ মিনিট অন্তর ক্লাউড রান জব এপিআই-কে কল করার জন্য একটি ক্লাউড শিডিউলার জব সেট আপ করে।
# (Snippet from create_schedule_job.sh for reference)
# The schedule is set to run every 15 minutes for testing purposes
gcloud scheduler jobs create http ${SCHEDULER_NAME} \
--schedule "*/15 * * * *" \
--uri "https://${CURRENT_PROJECT_REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${JOB_NAME}:run" \
--http-method POST \
--oauth-service-account-email ${SERVICE_ACCOUNT}
ধাপ ৩: অটোমেশন যাচাই করুন
এটি পরীক্ষা করার জন্য আপনাকে ১৫ মিনিট অপেক্ষা করতে হবে না। পাইপলাইনটি যাচাই করার জন্য আপনি শিডিউলারকে অবিলম্বে চালাতে বাধ্য করতে পারেন।
- কাজটি জোর করে চালান:
gcloud scheduler jobs run ${SCHEDULER_NAME} --location ${CURRENT_PROJECT_REGION}
- এক্সিকিউশন যাচাই করুন: ক্লাউড রান কনসোল > জবস- এ যান। আপনি একটি নতুন এক্সিকিউশন শুরু হতে দেখবেন।
- MIG চেক করুন: gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} কমান্ডটি চালান। জবটি রোলিং আপডেট ট্রিগার করার সাথে সাথে আপনি ইনস্ট্যান্সগুলোকে RECREATING স্টেটে প্রবেশ করতে দেখবেন।
কেন ১৫ মিনিট? এই কোডল্যাবের জন্য আমরা শিডিউলটি */১৫ * * * * এ সেট করেছি, যাতে আপনি দ্রুত ফলাফল দেখতে পারেন। একটি বাস্তব প্রোডাকশন পরিবেশে, আপনি সম্ভবত এটি দৈনিক (যেমন, ভোর ৩টার জন্য 0 3 * * *) বা সাপ্তাহিক চালানোর জন্য পরিবর্তন করবেন।
৮. পরিষ্কার করা
এই কোডল্যাবের অংশ হিসেবে আমাদের তৈরি করা রিসোর্সগুলো পরিষ্কার করার জন্য cleanup.sh ক্লিনআপ স্ক্রিপ্টটি ব্যবহার করা যেতে পারে। এই পরিষ্কার-পরিচ্ছন্নতার অংশ হিসেবে, নিম্নলিখিত রিসোর্সগুলো মুছে ফেলা হবে:
- ম্যানেজড ইনস্ট্যান্স গ্রুপ (${CURRENT_MIG_NAME}) এবং এর অধীনস্থ ভিএমগুলো।
- ইনস্ট্যান্স টেমপ্লেট (${TEMPLATE_NAME})।
- স্বাস্থ্য পরীক্ষা এবং ফায়ারওয়াল নিয়মাবলী (${HEALTH_CHECK_NAME})।
- আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি (${REPOSITORY})।
- সার্ভিস অ্যাকাউন্ট (যদি আপনি এই ল্যাবের জন্য একটি নির্দিষ্ট অ্যাকাউন্ট তৈরি করে থাকেন)।
আপনার অন্বেষণ শেষ হয়ে গেলে, অনুগ্রহ করে এই নির্দেশাবলী অনুসরণ করে আপনার প্রজেক্টটি মুছে ফেলার কথা বিবেচনা করুন: প্রজেক্ট বন্ধ করা (মুছে ফেলা) ।
অভিনন্দন
অভিনন্দন, আপনি সফলভাবে কোডল্যাবটি সম্পন্ন করেছেন!
আপনি ম্যানেজড ইনস্ট্যান্স গ্রুপ (MIG) ব্যবহার করে কনফিডেনশিয়াল স্পেস ওয়ার্কলোড নিরাপদে স্কেল করার পদ্ধতি শিখেছেন। আপনি ব্যর্থতা থেকে পুনরুদ্ধারের জন্য অটোহিলিং , ট্র্যাফিকের আকস্মিক বৃদ্ধি সামাল দেওয়ার জন্য অটোস্কেলিং সফলভাবে কনফিগার করেছেন এবং আপনার কনফিডেনশিয়াল স্পেস ওএস ইমেজ ও ওয়ার্কলোড কন্টেইনার উভয়ের জন্য জিরো-ডাউনটাইম আপডেট সম্পন্ন করেছেন।
এরপর কী?
অতিরিক্ত কনফিডেনশিয়াল স্পেস কোডল্যাবগুলো দেখুন:
- গোপনীয় স্থান ব্যবহার করে এমএল মডেল এবং মেধাস্বত্ব সুরক্ষিত করা
- মাল্টি-পার্টি কম্পিউটেশন এবং কনফিডেনশিয়াল স্পেস ব্যবহার করে কীভাবে ডিজিটাল সম্পদ লেনদেন করবেন
- কনফিডেনশিয়াল স্পেস দিয়ে গোপনীয় ডেটা বিশ্লেষণ করুন
- কনফিডেনশিয়াল স্পেস ব্যবহার করুন এমন সুরক্ষিত রিসোর্সগুলির জন্য যা কোনো ক্লাউড প্রোভাইডারের কাছে সংরক্ষিত নয়।