OpenShift এবং Kubernetes-এ Persistent Storage এবং Volume Management একটি গুরুত্বপূর্ণ বিষয়, যা কনটেইনারাইজড অ্যাপ্লিকেশনগুলির ডেটা স্থায়ীভাবে সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এখানে এই ধারণাগুলির ব্যাখ্যা এবং ব্যবহারের পদ্ধতি আলোচনা করা হলো।
Persistent Storage
সংজ্ঞা
Persistent Storage হল একটি Storage ব্যবস্থা যা Pods বা কনটেইনারগুলি চলাকালীন ডেটা সংরক্ষণ করে এবং কনটেইনার বন্ধ বা পুনরায় চালু করার পরও সেই ডেটা অপরিবর্তিত থাকে। এটি অ্যাপ্লিকেশনগুলির জন্য গুরুত্বপূর্ণ, যেমন ডেটাবেস, যেখানে ডেটার স্থায়িত্ব প্রয়োজন।
বৈশিষ্ট্য
- ডেটার স্থায়িত্ব: কনটেইনারগুলি বন্ধ হলে ডেটা হারায় না।
- ডেটা শেয়ারিং: একাধিক Pods একই Persistent Volume (PV) ব্যবহার করে ডেটা শেয়ার করতে পারে।
- লব্ধস্থান: Persistent Storage বিভিন্ন স্টোরেজ প্রযুক্তি ব্যবহার করে উপলব্ধ হতে পারে, যেমন NFS, iSCSI, Cloud Storage (AWS EBS, GCP PD)।
Persistent Volume (PV) এবং Persistent Volume Claim (PVC)
- Persistent Volume (PV): এটি একটি স্টোরেজ ফিজিক্যাল রিসোর্স, যা ক্লাস্টার কর্তৃপক্ষ দ্বারা সংজ্ঞায়িত হয়।
- Persistent Volume Claim (PVC): এটি একটি ব্যবহারকারী কর্তৃক করা আবেদনের মতো, যা একটি নির্দিষ্ট পরিমাণ স্টোরেজের জন্য চাহিদা জানায়।
উদাহরণ YAML কনফিগারেশন
- Persistent Volume (PV) তৈরি করা:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 10Gi # স্টোরেজের পরিমাণ
accessModes:
- ReadWriteOnce # একক কনটেইনারের জন্য লেখা এবং পড়া
nfs:
path: /path/to/nfs # NFS স্টোরেজের পথ
server: nfs-server # NFS সার্ভারের IP বা DNS নাম
- Persistent Volume Claim (PVC) তৈরি করা:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi # সংরক্ষণের জন্য অনুরোধ
Volume Management
সংজ্ঞা
Volume Management হল কনটেইনার এবং Pods-এর জন্য ডেটা সংরক্ষণের ব্যবস্থাপনা প্রক্রিয়া। এটি বিভিন্ন ধরনের Volumes, তাদের ধরন এবং কনফিগারেশন কৌশল নিয়ে কাজ করে।
বিভিন্ন ধরনের Volumes
- emptyDir: Pod-এর জীবনের জন্য স্থানীয় স্টোরেজ। Pod বন্ধ হলে ডেটা মুছে যায়।
- hostPath: নোডের ফাইল সিস্টেম থেকে স্থানীয় ফাইল সিস্টেমের অ্যাক্সেস দেয়।
- NFS: নেটওয়ার্ক ফাইল সিস্টেমের মাধ্যমে শেয়ার করা স্টোরেজ।
- configMap এবং secret: কনফিগারেশন এবং গোপন তথ্য সংরক্ষণে ব্যবহৃত হয়।
উদাহরণ YAML কনফিগারেশন
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: example-volume
volumes:
- name: example-volume
persistentVolumeClaim:
claimName: example-pvc # PVC এর নাম
সারসংক্ষেপ
OpenShift এবং Kubernetes-এ Persistent Storage এবং Volume Management অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলি অ্যাপ্লিকেশনগুলির জন্য ডেটা স্থায়িত্ব এবং পরিচালনা নিশ্চিত করে।
- Persistent Storage: Pods বা কনটেইনারগুলি চলাকালীন ডেটার স্থায়িত্ব নিশ্চিত করে।
- Volume Management: বিভিন্ন ধরনের Volumes পরিচালনা করে, যা ডেটা সংরক্ষণ এবং শেয়ার করার জন্য ব্যবহৃত হয়।
এই ধারণাগুলি ব্যবহার করে, আপনি আপনার কনটেইনারাইজড অ্যাপ্লিকেশনগুলির জন্য কার্যকরী এবং স্থায়ী ডেটা সংরক্ষণ ব্যবস্থা তৈরি করতে সক্ষম হবেন।
Persistent Volume (PV) এবং Persistent Volume Claim (PVC) হলো Kubernetes এবং OpenShift-এর গুরুত্বপূর্ণ স্টোরেজ অবজেক্ট, যা ডেটা পারসিস্টেন্স এবং স্টোরেজ ম্যানেজমেন্ট নিশ্চিত করতে ব্যবহৃত হয়। এগুলোর মাধ্যমে অ্যাপ্লিকেশন ডেটা সংরক্ষণ করা যায়, যা পড বা কন্টেইনার রিস্টার্টের পরেও স্থিতিশীল থাকে।
১. Persistent Volume (PV)
Persistent Volume (PV) হলো Kubernetes-এর একটি স্টোরেজ রিসোর্স, যা ক্লাস্টারের স্টোরেজ অবজেক্ট হিসেবে কাজ করে। এটি একটি ফিজিক্যাল স্টোরেজ স্পেস (যেমন, ক্লাউড প্রোভাইডার, নেটওয়ার্ক ফাইল সিস্টেম, বা লোকাল ডিস্ক) থেকে তৈরি করা হয় এবং Kubernetes ক্লাস্টারে অ্যাপ্লিকেশন ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। PV একবার তৈরি হলে এটি ক্লাস্টারের জন্য একটি স্টোরেজ রিসোর্স হিসেবে রেজিস্টার করা হয়, এবং পরে পড বা কন্টেইনারগুলো তা ব্যবহার করতে পারে।
PV-এর বৈশিষ্ট্য:
- স্ট্যাটিক এবং ডাইনামিক:
- PV স্ট্যাটিকভাবে তৈরি হতে পারে, যেখানে অ্যাডমিন ম্যানুয়ালি PV তৈরি করে।
- অথবা এটি ডাইনামিকভাবে প্রভিশন হতে পারে, যেখানে স্টোরেজ ক্লাস ব্যবহার করে Kubernetes স্বয়ংক্রিয়ভাবে PV তৈরি করে।
- স্টোরেজ টাইপ:
- Kubernetes বিভিন্ন ধরনের স্টোরেজ সাপোর্ট করে, যেমন NFS (Network File System), AWS EBS (Elastic Block Store), GCE Persistent Disk, বা Local Storage।
- অ্যাক্সেস মোড:
- PV বিভিন্ন অ্যাক্সেস মোড সমর্থন করে, যেমন:
- ReadWriteOnce (RWO): একটি নোডে রিড এবং রাইট অ্যাক্সেস।
- ReadOnlyMany (ROX): অনেক নোডে শুধুমাত্র রিড অ্যাক্সেস।
- ReadWriteMany (RWX): একাধিক নোডে রিড এবং রাইট অ্যাক্সেস।
- PV বিভিন্ন অ্যাক্সেস মোড সমর্থন করে, যেমন:
PV তৈরি করার YAML ফাইলের উদাহরণ:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /mnt/data
server: 192.168.1.100
ব্যাখ্যা:
- capacity:
5Giস্টোরেজ স্পেস বরাদ্দ করা হয়েছে। - accessModes: এখানে
ReadWriteOnceমোড ব্যবহার করা হয়েছে, যা এক নোডে রিড এবং রাইট এক্সেস দেয়। - persistentVolumeReclaimPolicy: এটি
Retainহিসেবে নির্ধারণ করা হয়েছে, যার ফলে PV এর মালিকানা পরিবর্তন হলে বা PV অনমাউন্ট হলে এটি সংরক্ষণ করে রাখা হবে। - nfs: একটি NFS শেয়ার ব্যবহার করা হয়েছে, যেখানে
/mnt/dataপাথটি NFS সার্ভার থেকে এসেছে।
২. Persistent Volume Claim (PVC)
Persistent Volume Claim (PVC) হলো Kubernetes-এ একটি অবজেক্ট, যা PV-এর স্টোরেজ স্পেস দাবি করে। যখন একটি পড বা কন্টেইনার একটি স্টোরেজ প্রয়োজন হয়, তখন এটি PVC ব্যবহার করে একটি নির্দিষ্ট পরিমাণ স্টোরেজ দাবি করে। PVC স্টোরেজ স্পেসের ধরন (যেমন, ReadWriteMany, ReadWriteOnce), পরিমাণ, এবং স্টোরেজ ক্লাস উল্লেখ করে, যা Kubernetes ক্লাস্টারে PV থেকে সংযুক্ত করা হয়।
PVC তৈরি হলে Kubernetes একটি উপযুক্ত PV খুঁজে বের করে এবং PVC-কে সেই PV-এর সাথে সংযুক্ত করে। যদি উপযুক্ত PV পাওয়া না যায়, তাহলে এটি একটি নতুন PV তৈরি করতে পারে (যদি স্টোরেজ ক্লাস সেট করা থাকে)।
PVC-এর বৈশিষ্ট্য:
- স্টোরেজ সাইজ: PVC নির্দিষ্ট স্টোরেজ সাইজ দাবি করে, যেমন ৫GiB, ১০GiB ইত্যাদি।
- অ্যাক্সেস মোড: PVC নির্দিষ্ট করে কোন মোডে এটি স্টোরেজ অ্যাক্সেস করতে চায়, যেমন ReadWriteOnce বা ReadWriteMany।
- স্টোরেজ ক্লাস: যদি ক্লাস্টারে ডাইনামিক প্রভিশনিং সেটআপ করা থাকে, তাহলে PVC স্টোরেজ ক্লাস উল্লেখ করতে পারে, যা একটি উপযুক্ত PV তৈরি করতে সাহায্য করে।
PVC তৈরি করার YAML ফাইলের উদাহরণ:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
ব্যাখ্যা:
- accessModes: এখানে
ReadWriteOnceঅ্যাক্সেস মোড ব্যবহার করা হয়েছে, যা এক নোডে রিড এবং রাইট এক্সেস দেয়। - resources:
5Giস্টোরেজ সাইজ দাবি করা হয়েছে।
৩. PV এবং PVC-এর মধ্যে সম্পর্ক
- PV: Kubernetes-এ স্টোরেজ সরবরাহ করে এবং ক্লাস্টারে সংরক্ষণযোগ্য রিসোর্স হিসেবে কাজ করে।
- PVC: PV-এর স্টোরেজ স্পেস দাবি করে এবং পড বা কন্টেইনারের জন্য একটি স্টোরেজ ভলিউম সংযুক্ত করে। PVC তৈরি হলে Kubernetes একটি উপযুক্ত PV খুঁজে বের করে এবং PVC-কে সেই PV-এর সাথে সংযুক্ত করে।
উদাহরণ: পডে PVC সংযুক্ত করা
PVC তৈরি করার পরে, এটি একটি পডে সংযুক্ত করা যায়, যাতে পডটি স্টোরেজ ব্যবহার করতে পারে।
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: storage
volumes:
- name: storage
persistentVolumeClaim:
claimName: pvc-demo
ব্যাখ্যা:
- volumeMounts: Nginx কন্টেইনারে
/usr/share/nginx/htmlডিরেক্টরিতে PVC মাউন্ট করা হয়েছে। - volumes:
pvc-demoনামে PVC ব্যবহার করা হয়েছে।
সংক্ষেপে
| বৈশিষ্ট্য | Persistent Volume (PV) | Persistent Volume Claim (PVC) |
|---|---|---|
| কাজ | Kubernetes ক্লাস্টারে স্টোরেজ স্পেস প্রদান করে | একটি নির্দিষ্ট পরিমাণ স্টোরেজ দাবি করে এবং পডে সংযুক্ত করে |
| ধরণ | বিভিন্ন ধরনের স্টোরেজ, যেমন NFS, AWS EBS, GCE PD | স্টোরেজ স্পেসের পরিমাণ এবং অ্যাক্সেস মোড উল্লেখ করে |
| অ্যাক্সেস মোড | ReadWriteOnce, ReadOnlyMany, ReadWriteMany | ReadWriteOnce, ReadWriteMany |
| প্রভিশনিং | স্ট্যাটিক বা ডাইনামিক প্রভিশন হতে পারে | শুধুমাত্র ডাইনামিক প্রভিশনিংয়ের জন্য স্টোরেজ ক্লাস উল্লেখ করে |
উপসংহার
Persistent Volume (PV) এবং Persistent Volume Claim (PVC) Kubernetes এবং OpenShift-এ স্টোরেজ ব্যবস্থাপনার জন্য খুবই গুরুত্বপূর্ণ। PV ক্লাস্টারের স্টোরেজ সরবরাহ করে এবং PVC সেই স্টোরেজ স্পেস দাবি করে এবং পড বা কন্টেইনারের জন্য সংযুক্ত করে। এগুলো ব্যবহার করে অ্যাপ্লিকেশন ডেটা পারসিস্টেন্স এবং স্টোরেজ ম্যানেজমেন্ট সহজে নিশ্চিত করা যায়।
OpenShift এবং Kubernetes-এ Storage Class এবং Dynamic Provisioning হলো দুটি গুরুত্বপূর্ণ ধারণা যা Persistent Storage ব্যবস্থাপনার প্রক্রিয়াকে সহজতর করে। এগুলি ব্যবহার করে, আপনি স্টোরেজের ধরন এবং বিভিন্ন প্রয়োজনে স্বয়ংক্রিয়ভাবে স্টোরেজ তৈরি করতে পারেন। নিচে এই দুটি ধারণার ব্যাখ্যা, বৈশিষ্ট্য এবং উদাহরণ দেওয়া হলো।
Storage Class
সংজ্ঞা
Storage Class হল Kubernetes একটি অবজেক্ট যা বিভিন্ন স্টোরেজ প্রোভাইডার এবং তাদের বৈশিষ্ট্যগুলির জন্য একটি পটভূমি প্রদান করে। এটি Persistent Volume (PV) তৈরির সময় স্টোরেজের ধরন নির্ধারণ করে এবং ব্যবহারকারীদের জন্য বিভিন্ন স্টোরেজ সমাধানের মধ্যে নির্বাচন করার সুযোগ দেয়।
বৈশিষ্ট্য
- স্টোরেজ পলিসি: Storage Class বিভিন্ন স্টোরেজ পলিসি নির্ধারণ করে, যেমন পারফরম্যান্স, রিডিওন্ডেন্সি, এবং অ্যাক্সেস মড।
- ডাইনামিক প্রোভিশনিং: Storage Class ব্যবহার করে ডাইনামিকভাবে Persistent Volume তৈরি করা যায়, যা ব্যবহারকারীদের জন্য সোজা করে।
- স্টোরেজ প্রোভাইডার: বিভিন্ন স্টোরেজ সেবা প্রদানকারীদের জন্য কাস্টমাইজড সমাধান তৈরি করতে সহায়তা করে (যেমন AWS EBS, GCE PD, NFS)।
উদাহরণ YAML কনফিগারেশন
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-storage-class
provisioner: kubernetes.io/aws-ebs # স্টোরেজ প্রোভাইডার
parameters:
type: gp2 # EBS টাইপ
iopsPerGB: "10" # IOPS সেটিং
fsType: ext4 # ফাইল সিস্টেম টাইপ
Dynamic Provisioning
সংজ্ঞা
Dynamic Provisioning হল একটি প্রক্রিয়া যার মাধ্যমে Kubernetes স্বয়ংক্রিয়ভাবে Persistent Volume তৈরি করতে পারে যখন একটি Persistent Volume Claim (PVC) তৈরি করা হয়। এর ফলে ব্যবহারকারীদের জন্য স্টোরেজ প্রাপ্তি সহজ এবং দ্রুত হয়, কারণ তাদের স্টোরেজ রিসোর্স ম্যানুয়ালি তৈরি করতে হয় না।
বৈশিষ্ট্য
- স্বয়ংক্রিয় তৈরি: PVC তৈরি করার সাথে সাথে সংযুক্ত Storage Class অনুযায়ী স্বয়ংক্রিয়ভাবে PV তৈরি করা হয়।
- ফ্লেক্সিবল: ডাইনামিক প্রোভিশনিং বিভিন্ন স্টোরেজ প্রোভাইডারের সাথে কাজ করে, যা ব্যবহারকারীদের জন্য সহজ ও কার্যকরী উপায়ে স্টোরেজের অভিজ্ঞতা তৈরি করে।
- মানসম্পন্ন: একাধিক ব্যবহারকারী একই সময়ে ডাইনামিক স্টোরেজ তৈরি করতে পারে, যা তাদের ব্যবস্থাপনার জন্য সুবিধাজনক।
উদাহরণ YAML কনফিগারেশন
- Storage Class তৈরি করা (যা আগে উল্লেখ করা হয়েছে)।
- Persistent Volume Claim (PVC) তৈরি করা:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi # স্টোরেজের জন্য অনুরোধ
storageClassName: example-storage-class # স্টোরেজ ক্লাসের নাম
সারসংক্ষেপ
Storage Class এবং Dynamic Provisioning OpenShift এবং Kubernetes-এ Persistent Storage ব্যবস্থাপনার জন্য অত্যন্ত গুরুত্বপূর্ণ।
- Storage Class: স্টোরেজের ধরন এবং বৈশিষ্ট্য নির্ধারণ করে, যা Persistent Volume তৈরি করার সময় ব্যবহার হয়।
- Dynamic Provisioning: Persistent Volume স্বয়ংক্রিয়ভাবে তৈরি করার জন্য একটি প্রক্রিয়া, যা ব্যবহারকারীদের জন্য স্টোরেজ অ্যাক্সেসকে সহজ করে।
এই ধারণাগুলি ব্যবহার করে, আপনি আপনার কনটেইনারাইজড অ্যাপ্লিকেশনগুলির জন্য কার্যকরী এবং স্বয়ংক্রিয় স্টোরেজ ব্যবস্থাপনা তৈরি করতে সক্ষম হবেন।
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 ব্যবহার করে ডেটাবেস বা অন্য স্টেটফুল অ্যাপ্লিকেশনগুলোকে কার্যকরভাবে ম্যানেজ করা এবং স্কেল করা যায়।
Persistent Volume (PV) কনফিগারেশন হল Kubernetes এবং OpenShift-এ Persistent Storage তৈরি করার একটি প্রক্রিয়া, যা Pods বা কনটেইনারগুলির জন্য স্থায়ীভাবে ডেটা সংরক্ষণ করতে সাহায্য করে। নিচে একটি উদাহরণের মাধ্যমে PV কনফিগারেশন কীভাবে তৈরি করতে হয় তা বিস্তারিত আলোচনা করা হলো।
Persistent Volume Configuration উদাহরণ
১. Persistent Volume (PV) তৈরি করা
Persistent Volume কনফিগারেশন YAML ফাইলের মাধ্যমে তৈরি করা হয়। নিচে একটি উদাহরণ দেওয়া হলো:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 10Gi # স্টোরেজের পরিমাণ
accessModes:
- ReadWriteOnce # একক কনটেইনারের জন্য লেখা এবং পড়া
nfs: # NFS স্টোরেজ ব্যবহার করা হচ্ছে
path: /path/to/nfs # NFS স্টোরেজের পাথ
server: nfs-server # NFS সার্ভারের IP বা DNS নাম
উপাদানগুলোর ব্যাখ্যা
- apiVersion: এই কনফিগারেশনের জন্য ব্যবহৃত API সংস্করণ।
- kind: অবজেক্টের ধরন, যা এখানে
PersistentVolume। - metadata: PV-এর মেটাডাটা, যেমন নাম।
- spec: PV-এর বিশেষ উল্লেখ:
- capacity: স্টোরেজের পরিমাণ যা PV প্রদান করে (এখানে 10Gi)।
- accessModes: কিভাবে PV অ্যাক্সেস করা যাবে।
ReadWriteOnceমানে একটি Pod একই সময়ে লেখার এবং পড়ার জন্য PV অ্যাক্সেস করতে পারবে। - nfs: এখানে NFS স্টোরেজ ব্যবহৃত হয়েছে, যেখানে
pathহলো NFS সার্ভারের ফাইল পাথ এবংserverহলো NFS সার্ভারের আইপি বা DNS।
২. Persistent Volume Claim (PVC) তৈরি করা
Persistent Volume Claim হল একটি আবেদনের মতো যা ব্যবহারকারীদের একটি নির্দিষ্ট পরিমাণ Persistent Volume প্রাপ্তির জন্য নির্দিষ্ট করে। নিচে একটি উদাহরণ দেওয়া হলো:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
spec:
accessModes:
- ReadWriteOnce # একক কনটেইনারের জন্য লেখা এবং পড়া
resources:
requests:
storage: 5Gi # সংরক্ষণের জন্য অনুরোধ
storageClassName: "" # নির্দিষ্ট Storage Class ব্যবহার না হলে খালি থাকবে
উপাদানগুলোর ব্যাখ্যা
- apiVersion: PVC-এর জন্য ব্যবহৃত API সংস্করণ।
- kind: অবজেক্টের ধরন, যা এখানে
PersistentVolumeClaim। - metadata: PVC-এর মেটাডাটা, যেমন নাম।
- spec: PVC-এর বিশেষ উল্লেখ:
- accessModes: একইভাবে PV-এর মত, এটি নির্দেশ করে কিভাবে PVC অ্যাক্সেস করা যাবে।
- resources: এখানে
requestsব্যবহার করে স্টোরেজের জন্য অনুরোধ করা হয়েছে (এখানে 5Gi)। - storageClassName: স্টোরেজ ক্লাস নির্দিষ্ট না হলে এটি খালি থাকবে।
PV এবং PVC তৈরি করা
YAML ফাইল ব্যবহার করে Persistent Volume তৈরি করা
- উপরে উল্লেখিত PV কনফিগারেশন YAML ফাইল (যেমন
pv-config.yaml) তৈরি করুন। - কমান্ড লাইন থেকে নিম্নলিখিত কমান্ড চালান
oc apply -f pv-config.yaml
YAML ফাইল ব্যবহার করে Persistent Volume Claim তৈরি করা
- উপরে উল্লেখিত PVC কনফিগারেশন YAML ফাইল (যেমন
pvc-config.yaml) তৈরি করুন। - কমান্ড লাইন থেকে নিম্নলিখিত কমান্ড চালান:
oc apply -f pvc-config.yaml
সারসংক্ষেপ
Persistent Volume (PV) এবং Persistent Volume Claim (PVC) হল OpenShift এবং Kubernetes-এ Persistent Storage ব্যবস্থাপনার জন্য অত্যন্ত গুরুত্বপূর্ণ। উপরোক্ত উদাহরণের মাধ্যমে আপনি PV এবং PVC কনফিগারেশন তৈরি করতে পারেন, যা Pods বা কনটেইনারগুলির জন্য স্থায়ী ডেটা সংরক্ষণের ব্যবস্থা নিশ্চিত করে।
Read more