Úvod
Kubernetes je open source systém pro orchestraci kontejnerů pro automatizaci nasazení, škálování a správu kontejnerových aplikací. Provozování databáze PostgreSQL na Kubernetes je v dnešní době diskutovaným tématem, protože Kubernetes poskytuje způsoby, jak zajistit stavový kontejner pomocí trvalých svazků, stavových sad atd.
Účelem tohoto blogu je poskytnout kroky ke spuštění databáze PostgreSQL na clusteru Kubernetes. Nezahrnuje instalaci ani konfiguraci clusteru Kubernetes, i když jsme o tom dříve psali v tomto blogu na MySQL Galera Cluster na Kubernetes.
Předpoklady
- Fungující cluster Kubernetes
- Základní porozumění Dockeru
Cluster Kubernetes můžete zřídit na jakémkoli veřejném poskytovateli cloudu, jako je AWS, Azure nebo Google cloud atd. Postup instalace a konfigurace clusteru Kubernetes pro CentOS najdete zde. Základní informace o nasazení PostgreSQL na kontejneru Docker naleznete v dřívějším příspěvku na blogu.
Chcete-li nasadit PostgreSQL na Kubernetes, musíme postupovat podle následujících kroků:
- Obrázek Postgres Docker
- Konfigurační mapy pro ukládání konfigurací Postgres
- Trvalý objem úložiště
- Nasazení PostgreSQL
- Služba PostgreSQL
Obrázek PostgreSQL Docker
Používáme PostgreSQL 10.4 Obrázek dockeru z veřejného registru. Tento obrázek poskytne funkcionalitu poskytování vlastních konfigurací/proměnných prostředí PostgreSQL, jako je uživatelské jméno, heslo, název databáze a cesta atd.
Konfigurační mapy pro konfigurace PostgreSQL
Pro ukládání informací souvisejících s PostgreSQL budeme používat konfigurační mapy. Zde používáme databázi, uživatele a heslo v konfigurační mapě, kterou použije PostgreSQL pod v šabloně nasazení.
Soubor:postgres-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: admin123
Vytvořte zdroj konfiguračních map Postgres
$ kubectl create -f postgres-configmap.yaml
configmap "postgres-config" created
Trvalý objem úložiště
Jak všichni víte, kontejnery Docker jsou svou povahou pomíjivé. Všechna data generovaná kontejnerem nebo v něm budou po ukončení instance kontejneru ztracena.
Abychom data uložili, budeme k ukládání dat na perzistentních úložištích používat trvalé svazky a zdroj trvalých nároků na svazky v rámci Kubernetes.
Zde používáme místní adresář/cestu jako prostředek trvalého úložiště (/mnt/data)
Soubor: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
Vytvořte nasazení související s úložištěm
$ kubectl create -f postgres-storage.yaml
persistentvolume "postgres-pv-volume" created
persistentvolumeclaim "postgres-pv-claim" created
Nasazení PostgreSQL
PostgreSQL manifest pro nasazení kontejneru PostgreSQL používá obraz PostgreSQL 10.4. Používá konfiguraci PostgreSQL, jako je uživatelské jméno, heslo, název databáze z konfigurační mapy, kterou jsme vytvořili dříve. Také připojí svazek vytvořený z trvalých svazků a tvrdí, že data kontejneru PostgreSQL zůstanou zachována.
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
Vytvořte nasazení Postgres
$ kubectl create -f postgres-deployment.yaml
deployment "postgres" created
Stáhněte si Whitepaper Today Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si Whitepaper Služba PostgreSQL
Pro přístup k nasazení nebo kontejneru musíme odhalit službu PostgreSQL. Kubernetes poskytuje různé typy služeb, jako je ClusterIP, NodePort a LoadBalancer.
S ClusterIP můžeme přistupovat ke službě PostgreSQL v rámci Kubernetes. NodePort poskytuje možnost odhalit koncový bod služby na uzlech Kubernetes. Pro externí přístup k PostgreSQL musíme použít typ služby Load Balancer, který službu zpřístupní externě.
Soubor:postgres-service.yaml
apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
app: postgres
spec:
type: NodePort
ports:
- port: 5432
selector:
app: postgres
Vytvořit službu Postgres
$ kubectl create -f postgres-service.yaml
service "postgres" created
Připojte se k PostgreSQL
Pro připojení PostgreSQL potřebujeme získat port Node z nasazení služby.
$ kubectl get svc postgres
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
postgres NodePort 10.107.71.253 <none> 5432:31070/TCP 5m
Potřebujeme použít port 31070 pro připojení k PostgreSQL ze stroje/uzlu přítomného v clusteru kubernetes s přihlašovacími údaji uvedenými v konfigurační mapě dříve.
$ psql -h localhost -U postgresadmin1 --password -p 31070 postgresdb
Password for user postgresadmin1:
psql (10.4)
Type "help" for help.
postgresdb=#
Odstranit nasazení PostgreSQL
Pro smazání zdrojů PostgreSQL musíme použít níže uvedené příkazy.
# 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
Doufejme, že pomocí výše uvedených kroků budete schopni zřídit samostatnou instanci PostgreSQL v clusteru Kubernetes.
Závěr
Spuštění PostgreSQL na Kubernetes pomáhá využívat zdroje lépe než při pouhém používání virtuálních strojů. Kubernetes také poskytuje izolaci dalších aplikací pomocí PostgreSQL v rámci stejného virtuálního počítače nebo clusteru Kubernetes.
Tento článek poskytuje přehled o tom, jak můžeme použít PostgreSQL na Kubernetes pro vývojové/POC prostředí. Cluster PostgreSQL můžete prozkoumat/nastavit pomocí stavových sad Kubernetes.
Vyžadují StatefulSets?
V Kubernetes jsou ke škálování stavových aplikací vyžadovány StatefulSets. PostgreSQL lze snadno škálovat pomocí StatefulSets pomocí jediného příkazu.
Odkazy
- Instalace Kubernetes na CentOS:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-oen-centos-7
- Nastavení Kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl
- PostgreSQL pomocí Dockeru:https://severalnines.com/blog/deploying-postgresql-docker-container
- Kubernetes:https://kubernetes.io
- Cluster PostgreSQL pomocí stavových sad https://kubernetes.io/blog/2017/02/postgresql-clusters-kubernetes-statefulsets