Stateful Application-এর জন্য Kubernetes এবং OpenShift-এ স্টোরেজ ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ, কারণ stateful অ্যাপ্লিকেশনগুলো ডেটা পারসিস্টেন্স এবং কনসিসটেন্সি বজায় রাখতে নির্ভরশীল। Stateful Application-এর উদাহরণ হিসেবে ডেটাবেস (যেমন MySQL, MongoDB), মেসেজিং সার্ভার (যেমন RabbitMQ), বা অন্য কোনো অ্যাপ্লিকেশন যা কনফিগারেশন ডেটা বা ফাইল সংরক্ষণ করে, উল্লেখ করা যেতে পারে।
Stateful Application-এর স্টোরেজ ব্যবস্থাপনা করতে Kubernetes এবং OpenShift Persistent Volume (PV), Persistent Volume Claim (PVC), এবং StatefulSet ব্যবহার করে। এগুলো স্টোরেজ প্রভিশনিং, ম্যানেজমেন্ট, এবং স্টোরেজের পারসিস্টেন্স নিশ্চিত করতে সহায়ক।
Stateful Application-এর স্টোরেজ ব্যবস্থাপনার উপায়
১. Persistent Volume (PV) এবং Persistent Volume Claim (PVC) ব্যবহার করা। ২. StatefulSet ব্যবহার করে পডের স্টোরেজ এবং ডেটা পারসিস্টেন্স নিশ্চিত করা। ৩. Storage Class এবং Dynamic Provisioning ব্যবহার করে স্বয়ংক্রিয়ভাবে স্টোরেজ প্রভিশন করা। ৪. Headless Service ব্যবহার করে স্টেটফুল অ্যাপ্লিকেশনের পডগুলোর জন্য স্টেবল নেটওয়ার্ক আইডেন্টিটি নিশ্চিত করা।
১. Persistent Volume (PV) এবং Persistent Volume Claim (PVC)
Stateful Application-এর জন্য PV এবং PVC একটি মৌলিক স্টোরেজ মডেল তৈরি করে। PV হলো Kubernetes ক্লাস্টারের জন্য একটি ফিজিক্যাল স্টোরেজ ইউনিট এবং PVC হলো সেই PV-এর স্টোরেজ দাবি করা একটি অবজেক্ট।
উদাহরণ:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-mysql
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
nfs:
path: /mnt/data
server: 192.168.1.100
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: manual
ব্যাখ্যা:
- PV:
pv-mysqlনামে একটি NFS শেয়ার ব্যবহার করে ১০Gi স্টোরেজ প্রভিশন করা হয়েছে। - PVC:
pvc-mysqlনামে একটি PVC তৈরি করা হয়েছে, যাpv-mysqlPV থেকে ১০Gi স্টোরেজ দাবি করে।
২. StatefulSet ব্যবহার করা
StatefulSet হলো Kubernetes-এর একটি অবজেক্ট, যা stateful অ্যাপ্লিকেশনগুলোর জন্য ব্যবহৃত হয়। StatefulSet এমন অ্যাপ্লিকেশনের জন্য উপযোগী, যেগুলোকে পারসিস্টেন্ট স্টোরেজ, স্টেবল নেটওয়ার্ক আইডেন্টিটি, এবং অর্ডারড ডিপ্লয়মেন্ট ও স্কেলিং প্রয়োজন।
StatefulSet ব্যবহার করে আপনি Stateful Application-এর জন্য ডেডিকেটেড PVC এবং স্টোরেজ মাউন্ট করতে পারেন, যাতে প্রতিটি পডের নিজস্ব পারসিস্টেন্ট ভলিউম থাকে।
StatefulSet-এর উদাহরণ:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
replicas: 3
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
ব্যাখ্যা:
- replicas: ৩টি পড তৈরি করা হয়েছে, যেগুলো প্রতিটি তাদের নিজস্ব স্টোরেজ ব্যবহার করবে।
- volumeMounts:
/var/lib/mysqlপাথে স্টোরেজ মাউন্ট করা হয়েছে, যাতে ডেটা পারসিস্ট থাকে। - volumeClaimTemplates: প্রতিটি পডের জন্য একটি পারসিস্টেন্ট ভলিউম ক্লেইম তৈরি করা হয়েছে, যাতে প্রতিটি পড তার নিজস্ব স্টোরেজ ব্যবহার করে।
৩. Storage Class এবং Dynamic Provisioning
Storage Class এবং Dynamic Provisioning ব্যবহার করে Kubernetes স্বয়ংক্রিয়ভাবে PV তৈরি করতে পারে। যখন একটি PVC তৈরি হয় এবং সেটিতে একটি স্টোরেজ ক্লাস উল্লেখ করা থাকে, তখন Kubernetes স্বয়ংক্রিয়ভাবে সেই স্টোরেজ ক্লাসের মাধ্যমে উপযুক্ত PV তৈরি করে এবং PVC-এর সাথে সংযুক্ত করে। এটি স্টোরেজ ম্যানেজমেন্টকে আরও সহজ করে।
Storage Class-এর উদাহরণ:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
zone: us-east-1a
reclaimPolicy: Retain
ব্যাখ্যা:
- provisioner:
kubernetes.io/aws-ebsপ্রোভিশনার ব্যবহার করা হয়েছে, যা AWS EBS ভলিউম তৈরি করে। - reclaimPolicy:
Retainপলিসি ব্যবহার করা হয়েছে, যাতে PV-এর মালিকানা পরিবর্তন হলে এটি সংরক্ষণ করা হয়।
৪. Headless Service ব্যবহার করা
StatefulSet-এর জন্য একটি Headless Service তৈরি করা হয়, যা প্রতিটি পডের জন্য একটি স্টেবল DNS নাম প্রদান করে। এটি পডগুলোর মধ্যে যোগাযোগ এবং ডেটা সিঙ্ক্রোনাইজেশনের জন্য প্রয়োজনীয়।
Headless Service-এর উদাহরণ:
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
clusterIP: None
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
ব্যাখ্যা:
- clusterIP:
Noneহিসাবে সেট করা হয়েছে, যা এই সার্ভিসকে একটি হেডলেস সার্ভিস হিসেবে তৈরি করে। - প্রতিটি পডের নিজস্ব DNS নাম থাকবে, যেমন
mysql-0.mysql,mysql-1.mysqlইত্যাদি।
Stateful Application-এর স্টোরেজ ব্যবস্থাপনার সুবিধা
- পারসিস্টেন্স: StatefulSet এবং PVC ব্যবহার করে প্রতিটি পডের জন্য পারসিস্টেন্ট স্টোরেজ নিশ্চিত করা যায়, যাতে পড রিস্টার্টের পরেও ডেটা হারিয়ে না যায়।
- স্টেবল নেটওয়ার্ক আইডেন্টিটি: Headless Service ব্যবহার করে প্রতিটি পডের জন্য স্টেবল DNS নাম নিশ্চিত করা যায়, যাতে পডগুলোর মধ্যে যোগাযোগ সঠিকভাবে হয়।
- ডাইনামিক প্রভিশনিং: Storage Class ব্যবহার করে Kubernetes স্বয়ংক্রিয়ভাবে স্টোরেজ প্রভিশন করতে পারে, যা স্টোরেজ ম্যানেজমেন্টকে আরও সহজ করে।
সংক্ষেপে
| বৈশিষ্ট্য | ব্যবহৃত উপাদান | কাজ |
|---|---|---|
| স্টোরেজ প্রভিশনিং | PV, PVC, Storage Class | স্টোরেজ স্পেস বরাদ্দ এবং সংযুক্ত করা |
| স্টেটফুল ডিপ্লয়মেন্ট | StatefulSet | পডের জন্য স্টোরেজ এবং নেটওয়ার্ক আইডেন্টিটি নিশ্চিত করা |
| নেটওয়ার্কিং | Headless Service | পডগুলোর মধ্যে যোগাযোগ নিশ্চিত করা |
উপসংহার
Stateful Application-এর জন্য স্টোরেজ ব্যবস্থাপনা Kubernetes এবং OpenShift-এ অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনের ডেটা পারসিস্টেন্স এবং কনসিসটেন্সি নিশ্চিত করে। PV, PVC, StatefulSet, এবং Storage Class ব্যবহার করে ডেটাবেস বা অন্য স্টেটফুল অ্যাপ্লিকেশনগুলোকে কার্যকরভাবে ম্যানেজ করা এবং স্কেল করা যায়।
Read more