অপারেটর প্যাটার্ন
অপারেটর হল কুবারনেটিসের সফ্টওয়্যার এক্সটেনশন, যা
কাস্টম রিসোর্স
ব্যবহার করে অ্যাপ্লিকেশন এবং তাদের কম্পোনেন্টগুলি পরিচালনা করে। অপারেটরগুলি কুবারনেটিসের নীতিগুলো
অনুসরণ করে, বিশেষত কন্ট্রোল লুপ (control loop)।
অনুপ্রেরণা
অপারেটর প্যাটার্ন এমন একটি ধারণা যা একজন মানুষ
কোনো সার্ভিস বা সার্ভিসের সেট পরিচালনার সময় অনুসরণ করেন। যারা নির্দিষ্ট অ্যাপ্লিকেশন ও
সার্ভিস পরিচালনা করেন, তারা সিস্টেম কীভাবে কাজ করা উচিত, কীভাবে এটি ডিপ্লয় করতে হয়,
এবং কোনো সমস্যা হলে কীভাবে প্রতিক্রিয়া জানাতে হয়—এসব বিষয়ে গভীর জ্ঞান রাখেন।
কুবারনেটিস ওয়ার্কলোড পরিচালনাকারীরা প্রায়ই অটোমেশন ব্যবহার করতে চান,
যা পুনরাবৃত্তিমূলক কাজগুলো করে দেয়। অপারেটর প্যাটার্ন দেখায় কীভাবে আপনি কোড লিখে
এমন একটি কাজ অটোমেট করতে পারেন, যা কুবারনেটিস নিজেই সরাসরি প্রদান করে না।
কুবারনেটিস অপারেটর
কুবারনেটিস অটোমেশন কাজের জন্য ডিজাইন করা হয়েছে। শুরুতেই, আপনি কুবারনেটিসের মূল অংশ থেকে অনেক বিল্ট-ইন অটোমেশন পাবেন। আপনি কুবারনেটিস ব্যবহার করে ওয়ার্কলোড ডিপ্লয় এবং চালানোর কাজ অটোমেট করতে পারেন, এবং কুবারনেটিস যেভাবে এই কাজগুলো করে, তাও অটোমেট করতে পারেন।
কুবারনেটিসের অপারেটর প্যাটার্ন ধারণাটি আপনাকে
ক্লাস্টারের আচরণ বাড়ানোর সুযোগ দেয়, কুবারনেটিসের মূল কোড পরিবর্তন না করেই
এটি কন্ট্রোলার এক বা একাধিক কাস্টম রিসোর্সের সঙ্গে সংযুক্ত করে
এই কাজটি সম্পন্ন করে। অপারেটর হলো কুবারনেটিস API-এর ক্লায়েন্ট, যা
কাস্টম রিসোর্স
এর জন্য কন্ট্রোলারের ভূমিকা পালন করে।
অপারেটরের একটি উদাহরণ
অপারেটর ব্যবহার করে আপনি যেসব কাজ অটোমেট করতে পারেন, তার মধ্যে রয়েছে:
- চাহিদা অনুযায়ী কোনো অ্যাপ্লিকেশন ডিপ্লয় করা
- অ্যাপ্লিকেশনের অবস্থা সংরক্ষণ (ব্যাকআপ) এবং পুনরুদ্ধার করা
- অ্যাপ্লিকেশন কোড আপগ্রেড করা, সাথে সংশ্লিষ্ট পরিবর্তন যেমন
ডাটাবেস স্কিমা বা অতিরিক্ত কনফিগারেশন সেটিংস পরিচালনা করা - কুবারনেটিসের API সাপোর্ট করে সার্ভিস খুঁজে পায় না, এমন অ্যাপ্লিকেশনগুলির জন্য একটি সার্ভিস প্রকাশ করা
- ক্লাস্টারের সম্পূর্ণ বা আংশিক ব্যর্থতা অনুকরণ করে তার স্থিতিশীলতা পরীক্ষা করা
- অভ্যন্তরীণ সদস্য নির্বাচন প্রক্রিয়া ছাড়াই একটি ডিসট্রিবিউটেড অ্যাপ্লিকেশনের জন্য লিডার নির্বাচন করা
অপারেটর কেমন দেখতে হতে পারে? একটি অপারেটরের বিস্তারিত উদাহরণ এখানে দেওয়া হলো:
- SampleDB নামের একটি কাস্টম রিসোর্স আপনি ক্লাস্টারে কনফিগার করতে পারেন।
- একটি ডিপ্লয়মেন্ট নিশ্চিত করে যে অপারেটরের কন্ট্রোলার অংশ চালানোর জন্য একটি পড সবসময় সক্রিয় রয়েছে।
- অপারেটর কোডের একটি কন্টেইনার ইমেজ।
- কন্ট্রোলার কোডই কন্ট্রোল প্লেনকে জিজ্ঞাসা করে, যে কোন SampleDB রিসোর্স কনফিগার করা হয়েছে কিনা ।
- অপারেটরের মূল কাজ হলো এপিআই সার্ভারকে নির্দেশ দেওয়া,
যাতে কনফিগার করা রিসোর্স অনুযায়ী বাস্তবতা তৈরি হয়।
- যদি আপনি নতুন SampleDB যোগ করেন, তাহলে অপারেটর PersistentVolumeClaims তৈরি করে ডাটাবেস স্টোরেজ নিশ্চিত করে, StatefulSet তৈরি করে SampleDB চালানোর জন্য এবং প্রাথমিক কনফিগারেশনের জন্য একটি Job সেটআপ করে।
- যদি আপনি এটি ডিলিট করে ফেলেন, তাহলে অপারেটর প্রথমে একটি স্ন্যাপশট নেয়, তারপর StatefulSet এবং ভলিউম ডিলিট করা নিশ্চিত করে ।
- অপারেটর নিয়মিত ডাটাবেস ব্যাকআপও পরিচালনা করে।
প্রতিটি SampleDB রিসোর্সের জন্য অপারেটর নির্ধারণ করে কখন একটি পড তৈরি করতে হবে,
যা ডাটাবেসের সাথে সংযুক্ত হয়ে ব্যাকআপ নিতে পারে।
এই পডগুলো ConfigMap এবং / অথবা Secret ব্যবহার করে, যেখানে ডাটাবেসের সংযোগের বিবরণ ও
অন্যান্য তথ্য সংরক্ষিত থাকে। - অপারেটর ব্যবস্থাপিত রিসোর্সের জন্য আরও উন্নত অটোমেশন সরবরাহ করতে পারে।
যেমন, যদি এটি দেখে যে ডাটাবেসটি পুরোনো সংস্করণ চালাচ্ছে,
তাহলে এটি Job অবজেক্ট তৈরি করে স্বয়ংক্রিয়ভাবে আপগ্রেড করে দিতে পারে।
অপারেটর ডিপ্লয় করা
অপারেটর ডিপ্লয় করার সবচেয়ে সাধারণ উপায় হলো
Custom Resource Definition (CRD) এবং এর সাথে সম্পর্কিত কন্ট্রোলার ক্লাস্টারে যোগ করা।
কন্ট্রোলার সাধারণত কন্ট্রোল প্লেন এর বাইরে চলে,
ঠিক যেমন আপনি অন্য কোনো কন্টেইনারাইজড অ্যাপ চালান।
উদাহরণস্বরূপ, আপনি ক্লাস্টারের ভেতর একটি ডিপ্লয়মেন্ট হিসেবে কন্ট্রোলার চালাতে পারেন।
অপারেটর ব্যবহার করা
একবার আপনার একটি অপারেটর ডিপ্লয় হয়ে গেলে, আপনি অপারেটর যে ধরণের রিসোর্স ব্যবহার করে তা যোগ, সংশোধন বা মুছে দিয়ে এটি ব্যবহার করবেন। উপরের উদাহরণটি অনুসরণ করে, আপনি নিজেই অপারেটরের জন্য একটি ডিপ্লয়মেন্ট সেট আপ করবেন এবং তারপর:
kubectl get SampleDB # find configured databases
kubectl edit SampleDB/example-database # manually change some settings
...এবং এটাই! অপারেটর স্বয়ংক্রিয়ভাবে পরিবর্তনগুলো প্রয়োগ করবে এবং বিদ্যমান সার্ভিস ঠিকঠাক চালিয়ে যাবে।
নিজের অপারেটর লেখা
আপনার কাঙ্ক্ষিত আচরণ বাস্তবায়নের জন্য যদি বিদ্যমান অপারেটর না থাকে, তাহলে আপনি নিজেই একটি অপারেটর তৈরি করতে পারেন।
আপনি যে কোনো প্রোগ্রামিং ভাষা বা রানটাইম ব্যবহার করে একটি অপারেটর (অর্থাৎ, কন্ট্রোলার) লিখতে পারেন,
যা কুবারনেটিস API-এর ক্লায়েন্ট হিসেবে কাজ করতে সক্ষম।
নিম্নে কিছু লাইব্রেরি ও টুলের তালিকা দেওয়া হলো,
যা ব্যবহার করে আপনি নিজস্ব ক্লাউড নেটিভ অপারেটর তৈরি করতে পারেন।
- Charmed Operator Framework
- Java Operator SDK
- Kopf (Kubernetes Operator Pythonic Framework)
- kube-rs (Rust)
- kubebuilder
- KubeOps (.NET operator SDK)
- Mast
- Metacontroller
পাশাপাশি আপনার নিজের তৈরি WebHooks ব্যবহার করতে পারেন - Operator Framework
- shell-operator
এর পরের কি
- CNCF
কর্তৃক প্রকাশিত অপারেটর হোয়াইট পেপার পড়ুন। - কাস্টম রিসোর্স সম্পর্কে আরও জানুন।
- আপনার ব্যবহারের উপযোগী রেডিমেড অপারেটর খুঁজতে ভিজিট করুন
OperatorHub.io। - আপনার অপারেটর তৈরি করে OperatorHub.io -তে
পাবলিশ করুন, যাতে অন্যরাও এটি ব্যবহার করতে পারে। - অপারেটর প্যাটার্নের ধারণা প্রথম যে নিবন্ধে প্রকাশিত হয়েছিল,
সেই CoreOS-এর আসল ব্লগ
(সংরক্ষিত সংস্করণ) পড়ুন। - Google Cloud-এর এই নিবন্ধটি
পড়ুন, যেখানে অপারেটর এবং স্টেটফুল অ্যাপ তৈরির জন্য সেরা অনুশীলনগুলি তুলে ধরা হয়েছে।
এই পৃষ্ঠার আইটেমগুলি তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলিকে নির্দেশ করে যা কুবারনেটসের প্রয়োজনীয় কার্যকারিতা প্রদান করে। কুবারনেটিস প্রকল্পের লেখকরা সেই তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলির জন্য দায়ী নয়৷ আরো বিস্তারিত জানার জন্য CNCF website guidelines দেখুন।
একটি অতিরিক্ত তৃতীয় পক্ষের লিঙ্ক যোগ করে এমন একটি পরিবর্তন প্রস্তাব করার আগে আপনার content guide পড়া উচিত।