PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menggunakan Kubernetes untuk Menerapkan PostgreSQL

Pengantar

Kubernetes adalah sistem orkestrasi container open source untuk mengotomatisasi penerapan, penskalaan, dan pengelolaan aplikasi container. Menjalankan database PostgreSQL di Kubernetes adalah topik diskusi saat ini karena Kubernetes menyediakan cara untuk menyediakan container stateful menggunakan volume persisten, statefulsets, dll.

Blog ini dimaksudkan untuk memberikan langkah-langkah menjalankan database PostgreSQL di cluster Kubernetes. Itu tidak mencakup instalasi atau konfigurasi cluster Kubernetes, meskipun sebelumnya kami telah menulisnya di blog ini di MySQL Galera Cluster di Kubernetes.

Prasyarat

  • Kluster Kubernetes yang berfungsi
  • Pemahaman dasar tentang Docker

Anda dapat menyediakan kluster Kubernetes di penyedia cloud publik seperti AWS, Azure atau Google cloud, dll. Lihat langkah-langkah instalasi dan konfigurasi kluster Kubernetes untuk CentOS di sini. Anda juga dapat memeriksa entri blog sebelumnya untuk mengetahui dasar-dasar tentang Menyebarkan PostgreSQL pada wadah Docker.

Untuk Deploy PostgreSQL di Kubernetes kita perlu mengikuti langkah-langkah di bawah ini:

  • Gambar Docker Postgres
  • Konfigurasi Peta untuk menyimpan konfigurasi Postgres
  • Volume Penyimpanan Persisten
  • Penerapan PostgreSQL
  • Layanan PostgreSQL

Gambar Docker PostgreSQL

Kami menggunakan PostgreSQL 10.4 Gambar Docker dari registri publik. Gambar ini akan menyediakan fungsionalitas untuk menyediakan konfigurasi khusus/variabel lingkungan PostgreSQL seperti nama pengguna, kata sandi, nama dan jalur basis data, dll.

Peta Konfigurasi untuk Konfigurasi PostgreSQL

Kami akan menggunakan peta konfigurasi untuk menyimpan informasi terkait PostgreSQL. Di sini, kami menggunakan database, pengguna, dan kata sandi di peta konfigurasi yang akan digunakan oleh pod PostgreSQL di template penerapan.

File:postgres-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: postgresdb
  POSTGRES_USER: postgresadmin
  POSTGRES_PASSWORD: admin123

Buat sumber daya peta konfigurasi Postgres

$ kubectl create -f postgres-configmap.yaml 
configmap "postgres-config" created

Volume Penyimpanan Persisten

Seperti yang Anda semua tahu bahwa wadah Docker bersifat sementara. Semua data yang dihasilkan oleh atau di dalam container akan hilang setelah penghentian instance container.

Untuk menyimpan data, kami akan menggunakan Volume persisten dan sumber daya klaim volume persisten dalam Kubernetes untuk menyimpan data di penyimpanan persisten.

Di sini, kami menggunakan direktori/jalur lokal sebagai sumber daya penyimpanan Persisten (/mnt/data)

File: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

Buat penerapan terkait penyimpanan

$ kubectl create -f postgres-storage.yaml 
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created

Penerapan PostgreSQL

Manifes PostgreSQL untuk penyebaran wadah PostgreSQL menggunakan gambar PostgreSQL 10.4. Ini menggunakan konfigurasi PostgreSQL seperti username, password, nama database dari configmap yang kita buat sebelumnya. Itu juga memasang volume yang dibuat dari volume persisten dan klaim untuk membuat data wadah PostgreSQL tetap ada.

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

Buat penerapan Postgres

$ kubectl create -f postgres-deployment.yaml 
deployment "postgres" created
Unduh Whitepaper Hari Ini Pengelolaan &Otomatisasi PostgreSQL dengan ClusterControlPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan PostgreSQLUnduh Whitepaper

Layanan PostgreSQL

Untuk mengakses penyebaran atau wadah, kita perlu mengekspos layanan PostgreSQL. Kubernetes menyediakan berbagai jenis layanan seperti ClusterIP, NodePort, dan LoadBalancer.

Dengan ClusterIP kita dapat mengakses layanan PostgreSQL di dalam Kubernetes. NodePort memberikan kemampuan untuk mengekspos titik akhir layanan pada node Kubernetes. Untuk mengakses PostgreSQL secara eksternal, kita perlu menggunakan jenis layanan Load Balancer yang mengekspos layanan secara eksternal.

File:postgres-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  type: NodePort
  ports:
   - port: 5432
  selector:
   app: postgres

Buat Layanan Postgres

$ kubectl create -f postgres-service.yaml 
service "postgres" created

Hubungkan ke PostgreSQL

Untuk menghubungkan PostgreSQL, kita perlu mendapatkan port Node dari penerapan layanan.

$ kubectl get svc postgres
NAME       TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
postgres   NodePort   10.107.71.253   <none>        5432:31070/TCP   5m

Kita perlu menggunakan port 31070 untuk terhubung ke PostgreSQL dari mesin/node yang ada di cluster kubernetes dengan kredensial yang diberikan di configmap sebelumnya.

$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1: 
psql (10.4)
Type "help" for help.
 
postgresdb=#

Hapus Penerapan PostgreSQL

Untuk menghapus resource PostgreSQL, kita perlu menggunakan perintah di bawah ini.

# 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

Semoga, dengan menggunakan langkah-langkah di atas, Anda dapat menyediakan instance PostgreSQL mandiri di Cluster Kubernetes.

Kesimpulan

Menjalankan PostgreSQL di Kubernetes membantu memanfaatkan sumber daya dengan cara yang lebih baik daripada hanya menggunakan mesin virtual. Kubernetes juga menyediakan isolasi aplikasi lain menggunakan PostgreSQL dalam mesin virtual atau cluster Kubernetes yang sama.

Artikel ini memberikan gambaran umum tentang bagaimana kita dapat menggunakan PostgreSQL di Kubernetes untuk lingkungan pengembangan/POC. Anda dapat menjelajahi/mengatur cluster PostgreSQL menggunakan statefulsets dari Kubernetes.

StatefulSets diperlukan?

Di Kubernetes, StatefulSets diperlukan untuk menskalakan aplikasi stateful. PostgreSQL dapat dengan mudah diskalakan menggunakan StatefulSets dengan satu perintah.

Referensi

  • Instalasi Kubernetes di CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
  • Penyiapan Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
  • PostgreSQL Menggunakan Docker:https://severalnines.com/blog/deploying-postgresql-docker-container
  • Kubernetes:https://kubernetes.io
  • Cluster PostgreSQL menggunakan statefulsets 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. Migrasi Rails:mencoba mengubah jenis kolom dari string menjadi integer

  2. Susunan tidak bersarang dengan satu tingkat

  3. Format Angka dengan Koma di PostgreSQL

  4. Dapatkan nama pemilik DB di PostgreSql

  5. Pernyataan INSERT opsional dalam rantai transaksi menggunakan NodeJS dan Postgres