PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL को तैनात करने के लिए Kubernetes का उपयोग करना

परिचय

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में डेटाबेस में टेक्स्ट डेटा लोड करने का कोई तरीका है?

  2. क्या अपडेट/डिलीट को अक्षम करने का कोई तरीका है लेकिन फिर भी ट्रिगर्स को उन्हें निष्पादित करने की अनुमति है?

  3. ~/.psqlrc डीबीए के लिए फ़ाइल

  4. पीएल/पीजीएसक्यूएल की तुलना में सी में पोस्टग्रेएसक्यूएल सरणी इतनी तेजी से क्यों पहुंचती है?

  5. चाइल्ड टेबल इंसर्शन के लिए ट्रिगर बनाना भ्रमित करने वाली त्रुटि देता है