কুবারনেটিস ক্লাস্টার আর্কিটেকচার
এটি এই বিভাগটির বহু পৃষ্ঠার মুদ্রণযোগ্য দর্শন। মুদ্রণ করতে এখানে ক্লিক করুন.
ক্লাস্টার আর্কিটেকচার
- 1: কন্ট্রোলার
1 - কন্ট্রোলার
রোবোটিক্স এবং অটোমেশনে, একটি control loop হল একটি নন-টার্মিনেটিং লুপ যা একটি সিস্টেমের অবস্থা নিয়ন্ত্রণ করে।
এখানে একটি control loop এর একটি উদাহরণ: একটি ঘরে থার্মোস্ট্যাট।
যখন আপনি তাপমাত্রা সেট করেন, তখন আপনি থার্মোস্ট্যাটকে আপনার desired state সম্পর্কে বলছেন। প্রকৃত ঘরের তাপমাত্রা হল current state। থার্মোস্ট্যাট সরঞ্জাম চালু বা বন্ধ করে current state কে desired state এর কাছাকাছি আনতে কাজ করে।
কুবারনেটিসে, কন্ট্রোলার হল কন্ট্রোল লুপ যা আপনার ক্লাস্টার এর অবস্থা পর্যবেক্ষণ করে, তারপর প্রয়োজনে পরিবর্তন করে বা পরিবর্তন করার অনুরোধ করে। প্রতিটি কন্ট্রোলার বর্তমান ক্লাস্টার স্টেটকে কাঙ্ক্ষিত স্টেটের কাছাকাছি নিয়ে যাওয়ার চেষ্টা করে।কন্ট্রোলার প্যাটার্ন
একটি কন্ট্রোলার অন্তত একটি Kubernetes রিসোর্স টাইপ ট্র্যাক করে। এই objects এর একটি spec ফিল্ড আছে যা desired state প্রতিনিধিত্ব করে। সেই রিসোর্সের জন্য কন্ট্রোলার(গুলি) current state কে সেই desired state এর কাছাকাছি আনার জন্য দায়ী।
কন্ট্রোলার নিজেই অ্যাকশন সম্পাদন করতে পারে; আরও সাধারণভাবে, Kubernetes এ, একটি কন্ট্রোলার API server এ বার্তা পাঠাবে যার উপকারী পার্শ্ব প্রতিক্রিয়া আছে। আপনি নীচে এর উদাহরণ দেখতে পাবেন।
API সার্ভারের মাধ্যমে নিয়ন্ত্রণ
জব কন্ট্রোলার হল একটি Kubernetes বিল্ট-ইন কন্ট্রোলারের উদাহরণ। বিল্ট-ইন কন্ট্রোলারগুলি ক্লাস্টার API সার্ভারের সাথে ইন্টারঅ্যাক্ট করে অবস্থা পরিচালনা করে।
Job হল একটি Kubernetes রিসোর্স যা একটি পড, বা সম্ভবত বেশ কয়েকটি পড, চালায় একটি কাজ সম্পাদন করতে এবং তারপর বন্ধ হয়।
(scheduled হওয়ার পরে, পড অবজেক্টগুলি একটি kubelet এর জন্য desired state এর অংশ হয়ে যায়)।
যখন Job কন্ট্রোলার একটি নতুন কাজ দেখে তখন এটি নিশ্চিত করে যে, আপনার ক্লাস্টারের কোথাও, নোডের একটি সেটে kubelet সঠিক সংখ্যক পড চালাচ্ছে কাজটি সম্পন্ন করতে। Job কন্ট্রোলার নিজে কোনো পড বা কন্টেইনার চালায় না। পরিবর্তে, Job কন্ট্রোলার API সার্ভারকে পড তৈরি বা সরাতে বলে। control plane এর অন্যান্য কম্পোনেন্ট নতুন তথ্যের উপর কাজ করে (নতুন পড শিডিউল এবং চালানোর জন্য আছে), এবং অবশেষে কাজটি সম্পন্ন হয়।
আপনি একটি নতুন Job তৈরি করার পরে, desired state হল সেই Job সম্পন্ন হওয়া। Job কন্ট্রোলার সেই Job এর জন্য current state কে আপনার desired state এর কাছাকাছি করে: পড তৈরি করে যা আপনি সেই Job এর জন্য চেয়েছিলেন সেই কাজ করে, যাতে Job সম্পূর্ণতার কাছাকাছি হয়।
কন্ট্রোলারগুলি তাদের কনফিগার করা অবজেক্টগুলিও আপডেট করে।
উদাহরণস্বরূপ: একবার একটি Job এর কাজ সম্পন্ন হলে, Job কন্ট্রোলার
সেই Job অবজেক্টটি আপডেট করে এটিকে Finished চিহ্নিত করতে।
(এটি কিছুটা এমন যে কিছু থার্মোস্ট্যাট একটি আলো বন্ধ করে দেয় নির্দেশ করতে যে আপনার ঘর এখন আপনার সেট করা তাপমাত্রায় আছে)।
সরাসরি নিয়ন্ত্রণ
Job এর বিপরীতে, কিছু কন্ট্রোলারের আপনার ক্লাস্টারের বাইরের জিনিসগুলিতে পরিবর্তন করার প্রয়োজন হয়।
উদাহরণস্বরূপ, যদি আপনি একটি control loop ব্যবহার করেন নিশ্চিত করতে যে আপনার ক্লাস্টারে পর্যাপ্ত Nodes আছে, তাহলে সেই কন্ট্রোলারের প্রয়োজন হলে নতুন নোড সেট আপ করতে বর্তমান ক্লাস্টারের বাইরে কিছু প্রয়োজন।
যে কন্ট্রোলারগুলি বাহ্যিক অবস্থার সাথে ইন্টারঅ্যাক্ট করে তারা API সার্ভার থেকে তাদের desired state খুঁজে পায়, তারপর সরাসরি একটি বাহ্যিক সিস্টেমের সাথে যোগাযোগ করে current state কে লাইনে কাছাকাছি আনতে।
(প্রকৃতপক্ষে একটি controller আছে যা আপনার ক্লাস্টারে নোডগুলি অনুভূমিকভাবে স্কেল করে।)
এখানে গুরুত্বপূর্ণ বিষয় হল যে কন্ট্রোলার আপনার desired state আনতে কিছু পরিবর্তন করে, এবং তারপর আপনার ক্লাস্টারের API সার্ভারে current state রিপোর্ট করে। অন্যান্য control loop সেই রিপোর্ট করা ডেটা পর্যবেক্ষণ করতে পারে এবং তাদের নিজস্ব অ্যাকশন নিতে পারে।
থার্মোস্ট্যাট উদাহরণে, যদি ঘরটি খুব ঠান্ডা হয় তাহলে একটি ভিন্ন কন্ট্রোলার একটি ফ্রস্ট প্রোটেকশন হিটারও চালু করতে পারে। Kubernetes ক্লাস্টারের সাথে, control plane পরোক্ষভাবে IP ঠিকানা ব্যবস্থাপনা সরঞ্জাম, স্টোরেজ সেবা, ক্লাউড প্রোভাইডার API, এবং অন্যান্য সেবার সাথে কাজ করে extending Kubernetes এর মাধ্যমে এটি বাস্তবায়ন করতে।
Desired বনাম current state
Kubernetes সিস্টেমের একটি ক্লাউড-নেটিভ দৃষ্টিভঙ্গি নেয়, এবং ধ্রুবক পরিবর্তন পরিচালনা করতে সক্ষম।
আপনার ক্লাস্টার যেকোনো সময়ে পরিবর্তিত হতে পারে যখন কাজ হয় এবং control loop স্বয়ংক্রিয়ভাবে ব্যর্থতা ঠিক করে। এর মানে হল যে, সম্ভাব্যভাবে, আপনার ক্লাস্টার কখনও একটি স্থিতিশীল অবস্থায় পৌঁছায় না।
যতক্ষণ আপনার ক্লাস্টারের জন্য কন্ট্রোলারগুলি চলছে এবং উপকারী পরিবর্তন করতে সক্ষম, ততক্ষণ সামগ্রিক অবস্থা স্থিতিশীল কিনা তা গুরুত্বপূর্ণ নয়।
ডিজাইন
এর ডিজাইনের একটি নীতি হিসাবে, Kubernetes অনেক কন্ট্রোলার ব্যবহার করে যার প্রতিটি ক্লাস্টার অবস্থার একটি নির্দিষ্ট দিক পরিচালনা করে। সবচেয়ে সাধারণভাবে, একটি নির্দিষ্ট control loop (controller) এক ধরনের রিসোর্স তার desired state হিসাবে ব্যবহার করে, এবং একটি ভিন্ন ধরনের রিসোর্স আছে যা এটি সেই desired state ঘটাতে পরিচালনা করে। উদাহরণস্বরূপ, Job এর জন্য একটি কন্ট্রোলার Job অবজেক্ট ট্র্যাক করে (নতুন কাজ আবিষ্কার করতে) এবং পড অবজেক্ট (Job চালাতে, এবং তারপর কাজ শেষ হলে দেখতে)। এই ক্ষেত্রে অন্য কিছু Job তৈরি করে, যেখানে Job কন্ট্রোলার পড তৈরি করে।
সরল কন্ট্রোলার থাকা উপকারী একটি, মনোলিথিক সেট control loop এর পরিবর্তে যা আন্তঃসংযুক্ত। কন্ট্রোলার ব্যর্থ হতে পারে, তাই Kubernetes এর জন্য অনুমতি দেওয়ার জন্য ডিজাইন করা হয়েছে।
বিঃদ্রঃ:
একাধিক কন্ট্রোলার থাকতে পারে যা একই ধরনের অবজেক্ট তৈরি বা আপডেট করে। পর্দার আড়ালে, Kubernetes কন্ট্রোলারগুলি নিশ্চিত করে যে তারা শুধুমাত্র তাদের নিয়ন্ত্রণকারী রিসোর্সের সাথে লিঙ্ক করা রিসোর্সগুলিতে মনোযোগ দেয়।
উদাহরণস্বরূপ, আপনার Deployment এবং Job থাকতে পারে; এই উভয়ই পড তৈরি করে। Job কন্ট্রোলার আপনার Deployment তৈরি করা পডগুলি মুছে দেয় না, কারণ তথ্য (labels) আছে যা কন্ট্রোলারগুলি সেই পডগুলি আলাদা করতে ব্যবহার করতে পারে।
কন্ট্রোলার চালানোর উপায়
Kubernetes বিল্ট-ইন কন্ট্রোলারগুলির একটি সেট নিয়ে আসে যা kube-controller-manager এর ভিতরে চলে। এই বিল্ট-ইন কন্ট্রোলারগুলি গুরুত্বপূর্ণ মূল আচরণ প্রদান করে।
Deployment কন্ট্রোলার এবং Job কন্ট্রোলার হল কন্ট্রোলারের উদাহরণ যা Kubernetes এর অংশ হিসাবে আসে ("built-in" controllers)। Kubernetes আপনাকে একটি স্থিতিস্থাপক control plane চালাতে দেয়, যাতে যদি কোনো বিল্ট-ইন কন্ট্রোলার ব্যর্থ হয়, control plane এর অন্য অংশ কাজটি গ্রহণ করবে।
আপনি control plane এর বাইরে চলা কন্ট্রোলার খুঁজে পেতে পারেন, Kubernetes প্রসারিত করতে। অথবা, আপনি চাইলে, আপনি নিজে একটি নতুন কন্ট্রোলার লিখতে পারেন। আপনি আপনার নিজের কন্ট্রোলার পডের একটি সেট হিসাবে চালাতে পারেন, বা Kubernetes এর বাহ্যিকভাবে। কোনটি সবচেয়ে ভাল ফিট হবে তা নির্ভর করবে সেই নির্দিষ্ট কন্ট্রোলার কী করে তার উপর।
এর পরের কি
- Kubernetes control plane সম্পর্কে পড়ুন
- কিছু মৌলিক Kubernetes objects আবিষ্কার করুন
- Kubernetes API সম্পর্কে আরও জানুন
- আপনি যদি আপনার নিজের কন্ট্রোলার লিখতে চান, দেখুন Kubernetes extension patterns এবং sample-controller রিপোজিটরি।