परिचय
इस लेख में हम Azure Kubernetes Service (AKS) पर एप्लिकेशन डिप्लॉय करने की उन्नत कॉन्फ़िगरेशन तकनीकों का अध्ययन करेंगे। पिछले भाग में हमने बुनियादी डिप्लॉयमेंट देखा था, अब हम ConfigMap के माध्यम से वातावरण-विशिष्ट कॉन्फ़िगरेशन लागू करना सीखेंगे।
इस लेख में क्या शामिल है?
- ConfigMap क्या है?
- ConfigMap के साथ Redis मास्टर
- फाइल से ConfigMap बनाना
- YAML फाइल से ConfigMap बनाना
- कॉन्फ़िगरेशन डेटा पढ़ने के लिए ConfigMap का उपयोग
पूर्वापेक्षाएँ
- AKS पर एप्लिकेशन डिप्लॉयमेंट | भाग - 1
पिछले लेख में आपने Redis मास्टर डिप्लॉयमेंट की जांच की थी। आपने देखा कि डिप्लॉयमेंट का ReplicaSet से और ReplicaSet का Pods से कैसे संबंध होता है। इस भाग 2 में, हम ConfigMap के माध्यम से वातावरण-विशिष्ट कॉन्फ़िगरेशन प्रदान करके इस Redis मास्टर को फिर से बनाएंगे। लेकिन पहले, आइए समझते हैं कि ConfigMap क्या है।
ConfigMap क्या है?
ConfigMap एक Kubernetes ऑब्जेक्ट है जिसका उपयोग Pods को कॉन्फ़िगरेशन विवरण प्रदान करने के लिए किया जाता है। यह आपको वास्तविक कंटेनर के बाहर कॉन्फ़िगरेशन सेटिंग्स रखने की अनुमति देता है। फिर आप ConfigMap को अपने डिप्लॉयमेंट से जोड़कर इन कॉन्फ़िगरेशन विवरणों को अपने एप्लिकेशन तक पहुंचा सकते हैं।
ConfigMap के साथ Redis मास्टर
पिछले डिप्लॉयमेंट में कुछ भी गलत नहीं था। व्यावहारिक उपयोग के मामलों में, किसी एप्लिकेशन को कुछ कॉन्फ़िगरेशन सेटिंग्स के बिना लॉन्च करना दुर्लभ होगा। इस मामले में, हम ConfigMap का उपयोग करके redis-master के लिए कॉन्फ़िगरेशन सेटिंग्स सेट करेंगे। ConfigMap विशेष छवियों के बिना प्रत्येक कॉन्फ़िगरेशन के लिए कंटेनरों को कॉन्फ़िगर करने का एक पोर्टेबल तरीका है। इसमें कंटेनर पर सेट किए जाने वाले डेटा के लिए key-value pair होता है। ConfigMap का उपयोग गैर-गोपनीय कॉन्फ़िगरेशन के लिए किया जाता है। Kubernetes के पास Secret नामक एक अलग ऑब्जेक्ट होता है जिसका उपयोग पासवर्ड जैसे महत्वपूर्ण डेटा वाली कॉन्फ़िगरेशन के लिए किया जाता है।
इस उदाहरण में, हम एक ConfigMap बनाएंगे जिसमें हम redis-config को key के रूप में और निम्नलिखित को value के रूप में कॉन्फ़िगर करेंगे:
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
अब, आइए इस ConfigMap को बनाते हैं। ConfigMap बनाने के दो तरीके हैं:
- फाइल से ConfigMap बनाना
- YAML फाइल से ConfigMap बनाना
हम प्रत्येक को विस्तार से जानेंगे।
फाइल से ConfigMap बनाना
निम्नलिखित चरण हमें फाइल से ConfigMap बनाने में मदद करेंगे:
चरण 1. टर्मिनल में code redis-config टाइप करके Azure Cloud Shell कोड संपादक खोलें। निम्नलिखित दो लाइनें कॉपी करके पेस्ट करें और इसे redis-config के रूप में सेव करें।
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
चरण 2. अब आप निम्नलिखित कमांड का उपयोग करके ConfigMap बना सकते हैं:
kubectl create configmap example-redis-config --from-file=redis-config
आपको नीचे दिखाया गया आउटपुट मिलना चाहिए:
configmap/example-redis-config created
चरण 3. आप इसी कमांड का उपयोग करके इस ConfigMap का वर्णन कर सकते हैं:
kubectl describe configmap/example-redis-config
YAML फाइल से ConfigMap बनाना
इस खंड में, आप पिछले खंड के ConfigMap को YAML फाइल का उपयोग करके फिर से बनाएंगे।
चरण 1. शुरू करने के लिए, पहले बनाए गए ConfigMap को हटाएं:
kubectl delete configmap/example-redis-config
चरण 2. निम्नलिखित लाइनों को example-redis-config.yaml नामक फाइल में कॉपी करके पेस्ट करें, फिर फाइल सेव करें:
apiVersion: v1
data:
redis-config: |-
maxmemory 2mb
maxmemory-policy allkeys-lru
kind: ConfigMap
metadata:
name: example-redis-config
namespace: default
चरण 3. अब आप निम्नलिखित कमांड के माध्यम से अपना ConfigMap फिर से बना सकते हैं:
kubectl create -f example-redis-config.yaml
आपको निम्नलिखित आउटपुट मिलना चाहिए:
configmap/example-redis-config created
नोट. kubectl get में उपयोगी -o विकल्प होता है, जिसका उपयोग किसी ऑब्जेक्ट का आउटपुट YAML या JSON में प्राप्त करने के लिए किया जा सकता है। यह उन मामलों में बहुत उपयोगी है जहां आपने सिस्टम में मैन्युअल परिवर्तन किए हैं और परिणामी ऑब्जेक्ट को YAML प्रारूप में देखना चाहते हैं। आप निम्नलिखित कमांड का उपयोग करके वर्तमान ConfigMap को YAML में प्राप्त कर सकते हैं:
kubectl get -o yaml configmap/example-redis-config
अब जब आपके पास ConfigMap परिभाषित है, आइए इसका उपयोग करें।
कॉन्फ़िगरेशन डेटा पढ़ने के लिए ConfigMap का उपयोग
इस खंड में, आप redis-master डिप्लॉयमेंट को ConfigMap से कॉन्फ़िगरेशन पढ़ने के लिए पुनः कॉन्फ़िगर करेंगे।
चरण 1. शुरू करने के लिए, redis-master-deployment.yaml को निम्नानुसार संशोधित करें ताकि यह ConfigMap का उपयोग करे। आवश्यक परिवर्तनों को स्रोत कोड के बाद समझाया गया है।
नोट. यदि आपने GitHub से स्रोत कोड डाउनलोड किया है, तो डिप्लॉयमेंट फोल्डर में "AKS पर एप्लिकेशन डिप्लॉयमेंट" नामक एक फाइल है, जिसे redis-master-deployment_Modified.yaml कहा जाता है, जिसमें आवश्यक परिवर्तन पहले से लागू हैं।
apiVersion: apps/v1
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
आइए कोड को गहराई से समझते हैं:
लाइन 24-26
ये लाइनें एक कमांड पेश करती हैं जो आपके Pod के शुरू होने पर निष्पादित होगी। इस मामले में, यह redis-server को एक विशिष्ट कॉन्फ़िगरेशन फाइल की ओर इंगित करके शुरू करेगा।
command:
- redis-server
- "/redis-master/redis.conf"
लाइन 27-29
दर्शाता है कि अपने रनिंग कंटेनर को कॉन्फ़िगरेशन डेटा कैसे पास करें। यह विधि वातावरण चर का उपयोग करती है। Docker के रूप में, यह docker run -e "MASTER=true" के बराबर होगा। यह MASTER वातावरण चर को true पर सेट करता है। आपका एप्लिकेशन अपनी कॉन्फ़िगरेशन के लिए वातावरण चर सेटिंग्स पढ़ सकता है।
env:
- name: MASTER
value: "true"
लाइन 30-32
ये लाइनें config नामक वॉल्यूम को रनिंग कंटेनर पर /redis-master पथ पर माउंट करती हैं। यह मूल कंटेनर पर /redis-master पर मौजूद किसी भी चीज़ को छिपा देगा। Docker के संदर्भ में, यह docker run -v config:/redis-master के बराबर होगा।
volumeMounts:
- mountPath: /redis-master
name: config
लाइन 40
वॉल्यूम को config नाम देता है। इस नाम का उपयोग इस Pod के संदर्भ में किया जाएगा।
name: config
लाइन 41-42
घोषित करते हैं कि इस वॉल्यूम को example-redis-config ConfigMap से लोड किया जाना चाहिए। यह ConfigMap सिस्टम में पहले से मौजूद होना चाहिए।
configMap:
name: example-redis-config
लाइन 43-45
यहां, आप redis-config key के मान (दो-लाइन maxmemory सेटिंग्स) को redis.conf फाइल के रूप में लोड कर रहे हैं।
items:
- key: redis-config
path: redis.conf
चरण 2. आइए इस अद्यतन डिप्लॉयमेंट को बनाते हैं:
kubectl create -f redis-master-deployment_Modified.yml
इसका आउटपुट निम्नलिखित होना चाहिए:
deployment.apps/redis-master created
चरण 3. अब सुनिश्चित करें कि कॉन्फ़िगरेशन सफलतापूर्वक लागू हुआ। पहले Pod का नाम प्राप्त करें:
kubectl get pods
चरण 4. फिर Pod में 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
"maxmemory-policy"
"allkeys-lru"
127.0.0.1:6379> exit
सारांश में, आपने क्लाउड-नेटिव एप्लिकेशन को कॉन्फ़िगर करने का एक महत्वपूर्ण और जटिल हिस्सा अभी-अभी किया है। आपने यह भी देखा होगा कि ऐप्स को डायनामिक रूप से कॉन्फ़िगरेशन पढ़ने के लिए कॉन्फ़िगर किया जाना चाहिए। अपने ऐप को कॉन्फ़िगरेशन के साथ सेट करने के बाद, आप रनिंग कॉन्फ़िगरेशन को सत्यापित करने के लिए एक रनिंग कंटेनर तक पहुंचे।
इस भाग 2 में, आपने Redis मास्टर को ConfigMap से कॉन्फ़िगरेशन डेटा लोड करने के लिए कॉन्फ़िगर किया। अगले अंतिम भाग 3 में, हम एंड-टू-एंड एप्लिकेशन डिप्लॉय करेंगे।