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