परिचय
Kubernetes कंटेनरीकृत अनुप्रयोगों के परिनियोजन, स्केलिंग और प्रबंधन को स्वचालित करने के लिए एक ओपन सोर्स कंटेनर ऑर्केस्ट्रेशन सिस्टम है। Kubernetes पर PostgreSQL डेटाबेस चलाना आजकल चर्चा का विषय है क्योंकि Kubernetes लगातार वॉल्यूम, स्टेटफुलसेट आदि का उपयोग करके स्टेटफुल कंटेनर को प्रोविजन करने के तरीके प्रदान करता है।
इस ब्लॉग का उद्देश्य Kubernetes क्लस्टर पर PostgreSQL डेटाबेस को चलाने के लिए चरण प्रदान करना है। यह Kubernetes क्लस्टर की स्थापना या कॉन्फ़िगरेशन को कवर नहीं करता है, हालांकि हमने पहले इसके बारे में इस ब्लॉग में Kubernetes पर MySQL Galera Cluster पर लिखा था।
आवश्यकताएं
- कार्यशील कुबेरनेट्स क्लस्टर
- डॉकर की बुनियादी समझ
आप किसी भी सार्वजनिक क्लाउड प्रदाता जैसे AWS, Azure या Google क्लाउड आदि पर Kubernetes क्लस्टर का प्रावधान कर सकते हैं। यहाँ CentOS के लिए Kubernetes क्लस्टर स्थापना और कॉन्फ़िगरेशन चरणों का संदर्भ लें। आप Docker कंटेनर पर PostgreSQL परिनियोजित करने के बारे में मूल बातें जानने के लिए पहले के ब्लॉग पोस्ट को भी देख सकते हैं।
PostgreSQL को Kubernetes पर परिनियोजित करने के लिए हमें निम्न चरणों का पालन करना होगा:
- डॉकर छवि पोस्ट करता है
- कॉन्फ़िगर मैप्स पोस्टग्रेज़ कॉन्फ़िगरेशन संग्रहीत करने के लिए
- स्थायी संग्रहण मात्रा
- पोस्टग्रेएसक्यूएल परिनियोजन
- पोस्टग्रेएसक्यूएल सेवा
PostgreSQL डॉकर इमेज
हम PostgreSQL 10.4 का उपयोग कर रहे हैं सार्वजनिक रजिस्ट्री से डॉकर छवि। यह छवि PostgreSQL के कस्टम कॉन्फ़िगरेशन/पर्यावरण चर प्रदान करने की कार्यक्षमता प्रदान करेगी जैसे उपयोगकर्ता नाम, पासवर्ड, डेटाबेस नाम और पथ, आदि।
PostgreSQL कॉन्फ़िगरेशन के लिए मानचित्र कॉन्फ़िगर करें
हम PostgreSQL से संबंधित जानकारी संग्रहीत करने के लिए कॉन्फिग मैप्स का उपयोग करेंगे। यहां, हम कॉन्फ़िगरेशन मानचित्र में डेटाबेस, उपयोगकर्ता और पासवर्ड का उपयोग कर रहे हैं जिसका उपयोग पोस्टग्रेएसक्यूएल पॉड द्वारा परिनियोजन टेम्पलेट में किया जाएगा।
फ़ाइल:postgres-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: admin123
Postgres कॉन्फ़िग मैप संसाधन बनाएँ
$ kubectl create -f postgres-configmap.yaml
configmap "postgres-config" created
स्थायी संग्रहण मात्रा
जैसा कि आप सभी जानते हैं कि डॉकर कंटेनर प्रकृति में अल्पकालिक होते हैं। कंटेनर इंस्टेंस की समाप्ति के बाद कंटेनर द्वारा या कंटेनर में उत्पन्न सभी डेटा खो जाएगा।
डेटा को बचाने के लिए, हम कुबेरनेट्स के भीतर लगातार वॉल्यूम और लगातार वॉल्यूम दावा संसाधन का उपयोग डेटा को लगातार स्टोरेज पर स्टोर करने के लिए करेंगे।
यहां, हम स्थानीय निर्देशिका/पथ का उपयोग स्थायी भंडारण संसाधन (/mnt/डेटा) के रूप में कर रहे हैं
फ़ाइल:postgres-storage.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
type: local
app: postgres
spec:
storageClassName: manual
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
labels:
app: postgres
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
संग्रहण से संबंधित परिनियोजन बनाएं
$ kubectl create -f postgres-storage.yaml
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created
PostgreSQL परिनियोजन
PostgreSQL कंटेनर की तैनाती के लिए PostgreSQL मेनिफेस्ट PostgreSQL 10.4 छवि का उपयोग करता है। यह पोस्टग्रेएसक्यूएल कॉन्फ़िगरेशन का उपयोग कर रहा है जैसे यूज़रनेम, पासवर्ड, डेटाबेस का नाम उस कॉन्फिगमैप से जिसे हमने पहले बनाया था। यह लगातार वॉल्यूम से बनाए गए वॉल्यूम को भी मापता है और पोस्टग्रेएसक्यूएल कंटेनर के डेटा को बनाए रखने का दावा करता है।
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:10.4
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
पोस्टग्रेज़ परिनियोजन बनाएँ
$ kubectl create -f postgres-deployment.yaml
deployment "postgres" created
आज श्वेतपत्र डाउनलोड करें क्लस्टरकंट्रोल के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करें PostgreSQL सेवा
परिनियोजन या कंटेनर तक पहुँचने के लिए, हमें PostgreSQL सेवा को उजागर करने की आवश्यकता है। Kubernetes विभिन्न प्रकार की सेवाएँ प्रदान करता है जैसे ClusterIP, NodePort और LoadBalancer।
ClusterIP के साथ हम Kubernetes के भीतर PostgreSQL सेवा का उपयोग कर सकते हैं। NodePort कुबेरनेट्स नोड्स पर सेवा समापन बिंदु को उजागर करने की क्षमता देता है। PostgreSQL को बाहरी रूप से एक्सेस करने के लिए, हमें लोड बैलेंसर सेवा प्रकार का उपयोग करने की आवश्यकता है जो बाहरी रूप से सेवा को उजागर करता है।
फ़ाइल:postgres-service.yaml
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
पोस्टग्रेज सेवा बनाएं
$ kubectl create -f postgres-service.yaml
service "postgres" created
PostgreSQL से कनेक्ट करें
PostgreSQL को जोड़ने के लिए, हमें सेवा परिनियोजन से नोड पोर्ट प्राप्त करने की आवश्यकता है।
$ kubectl get svc postgres
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
postgres NodePort 10.107.71.253 <none> 5432:31070/TCP 5m
हमें पहले कॉन्फिगमैप में दिए गए क्रेडेंशियल के साथ कुबेरनेट्स क्लस्टर में मौजूद मशीन/नोड से PostgreSQL से कनेक्ट करने के लिए पोर्ट 31070 का उपयोग करने की आवश्यकता है।
$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1:
psql (10.4)
Type "help" for help.
postgresdb=#
PostgreSQL परिनियोजन हटाएं
PostgreSQL संसाधनों को हटाने के लिए, हमें नीचे दिए गए आदेशों का उपयोग करने की आवश्यकता है।
# kubectl delete service postgres
# kubectl delete deployment postgres
# kubectl delete configmap postgres-config
# kubectl delete persistentvolumeclaim postgres-pv-claim
# kubectl delete persistentvolume postgres-pv-volume
उम्मीद है, उपरोक्त चरणों का उपयोग करके आप कुबेरनेट्स क्लस्टर पर एक स्टैंडअलोन पोस्टग्रेएसक्यूएल इंस्टेंस का प्रावधान करने में सक्षम हैं।
निष्कर्ष
Kubernetes पर PostgreSQL चलाने से वर्चुअल मशीन का उपयोग करने की तुलना में संसाधनों का बेहतर उपयोग करने में मदद मिलती है। Kubernetes उसी वर्चुअल मशीन या Kubernetes क्लस्टर के भीतर PostgreSQL का उपयोग करके अन्य अनुप्रयोगों को अलग-थलग करने की सुविधा भी प्रदान करता है।
यह आलेख इस बारे में एक सिंहावलोकन प्रदान करता है कि हम विकास/पीओसी पर्यावरण के लिए कुबेरनेट्स पर पोस्टग्रेएसक्यूएल का उपयोग कैसे कर सकते हैं। आप Kubernetes के स्टेटफुलसेट का उपयोग करके PostgreSQL क्लस्टर को एक्सप्लोर/सेटअप कर सकते हैं।
स्टेटफुलसेट्स की आवश्यकता है?
कुबेरनेट्स में, स्टेटफुलसेट्स को स्टेटफुल एप्लिकेशन को स्केल करने की आवश्यकता होती है। एक कमांड के साथ स्टेटफुलसेट्स का उपयोग करके PostgreSQL को आसानी से बढ़ाया जा सकता है।
संदर्भ
- CentOS पर कुबेरनेट्स इंस्टालेशन:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
- कुबेक्टल सेटअप:https://kubernetes.io/docs/tasks/tools/install-kubectl
- डॉकर का उपयोग कर पोस्टग्रेएसक्यूएल:https://severalnines.com/blog/deploying-postgresql-docker-container
- कुबेरनेट्स:https://kubernetes.io
- स्टेटफुलसेट का उपयोग कर पोस्टग्रेएसक्यूएल क्लस्टर https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets