ভূমিকা
এই নিবন্ধে আমরা কুবারনেটিস কনফিগম্যাপ (ConfigMap) সম্পর্কে গভীরভাবে আলোচনা করব এবং এজার কুবারনেটিস সার্ভিস (AKS)-এ রেডিস মাস্টার ডিপ্লয়মেন্টে কনফিগম্যাপ ব্যবহার করার প্রক্রিয়া দেখাব।
এই নিবন্ধে কী কী থাকছে?
- কনফিগম্যাপ (ConfigMap) কী?
- কনফিগম্যাপ সহ রেডিস মাস্টার
- ফাইল থেকে কনফিগম্যাপ তৈরি
- YAML ফাইল থেকে কনফিগম্যাপ তৈরি
- কনফিগারেশন ডেটা পড়তে কনফিগম্যাপ ব্যবহার
পূর্বশর্ত
- AKS-এ অ্যাপ্লিকেশন ডিপ্লয়মেন্ট | পার্ট – ১
পূর্ববর্তী নিবন্ধে (AKS-এ অ্যাপ্লিকেশন ডিপ্লয়মেন্ট পার্ট ১) আপনি তৈরি করা রেডিস মাস্টার ডিপ্লয়মেন্ট পরীক্ষা করেছেন। আপনি দেখেছেন কীভাবে একটি ডিপ্লয়মেন্ট রেপ্লিকাসেট (ReplicaSet)-এর সাথে সম্পর্কিত এবং রেপ্লিকাসেট কীভাবে পড (Pods)-এর সাথে সম্পর্কিত। এই পার্ট ২-এ, আপনি একটি কনফিগম্যাপের মাধ্যমে এনভায়রনমেন্ট-নির্দিষ্ট কনফিগারেশন দিয়ে এই রেডিস মাস্টারকে পুনর্নির্মাণ করবেন। কিন্তু প্রথমে, আসুন জানি কনফিগম্যাপ আসলে কী।
কনফিগম্যাপ (ConfigMap) কী?
আপনি স্যাম্পল অ্যাপ্লিকেশনগুলোকে কনফিগম্যাপ ব্যবহার করে কনফিগারেশন বিবরণ দিতে সম্পাদনা করবেন। একটি কনফিগম্যাপ হলো একটি অবজেক্ট যা পডগুলোর কাছে কনফিগারেশন বিবরণ সরবরাহ করার জন্য ব্যবহৃত হয়। এটি আপনাকে কন্টেইনারের বাইরে কনফিগারেশন সেটিংস রাখতে দেয়। তারপর আপনি কনফিগম্যাপকে আপনার ডিপ্লয়মেন্টের সাথে সংযুক্ত করে আপনার অ্যাপ্লিকেশনে এই কনফিগারেশন বিবরণ সরবরাহ করতে পারেন।
কনফিগম্যাপ সহ রেডিস মাস্টার
পূর্ববর্তী ডিপ্লয়মেন্টে কোনো সমস্যা ছিল না। কিন্তু বাস্তব ব্যবহারের ক্ষেত্রে, কিছু কনফিগারেশন সেটিংস ছাড়া অ্যাপ্লিকেশন লঞ্চ করা বিরল। এই ক্ষেত্রে, আমরা রেডিস-মাস্টারের জন্য কনফিগারেশন সেটিংস একটি কনফিগম্যাপ ব্যবহার করে সেট করব। একটি কনফিগম্যাপ হলো কন্টেইনারগুলিকে কনফিগার করার একটি পোর্টেবল উপায়, যাতে প্রতিটি কনফিগারেশনের জন্য বিশেষ ইমেজ তৈরি করতে না হয়। এতে কন্টেইনারে সেট করার জন্য প্রয়োজনীয় ডেটার জন্য কী-মান (key-value) জোড়া থাকে। কনফিগম্যাপ অ-গোপন কনফিগারেশনের জন্য ব্যবহৃত হয়। কুবারনেটিসের গোপন ডেটা (যেমন পাসওয়ার্ড) রাখার জন্য একটি পৃথক অবজেক্ট রয়েছে যাকে সিক্রেট (Secret) বলা হয়।
এই উদাহরণে, আমরা একটি কনফিগম্যাপ তৈরি করব। এই কনফিগম্যাপে, আমরা redis-config কী এবং এর মান হিসেবে নিম্নলিখিত দুটি লাইন কনফিগার করব:
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
এখন, আসুন এই কনফিগম্যাপটি তৈরি করি। কনফিগম্যাপ তৈরির দুটি উপায় রয়েছে:
- ফাইল থেকে কনফিগম্যাপ তৈরি
- YAML ফাইল থেকে কনফিগম্যাপ তৈরি
আমরা প্রতিটিটি বিস্তারিতভাবে অন্বেষণ করব।
ফাইল থেকে কনফিগম্যাপ তৈরি
নিম্নলিখিত ধাপগুলো ফাইল থেকে কনফিগম্যাপ তৈরি করতে সাহায্য করবে:
ধাপ ১। টার্মিনালে code redis-config লিখে এজার ক্লাউড শেল কোড এডিটর খুলুন। নিম্নলিখিত দুটি লাইন কপি-পেস্ট করুন এবং redis-config নামে সংরক্ষণ করুন।
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
ধাপ ২। এখন আপনি নিম্নলিখিত কমান্ড ব্যবহার করে কনফিগম্যাপ তৈরি করতে পারেন।
kubectl create configmap example-redis-config --from-file=redis-config
আপনাকে নিচের আউটপুট পাওয়া উচিত:
configmap/example-redis-config created
ধাপ ৩। আপনি এই কনফিগম্যাপের বর্ণনা জানতে একই কমান্ড ব্যবহার করতে পারেন।
kubectl describe configmap/example-redis-config
আউটপুট স্ক্রিনশটের মতো হবে।
YAML ফাইল থেকে কনফিগম্যাপ তৈরি
এই সেকশনে, আপনি পূর্ববর্তী সেকশনের কনফিগম্যাপটি একটি YAML ফাইল ব্যবহার করে পুনর্জীবিত করবেন।
ধাপ ১। শুরুতে, পূর্বে তৈরি করা কনফিগম্যাপটি মুছে দিন।
kubectl delete configmap/example-redis-config
ধাপ ২। নিম্নলিখিত লাইনগুলো example-redis-config.yaml নামে একটি ফাইলে কপি-পেস্ট করুন এবং সংরক্ষণ করুন।
apiVersion: v1
data:
redis-config: |-
maxmemory 2mb
maxmemory-policy allkeys-lru
kind: ConfigMap
metadata:
name: example-redis-config
namespace: default
ধাপ ৩। এখন আপনি নিম্নলিখিত কমান্ড দিয়ে আপনার কনফিগম্যাপ পুনরায় তৈরি করতে পারেন।
kubectl create -f example-redis-config.yaml
আপনাকে নিচের আউটপুট পাওয়া উচিত:
configmap/example-redis-config created
ধাপ ৪। এই কমান্ডটি পূর্বের অন্যটির মতো একই আউটপুট ফেরত দেয়।
আপনি দেখতে পাচ্ছেন, YAML ফাইল ব্যবহার করে আপনি একই কনফিগম্যাপ তৈরি করতে পেরেছেন।
নোট। kubectl get-র একটি উপযোগী অপশন আছে -o, যেটি ব্যবহার করে আপনি যেকোনো অবজেক্টের আউটপুট YAML বা JSON ফরম্যাটে পেতে পারেন। এটি খুবই কাজে আসে যখন আপনি সিস্টেমে ম্যানুয়ালি পরিবর্তন করছেন এবং ফলস্বরূপ অবজেক্টটি YAML ফরম্যাটে দেখতে চান। আপনি নিম্নলিখিত কমান্ড ব্যবহার করে বর্তমান কনফিগম্যাপটি YAML-এ পেতে পারেন:
kubectl get -o yaml configmap/example-redis-config
এখন আপনার কনফিগম্যাপ সংজ্ঞায়িত হয়ে গেছে, আসুন এটি ব্যবহার করি।
কনফিগারেশন ডেটা পড়তে কনফিগম্যাপ ব্যবহার
এই সেকশনে, আপনি রেডিস-মাস্টার ডিপ্লয়মেন্টকে কনফিগম্যাপ থেকে কনফিগারেশন পড়তে পুনর্কনফিগার করবেন।
ধাপ ১। শুরুতে, redis-master-deployment.yaml-কে নিম্নরূপ কনফিগম্যাপ ব্যবহার করতে পরিবর্তন করুন। সোর্স কোডের পর পরিবর্তনগুলো ব্যাখ্যা করা হয়েছে।
নোট। আপনি যদি GitHub থেকে সোর্স কোড ডাউনলোড করে থাকেন, তবে ডিপ্লয়মেন্ট ফোল্ডারে Application deployment on AKS নামে একটি ফাইল আছে: redis-master-deployment_Modified.yaml, যেটিতে প্রয়োজনীয় পরিবর্তনগুলো প্রয়োগ করা আছে।
apiVersion: apps/v1 # 1.9.0 এর আগের ভার্সন জন্য apps/v1beta2 ব্যবহার করুন
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
volumeMounts:
- mountPath: /redis-master
name: config
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
volumes:
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
চলুন কোডটিতে গভীরে उतরি এবং বিভিন্ন সেকশন বুঝতে চেষ্টা করি।
লাইন ২৪-২৬
এই লাইনগুলো আপনার পড শুরু হলে যে কমান্ডটি এক্সিকিউট হবে সেটি পরিচয় করাচ্ছে। এই ক্ষেত্রে, এটি একটি নির্দিষ্ট কনফিগারেশন ফাইল নির্দেশ করে redis-server শুরু করবে।
command:
- redis-server
- "/redis-master/redis.conf"
লাইন ২৭-২৯
এই লাইনগুলো দেখায় কীভাবে আপনার রানিং কন্টেইনারে কনফিগারেশন ডেটা পাস করতে হয়। এই পদ্ধতি এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে। ডকার ফরম্যাটে, এটি সমতুল্য docker run -e "MASTER=true" --name master -p 6379:6379 -m 100M -c 100m -d Kubernetes /redis:v1। এটি MASTER এনভায়রনমেন্ট ভেরিয়েবলকে true সেট করে। আপনার অ্যাপ্লিকেশন কনফিগারেশনের জন্য এনভায়রনমেন্ট ভেরিয়েবল সেটিংস পড়তে পারে।
env:
- name: MASTER
value: "true"
লাইন ৩০-৩২
এই লাইনগুলো config নামে ভলিউমটি (যেটি লাইন ৩৯-৪৫-এ সংজ্ঞায়িত) রানিং কন্টেইনারের /redis-master পাথে মাউন্ট করে। এটি মূল কন্টেইনারের /redis-master-এ যা কিছু আছে সেটি লুকিয়ে রাখবে। ডকার শব্দে, এটি সমতুল্য docker run -v config:/redis-master -e "MASTER=TRUE" --name master -p 6379:6379 -m 100M -c 100m -d Kubernetes / redis:v1।
volumeMounts:
- mountPath: /redis-master
name: config
লাইন ৪০
ভলিউমকে config নাম দেয়। এই নামটি এই পডের প্রসঙ্গে ব্যবহৃত হবে।
name: config
লাইন ৪১-৪২
ঘোষণা করে যে এই ভলিউমটি example-redis-config কনফিগম্যাপ থেকে লোড হওয়া উচিত। এই কনফিগম্যাপটি ইতিমধ্যে সিস্টেমে থাকা উচিত। আপনি ইতিমধ্যে এটি সংজ্ঞায়িত করেছেন, তাই আপনি ঠিক আছেন।
configMap:
name: example-redis-config
লাইন ৪৩-৪৫
এখানে, আপনি redis-config কী-এর মান (দুটি লাইনের maxmemory সেটিংস) একটি redis.conf ফাইল হিসেবে লোড করছেন।
items:
- key: redis-config
path: redis.conf
ধাপ ২। আসুন এই আপডেট করা ডিপ্লয়মেন্ট তৈরি করি।
kubectl create -f redis-master-deployment_Modified.yml
এটি নিম্নলিখিত আউটপুট দেবে।
deployment.apps/redis-master created
ধাপ ৩। এখন নিশ্চিত করি যে কনফিগারেশন সফলভাবে প্রয়োগ হয়েছে। প্রথমে পডের নাম জানুন।
kubectl get pods
ধাপ ৪। তারপর পডের ভিতরে ঢুকে (exec) সেটিংস যাচাই করুন।
kubectl exec -it redis-master-<pod-id> redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "allkeys-lru"
127.0.0.1:6379> exit
সংক্ষেপে, আপনি ক্লাউড-নেটিভ অ্যাপ্লিকেশন কনফিগার করার একটি গুরুত্বপূর্ণ এবং জটিল অংশ সম্পন্ন করেছেন। আপনি লক্ষ্য করেছেন হবে যে অ্যাপ্লিকেশনগুলিকে ডাইনামিকভাবে কনফিগারেশন পড়তে কনফিগার করা पड़ता है। আপনার অ্যাপকে কনফিগারেশন সহ সেট আপ করার পর, আপনি রানিং কন্টেইনারে এক্সেস করে রানিং কনফিগারেশন যাচাই করেছেন।
এই পার্ট ২-এ, আপনি রেডিস মাস্টারকে কনফিগম্যাপ থেকে কনফিগারেশন ডেটা লোড করতে কনফিগার করেছেন। পরের চূড়ান্ত পার্ট ৩-এ, আমরা এন্ড-টু-এন্ড অ্যাপ্লিকেশন ডিপ্লয় করব।