এই পৃষ্ঠাটি ব্যাখ্যা করে কুবারনেটিস API-তে কুবারনেটিস অবজেক্টগুলি কীভাবে প্রতিনিধিত্ব করা হয় এবং
আপনি কিভাবে তা .yaml
ফরম্যাটে প্রকাশ করতে পারেন।
কুবারনেটিস অবজেক্ট বোঝা
কুবারনেটিস অবজেক্ট হল কুবারনেটিস সিস্টেমের সত্তা সংরক্ষিত এন্টিটিগুলি। কুবারনেটিস এই এন্টিটিগুলি ব্যবহার করে আপনার ক্লাস্টারের অবস্থা প্রকাশ করতে। বিশেষভাবে, তারা বর্ণনা করতে পারে:
- কোন কন্টেনার অ্যাপ্লিকেশন কি রান করছে (এবং কোন নোডগুলিতে)
- ঐ অ্যাপ্লিকেশনগুলির জন্য রিসোর্স
- ঐ অ্যাপ্লিকেশনগুলির কিভাবে ব্যবহার করতে হবে, উদাহরণস্বরূপ রিস্টার্ট নীতি, আপগ্রেড, এবং ফল্ট-টলারেন্স
একটি কুবারনেটিস অবজেক্ট হল একটি "উদ্দেশ্যের রেকর্ড" - একবার আপনি অবজেক্ট তৈরি করে দিলে, কুবারনেটিস সিস্টেম সরাসরি এই অবজেক্টটি থাকার নিশ্চয়তার জন্য কাজ করবে। অবজেক্ট তৈরি করে আপনি সাধারণত কুবারনেটিস সিস্টেমকে বলে দিচ্ছেন যে আপনার ক্লাস্টারের ওয়ার্কলোড কি হবে; এটা হল আপনার ক্লাস্টারের কাঙ্ক্ষিত অবস্থা।
কুবারনেটিস অবজেক্টগুলির সাথে কাজ করতে - তা তৈরি, পরিবর্তন করতে বা মুছতে - আপনার
কুবারনেটিস API ব্যবহার করতে হবে। উদাহরণস্বরূপ,
যখন আপনি kubectl
কমান্ড-লাইন ইন্টারফেস ব্যবহার করেন, তখন CLI আপনার জন্য প্রয়োজনীয়
কুবারনেটিস API কল করে। আপনি একটি
Client Libraries ব্যবহার করে নিজের প্রোগ্রামে কুবারনেটিস API সরাসরি ব্যবহার করতে পারেন।
অবজেক্ট স্পেক এবং স্ট্যাটাস
প্রায় সব কুবারনেটিস অবজেক্টের একটি spec
এবং একটি status
নেস্টেড অবজেক্ট ফিল্ড রয়েছে
যা অবজেক্টের কনফিগারেশন নিয়ন্ত্রণ করে: অবজেক্টের spec
এবং status
।
যে অবজেক্টগুলির spec
থাকে, আপনার অবজেক্ট তৈরি করতে এটা নির্ধারণ করতে হবে
যখন অবজেক্ট তৈরি করবেন,
যে রিসোর্সের বৈশিষ্ট্য বর্ণনা প্রদান করবেন: এর কাঙ্ক্ষিত অবস্থা।
status
অবজেক্টের বর্তমান অবস্থা বর্ণনা করে, যা কুবারনেটিস সিস্টেম এবং এর উপাদানগুলি
প্রদান এবং আপডেট করে। কুবারনেটিস
control plane
সরাসরি এবং সক্রিয়ভাবে প্রতিটি অবজেক্টের
বর্তমান অবস্থা পরিচালনা করে যাতে আপনার প্রদত্ত অবস্থা মিলে।
উদাহরণস্বরূপ: কুবারনেটিসে, একটি ডিপ্লয়মেন্ট একটি অবজেক্ট যা আপনার ক্লাস্টারে চলমান একটি
অ্যাপ্লিকেশন প্রতিনিধিত্ব করতে পারে। ডিপ্লয়মেন্ট তৈরি করতে যখন আপনি
ডিপ্লয়মেন্ট তৈরি করেন, আপনি ডিপ্লয়মেন্ট spec
সেট করতে পারেন যে
আপনি চাইছেন অ্যাপ্লিকেশনের তিনটি রিপ্লিকা চলমান থাকুক।
কুবারনেটিস সিস্টেম ডিপ্লয়মেন্ট স্পেক পড়ে এবং আপনার প্রদত্ত ডিপ্লয়মেন্ট
এর তিনটি ইনস্ট্যান্স চালু করে, এই স্ট্যাটাস আপনার স্পেক অনুসারে আপডেট করে।
যদি সেই ইনস্ট্যান্সগুলোর মধ্যে কোনওটি ব্যর্থ হয় (একটি স্ট্যাটাস পরিবর্তন),
কুবারনেটিস সিস্টেম স্পেক এবং স্ট্যাটাস মধ্যে পার্থক্যের প্রতিক্রিয়া দিয়ে একটি
সংশোধন করে এই ক্ষেত্রে, একটি প্রতিস্থাপন ইনস্ট্যান্স চালু করে।
বিস্তারিত তথ্যের জন্য অবজেক্ট স্পেক, স্ট্যাটাস এবং মেটাডেটা দেখুন, Kubernetes API Conventions.
একটি কুবারনেটিস অবজেক্ট বর্ণনা
যখন আপনি কুবারনেটিসে একটি অবজেক্ট তৈরি করবেন, আপনাকে অবজেক্ট spec প্রদান করতে হবে
যা দরকার তার কাঙ্ক্ষিত অবস্থা বর্ণনা করে এবং অবজেক্ট সম্পর্কে
কিছু মৌলিক তথ্য (যেমন নাম) প্রদান করতে হবে। যখন আপনি অবজেক্ট তৈরি
করতে কুবারনেটিস API ব্যবহার করেন (এটা সরাসরি বা kubectl
এর মাধ্যমে),
তখন ঐ API অনুরোধটি এই তথ্যকে একটি JSON রিকোয়েস্ট বডি হিসেবে অন্তর্ভুক্ত করতে হবে।
সাধারণত, আপনি একটি manifest নামে পরিচিত ফাইলে kubectl
কে তথ্য প্রদান করেন। নিয়ম অনুসারে, ম্যানিফেস্ট হল YAML (আপনি JSON
ফরম্যাটও ব্যবহার করতে পারেন)। HTTP-এর মাধ্যমে API অনুরোধ করার সময় টুল যেমন kubectl একটি ম্যানিফেস্ট থেকে তথ্যকে JSON বা অন্য
সমর্থিত সিরিয়ালাইজেশন ফরম্যাটে রূপান্তর করে।
এখানে একটি উদাহরণ ম্যানিফেস্ট দেওয়া হল একটি কুবারনেটিস ডিপ্লয়মেন্টের জন্য প্রয়োজনীয় ক্ষেত্রগুলি এবং অবজেক্ট স্পেকের জন্যের একটি নমুনা:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # ডিপ্লয়মেন্টকে টেমপ্লেটের সাথে মিলে যাওয়া 2টি পড চালাতে বলে
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
একটি উপরের মতো ম্যানিফেস্ট ফাইল ব্যবহার করে একটি ডিপ্লয়মেন্ট তৈরি করার একটি উপায় হল
kubectl apply
কমান্ড ব্যবহার
করা, kubectl
এর কমান্ড-লাইন ইন্টারফেসে yaml
ফাইলটি আর্গুমেন্ট হিসেবে পাঠানো। একটি উদাহরণ:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
আউটপুট এর অনুরূপ:
deployment.apps/nginx-deployment created
প্রয়োজনীয় ক্ষেত্র
আপনার কুবারনেটিস অবজেক্ট এর জন্য ম্যানিফেস্ট (YAML বা JSON ফাইল) এ নিম্নলিখিত ক্ষেত্রগুলির জন্য মান নির্ধারণ করতে হবে:
apiVersion
- আপনি কোন ভার্সনের কুবারনেটিস API ব্যবহার করছেন তা উল্লেখ করতে হবেkind
- আপনি কোন ধরনের অবজেক্ট তৈরি করতে চান তা উল্লেখ করতে হবেmetadata
- অবজেক্ট যে সাহায্য করে অনন্যভাবে সনাক্ত করা যায়, যেমনname
স্ট্রিং,UID
, এবং ঐচ্ছিকnamespace
spec
- অবজেক্টের জন্য আপনি কি অবস্থা চান
অবজেক্ট spec সুনির্দিষ্ট ফরম্যাট প্রতিটি কুবারনেটিস অবজেক্টের জন্য আলাদা, এবং সেই বস্তুর জন্য নির্দিষ্ট নেস্টেড ক্ষেত্র রয়েছে। Kubernetes API রেফারেন্স ব্যবহার করে আপনি যে সমস্ত অবজেক্ট তৈরি করতে পারেন তার জন্য নির্দিষ্ট ফরম্যাট খুঁজে পেতে সাহায্য করতে পারে।
উদাহরণস্বরূপ, দেখুন spec
ফিল্ড
Pod API রেফারেন্স এর জন্য।
প্রতিটি Pod এর জন্য, .spec
ক্ষেত্রটি পড এবং তার কাঙ্ক্ষিত অবস্থা (যেমন সেই পডের মধ্যে প্রতিটি কন্টেইনারের জন্য কন্টেইনার ইমেজের নাম)
নির্দিষ্ট করে৷
আরও একটি অবজেক্ট স্পেসিফিকেশনের উদাহরণ হল
spec
ফিল্ড
StatefulSet API এর জন্য। StatefulSet এর জন্য, .spec
ফিল্ড নির্দিষ্ট করে এবং সেট করে
এর অবস্থা।
StatefulSet এর .spec
এর মধ্যে একটি টেমপ্লেট
পড অবজেক্টের জন্য । সেই টেমপ্লেটটি Pods বর্ণনা করে যা
StatefulSet কন্ট্রোলার স্টেটফুলসেট স্পেসিফিকেশন সন্তুষ্ট করার জন্য তৈরি করবে।
অন্যান্য প্রকারের অবজেক্ট গুলির জন্য বিভিন্ন .status
থাকতে পারে; আবার, API রেফারেন্স পৃষ্ঠাগুলি
এই .status
ফিল্ডের গঠন এবং এর প্রত্যেক বিভিন্ন প্রকারের অবজেক্টের জন্য তার বিষয়বস্তু বিবরণ করে।
বিঃদ্রঃ:
YAML কনফিগারেশন ফাইল লেখার অতিরিক্ত তথ্যের জন্য কনফিগারেশন সেরা অনুশীলন দেখুন।সার্ভার সাইড ফিল্ড ভেরিফিকেশন
কুবারনেটিস v1.25 থেকে শুরু করে, API সার্ভার সার্ভার সাইড
field validation
যা অব্যক্ত বা পুনরায় ফিল্ড অনুমান করে একটি অবজেক্টে। এটি সমস্ত কার্যকারিতা প্রদান করে
kubectl --validate
এর সার্ভার সাইড এ কর্মক্ষমতা।
kubectl
টুলটি ব্যবহার করে --validate
ফ্ল্যাগ ব্যবহার করে ফিল্ড ভেরিফিকেশনের স্তর সেট করে। এটি গ্রহণ করে
মান ignore
, warn
, এবং strict
এবং এটি true
(strict
এর সমান)
এবং false
( ignore
এর সমান) মান গ্রহণ করে। kubectl
এর ডিফল্ট ভেরিফিকেশন সেটিং হল --validate=true
।
Strict
- Strict ফিল্ড ভেরিফিকেশন, ভেরিফিকেশন ব্যর্থ হওয়ায় errors দেখায়
Warn
- ফিল্ড ভেরিফিকেশন করা হয়, কিন্তু errors গুলি অনুরোধ ব্যর্থ হওয়ার পরিবর্তে সতর্কতা হিসাবে প্রকাশ করা হয়
Ignore
- কোনো সার্ভার সাইড ফিল্ড ভেরিফিকেশন করা হয় না
যখন kubectl
এর একটি API সার্ভারে সংযোগ করতে পারে না যে কোন ফিল্ড ভেরিফিকেশন সাপোর্ট করে তখন এটি ফেলে যায়
ক্লায়েন্ট-সাইড ভেরিফিকেশন ব্যবহার করা হয়। কুবারনেটিস 1.27 এবং তারপরের সংস্করণ সবসময় ফিল্ড ভেরিফিকেশন প্রদান করে;
পুরাতন কুবারনেটিস রিলিসেগুলিতে এটি হতে পারে না। যদি আপনার ক্লাস্টার v1.27 এর চেয়ে পুরানো হয় তবে এপনার কুবারনেটিস
সংস্করণের জন্য ডকুমেন্টেশন চেক করুন।
এর পরের কি
যদি আপনি নতুন কুবারনেটিসে এসেছেন, তাহলে নিম্নলিখিত বিষয়গুলি সম্পর্কে আরো পড়ুন:
- Pods যা হলে সবচেয়ে গুরুত্বপূর্ণ মৌলিক কুবারনেটিস অবজেক্ট।
- Deployment অবজেক্টগুলি।
- Controllers কুবারনেটিসে।
- kubectl এবং kubectl কমান্ড।
কুবারনেটিস অবজেক্ট ম্যানেজমেন্ট
kubectl
ব্যবহার করে অবজেক্ট পরিচালনা করার উপায়গুলি বিস্তারিত ভাবে বর্ণনা করে।
আপনার কাছে যদি আগে থেকে না থাকে তাহলে kubectl ইনস্টল করুন।
কুবারনেটিস API সাধারণভাবে সম্পর্কে জানতে, পড়ুন:
কুবারনেটিসে অবজেক্টগুলির বিস্তারিত জানতে, এই বিভাগে অন্যান্য পৃষ্ঠাগুলি পড়ুন: